Это правильно?
Нет, потому что в вопросе указано, что x=7
и ваша программа определяет x db 6
.
... и Мне нужно показать десятичные дроби
Если x=7
, тогда выражение (x+3)/2
не даст дроби (результат будет 5).
Однако, если мы сделаем упражнение немного интереснее, мы могли бы предусмотреть ряд входных данных для x в уравнении. Тогда единственная дробь, которую вы можете получить от деления на 2, будет .5 .
x=7
и используя деление на 2
.data
x db 7
z db ?
.code
main proc
mov ax, data
mov ds, ax
mov al, x
add al, 3
cbw
mov bl, 2
div bl ; -> AL == 5
mov z, al
add al, '0'
mov dl, al ; -> DL == "5"
mov ah, 02h ; DOS.PrintChar
int 21h
x=6
и замена деления на 2 сдвигом вправо
.data
x db 6
.code
main proc
...
mov al, x
add al, 3
shr al, 1
mov dx, '00'
jnc Divisible
mov dh, '5'
Divisible:
add dl, al ; -> DL == "4"
mov ah, 02h ; DOS.PrintChar
int 21h
mov dl, '.' ; Decimal point
int 21h
mov dl, dh ; -> DL == "5"
int 21h
Здесь сдвиг вправо приведет к переносу, потому что (x+3)
- нечетное число. Поэтому в результате будет отображаться .5 , иначе будет отображаться .0 .
Вы можете запустить приведенный выше пример с x в диапазоне от 0 до 16. Результаты будут варьироваться от 1,5 до 9,5.