【问题标题】:How to move the value in a larger-typed register into a smaller-typed destination?如何将较大类型寄存器中的值移动到较小类型的目标中?
【发布时间】:2014-03-04 04:03:31
【问题描述】:

例如,我想将寄存器中的 DWORD 值移动到类型为 WORD 的内存位置,但出现错误:

mov [arr + eax*TYPE arr], edx ; error: operands must be same size

[] 括号取消对 WORD 类型数组元素的引用。

我也试过这样做:

    mov dx, edx ; error: operands must be same size.     
    mov [arr + eax*TYPE arr], dx 

尝试使用 PTR 也没有运气:

mov dx, WORD PTR edx ; error: invalid use of register 

 mov WORD PTR [arr + eax*TYPE arr], edx ; error: invalid use of register 

mov [arr + eax*TYPE arr], WORD PTR edx ; error: invalid use of register

解决方案?感谢您的帮助!

【问题讨论】:

  • 你不能把一加仑水放进一个 1/2 加仑的水壶里!

标签: pointers assembly type-conversion masm cpu-registers


【解决方案1】:

寄存器DX实际上是32位寄存器EDX的最低16位。您不需要需要mov dx, edx,因为DX 已经存在。因此,您只需将 DX 存储在 word 大小的变量中:

mov  [word_variable], dx

当然,edx 的最高 16 位会在这样的传输中丢失。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-10-08
    • 1970-01-01
    • 1970-01-01
    • 2013-01-21
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多