有效地址计算无效

发布于 2024-09-01 13:39:27 字数 697 浏览 8 评论 0原文

请看下面的程序,错误是有效地址计算无效,我已经提到了该行,请告诉我为什么它的有效地址计算无效 这是程序

[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

Please look at the following program, the error is invalid effective address calculation and i have mentioned that line please tell me why its invalid effective address calculation
here is the program

[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

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(2

轻许诺言 2024-09-08 13:39:27
start:  mov bx,0
        mov dx,0 ; <-- did you mean "mov cx, 0" ?
loop:   mov ax,[array2+bx]
        cmp ax,[array1+cx]

编辑:如果我没记错的话,cx寄存器不能用作索引。

表 2-1。采用 ModR/M 字节的 16 位寻址形式

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

Edit: If I recall correctly, cx register can not be used as an index.

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
疯了 2024-09-08 13:39:27

以下公式(对于 TASM)更容易记住地址规范:

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

使用 表示 OR(意味着 BX 和 BP 不能在同一地址规范中)。
常量可以是变量或数值常量。

It is easier to remember the address specification with the following formula (for TASM):

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

Where | Denotes the OR (meaning that BX and BP can't be in the same address specification).
constant can be a variable or a numeric constant.

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文