Цитата(Marusya32 @ Среда, 15 Декабря 2010, 12:39:20)
Нужно на ассемблер решить пример С=(А+В)/4-16, есть код, проверьте его на правильность, пожалуйста:
[ calc proc
xor al, al
mov al, a
mov bl, b
add al, bl
mov bl, 4h
div bl
sub al, 10h
mov vsp, al
ret
calc endp
]
че-то я уже совсем подзабыл 16-битный x86 асм
Но если мне не изменяет память, то выделенная операция делит AX на BL.
Это автоматически означает, что первая часть кода не очень корректная.
То есть, финальный вариант
Цитата
calc proc
xor ax, ax
xor bx, bx
mov al, a
mov bl, b
add ax, bx
mov bl, 4h
div bl
sub al, 10h
mov vsp, al
ret
calc endp
Может быть, не на 100% идеал, но правильнее предыдущего
Изменения выделил.
Есть вариант вообще без операции деления, потому как идет деление на 4 (2 в степени 2)
Вместо
mov bl, 4h
div bl
можно вставить
shr ax, 2
Это побитовый сдвиг регистра ax на 2 бита вправо, что равносильно делению без остатка на 4