assembly 无效的有效地址计算[重复]

cgvd09ve  于 2022-11-13  发布在  其他
关注(0)|答案(2)|浏览(142)

此问题在此处已有答案

Differences between general purpose registers in 8086: [bx] works, [cx] doesn't?(3个答案)
19天前关闭。
请看下面的程序,错误是计算无效有效地址,我刚才提到的那一行请告诉我为什么计算无效有效地址这里是程序

[org 0x100]
jmp start

array1: dw 10,15,20,25,30,35,40,45,50,55
array2: dw 15,10,20,35,40,30,55,50,25,45

start:  mov bx,0
    mov cx,0
loop:   mov ax,[array2+bx]
        cmp ax,[array1+cx]//here is the error invalid effective address calculation 
        jne NextElementOfArray1

NextElementOfArray2:    add bx,2
                        cmp bx,20       
            je end
                        mov cx,0
            jmp loop

NextElementOfArray1:    add cx,2        
                        cmp cx,20       
            je NextElementOfArray2   
            jmp loop
end:    mov ax,0x4c00
    int 0x21
gxwragnw

gxwragnw1#

start:  mov bx,0
        mov dx,0 ; <-- did you mean "mov cx, 0" ?
loop:   mov ax,[array2+bx]
        cmp ax,[array1+cx]

编辑:如果我没记错的话,cx寄存器不能作为索引使用。
Table 2-1. 16-Bit Addressing Forms with the ModR/M Byte

Effective Address Mod R/M Value of ModR/M Byte (in Hexadecimal)

[BX+SI]
[BX+DI]
[BP+SI]
[BP+DI]
[SI]
[DI]
[BX]
[BX+SI]+disp8
[BX+DI]+disp8
[BP+SI]+disp8
[BP+DI]+disp8
[SI]+disp8
[DI]+disp8
[BP]+disp8
[BX]+disp8
[BX+SI]+disp16
[BX+DI]+disp16
[BP+SI]+disp16
[BP+DI]+disp16
[SI]+disp16
[DI]+disp16
[BP]+disp16
[BX]+disp16
1wnzp6jl

1wnzp6jl2#

使用以下公式(对于TASM)更容易记住地址说明:

[BX|BP]+[SI|DI]+constant

在哪里|表示OR(表示BX和BP不能在同一地址规范中)。constant可以是变量或数值常量。

相关问题