Как заставить требуемую функцию работать, сравнивая числа? - PullRequest
0 голосов
/ 14 октября 2019

Я написал код на эмуляторе эмулятора ассемблера emu8086 для сравнения x + c с 0, и мне нужны мои функции для работы по результатам сравнения.

f1, when x + c < 0
f2, when x + c = 0
f3, when x + c > 0
    MOV ax, x[si]        
    MOV bl, c 
    CBW
    ADD ax, bx
    CBW  
    CMP ax, 0 
    JE f2; 
    JL f1;
    JG f3 ;

Я ожидаю получить f2 функция работает, когда ax (x + c) равен нулю, f1 работает, когда ax (x + c) меньше нуля, и f3, когда ax (x + c) больше нуля, но почему-тотолько f2 и f3 правильно, я получаю f2 вместо f1 , я не могу понять, что не так. Даже когда я пишу

    JE f1; 
    JL f1;
    JG f1 ;

, он по-прежнему не выполняет f1, выполняет f2 вместо f1, но если я удаляю f3 из моего кода, то выполнение f1 выполняется. функции выглядят так:

f1: MOV ax, 2
    IMUL a
    JO kl1  ; 
    MOV bx, x[si]
    CMP bx, 0
    JG mod       
    NEG bx
mod:    ADD ax, bx   
MOV dx, ax
    JO kl1

f2: MOV ax, 6 
    ADD ax, 3
    JO kl1
    JMP re    
f3: MOV ax, 4

    JO kl1   
    JMP re 

1 Ответ

1 голос
/ 14 октября 2019

CBW расширяет AL в AX. Вы хотите расширить BL до BX.

Я предлагаю вам загрузить c в AL, использовать CBW, а затем добавить x.

...