We have the following task: write a program that sets the default values of x and y (in the program these are 3 and 5 respectively), then it compares these numbers and replaces the lesser of them with the half-sum of x and y, and replaces the greater of them with twice the multiplication of x and y.
section .data
x dw 3
y dw 5
section .text
global _start
_start:
; Сравним значения x и y
mov ax, [x]
cmp ax, [y]
; Если x <= y, переходим к метке less_than
jle less_than
; Если x > y, переходим к метке greater_than
jmp greater_than
less_than:
; Найдем полусумму x и y и заменим меньшее значение на нее
mov bx, [x]
add bx, [y]
shr bx, 1
mov [x], bx
; Умножим большее значение на 2
mov bx, [y]
shl bx, 1
mov [y], bx
; Выведем значения x и y
mov ah, 02h ; функция вывода символа на экран
mov dl, byte [x] ; выводим x
add dl, '0' ; преобразуем в символ
int 21h ; вызов BIOS
mov ah, 02h ; функция вывода символа на экран
mov dl, byte [y] ; выводим y
add dl, '0' ; преобразуем в символ
int 21h ; вызов BIOS
; Завершаем программу
mov ah, 4Ch
xor al, al
int 21h
greater_than:
; Найдем полусумму x и y и заменим меньшее значение на нее
mov bx, [x]
add bx, [y]
shr bx, 1
mov [y], bx
; Умножим большее значение на 2
mov bx, [x]
shl bx, 1
mov [x], bx
; Выведем значения x и y
mov ah, 02h ; функция вывода символа на экран
mov dl, byte [x] ; выводим x
add dl, '0' ; преобразуем в символ
int 21h ; вызов BIOS
mov ah, 02h ; функция вывода символа на экран
mov dl, byte [y] ; выводим y
add dl, '0' ; преобразуем в символ
int 21h ; вызов BIOS
; Завершаем программу
mov ah, 4Ch
xor al, al
int 21h
When I compile my program, I get just "Pp" when I should get 4 and 30 respectively.