【问题标题】:Problems in moving a register value to a memory address in assembly language using fasm assembler?使用 fasm 汇编程序将寄存器值移动到汇编语言中的内存地址时出现问题?
【发布时间】:2015-09-12 03:44:20
【问题描述】:

我真的对这件事感到困惑。我正在关注 x86 处理器的汇编编程一书,并且正在阅读有关 mov 指令及其工作原理的信息。所以,作者说下面的指令是有效的 mov mem,reg.....基本上将寄存器值移动到内存地址。

现在这是我尝试过的,但我不断收到这个错误,称为无效操作数。有人可以解释一下到底是什么错误。

#fasm#

 mov ax,[var] ;the value 67 is moved to the ax register works perfect
 mov myvar,ax ; my aim is to move the value 67 to the memory location of ;myvar but then i keep getting this error - Invalid operand? why is that?

var: dw 67   
myvar: dw ?

【问题讨论】:

    标签: assembly fasm


    【解决方案1】:

    你可以试试这个:

    mov [myvar], ax
    
    • myvar 是一个常量,保存为变量分配的内存地址。
    • [myvar] 指示在myvar 指向的地址处获取/存储内存中的值

    所以:

    mov ax, myvar  ; load the address of myvar in ax
    mov ax, [myvar]; load the value stored at address myvar
    mov [myvar], ax; store the value of ax at address myvar
    

    【讨论】:

    • :- 谢谢你。我之前尝试过,它可以工作。但这是否意味着我将值移动到变量而不是将其移动到其内存地址?
    • 我不明白两者之间的区别。您是说myvar 包含您要放置值的地址吗?
    • :- 是的,这就是我的意思,因为当我尊重 myvar 到 [myvar] 时,我得到了值,当我将 myvar 移动到寄存器时,我看到 myvar 的地址被复制到寄存器中。
    • myvar dw ? ;这意味着汇编器分配一个内存地址和地址为 myvar 的标签。如果你希望你的第二行工作,你需要通知汇编器它的类型。因此,有效的指令是 mov word ptr myvar,ax ; ptr 是汇编程序保留的助记符。
    • @quasar66 - 这不是 FASM 语法!在 FASM 中,如果要覆盖标签类型,则必须使用 mov word [myvar], ax;如果 myvar 由dw 定义,则仅mov [myvar], ax 就足够了,推荐使用。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2018-08-26
    • 2012-01-19
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多