【问题标题】:Masm indirect addressing mode for MOV commandMOV 命令的 Masm 间接寻址模式
【发布时间】:2009-12-07 16:44:35
【问题描述】:

我尝试了以下表格,但 masm 都不喜欢其中的任何一个:

mov byte [myVariable], al
mov byte ptr [myVariable], al
mov [byte myVariable], al

我错过了什么?为什么我似乎不能使用间接寻址。

我从 masm 得到的错误是在某些行上“缺少表达式中的运算符”,其中一些说“预期结构字段”

【问题讨论】:

    标签: masm addressing-mode


    【解决方案1】:
    myVariable equ 0404h
    

    不声明变量,它声明一个常量。汇编器简单地将所有常量替换为目标文件中的值。因此,

    mov [myVariable], al
    

    变成

    mov [0404h], al
    

    这是无效的。

    您必须将值分配给寄存器,如下所示:

    mov di,0404h
    mov byte ptr [di],al
    

    【讨论】:

    • 您可以只使用立即数作为基值。您可以将其作为 `mov [ds:myVariable], al` (指定基相对于的任何段)
    【解决方案2】:
    mov [myVariable], al
    

    应该足够了,甚至只是:

    mov myVariable, al
    

    但话又说回来 mov byte ptr [myVariable], al 应该工作,这让我想知道“什么是'myVariable'”?

    【讨论】:

    • 它是在顶部声明的地址,例如 myVariable equ 0404h。然后一些调用正在使用具有偏移量的寄存器,例如 bp+10
    • 间接寻址不适用于:and [bp+22h], 77h 导致“无效指令操作数”
    • 将其更改为 mov ds:[myvariable], al 并得到:“无效指令操作数”
    • 这真的很奇怪。也许您应该创建一个非常非常小的完整示例并向我们展示?
    • 这是一个小测试程序: .model tiny .stack .186 .code myValue equ 03f6h myValue2 equ 0400h mov bp,myValue and [bp+18h],0feh mov ds:[myValue2],1 jmp [cs:testLabel] testLabel: nop nop jmp testLabel end line 9&10: Invalid instruction operands
    猜你喜欢
    • 2013-01-20
    • 2019-01-13
    • 1970-01-01
    • 1970-01-01
    • 2015-06-25
    • 2012-05-11
    • 1970-01-01
    • 2015-07-26
    • 2014-09-10
    相关资源
    最近更新 更多