2016-05-12 2 views
0

Я работаю над простой программой, которая объединяет два числа и дает среднее значение для них. Моя проблема с делением. Я устанавливаю bl = 2 и использую его для разделения на регистр топора, у которого есть правильное целое число, однако я не могу получить правильный ответ. например, когда я делю 8 на 2, я получаю 1c в al register.Деление на сборку

mov dl, bl  
add dx, 30h; two user entered numbers add together and converted 
mov ah, 2h 
int 21h 

;mov dx, 0h 
mov ax, dx ; 
mov bl, 2 
div bl ; al, ah for results 

ответ

7

Вы добавили 30h в dx, так что вы разделив 38h, не 8. И 38h/2 == 1Ch.

В качестве дополнительного примечания в специальном случае, когда вы делите на 2 (например, 2, 4, 8, 16 и т. Д.), Вы можете сделать это, сдвинув биты log2 (divisor) в вместо этого. В этом случае это будет shr ax, 1 (или sar ax, 1, если вы хотите обработать ax в качестве подписанного номера).