неверный расчет действующего адреса - PullRequest
3 голосов
/ 11 мая 2010

Пожалуйста, посмотрите на следующую программу, ошибка неверного вычисления эффективного адреса, и я упомянул эту строку, пожалуйста, скажите мне, почему это неверный расчет эффективного адреса вот программа

[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

Ответы [ 2 ]

9 голосов
/ 11 мая 2010
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. 16-битные формы адресации с байтом ModR / M

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
0 голосов
/ 21 февраля 2014

Проще запомнить спецификацию адреса по следующей формуле (для TASM):

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

Где | Обозначает OR (это означает, что BX и BP не могут быть в одной спецификации адреса). константа может быть переменной или числовой константой.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...