; Файл nasm
extern
printf
extern
scanf
section
.data
msg1:
db "Enter A: ", 0
msg2:
db "Enter B: ", 0
scanf_msg:
db "%d", 0
endl:
db 0xA, 0x0
number1:
dq 0
number2:
dq 0
result:
db "Result: %d", 0
section
.text
global
main
main:
push
rbp
;
Вывод приглашения к вводу
mov
rdi, msg1
mov
rsi, 0
mov
rax, 0
call
printf
;
Ввод числа
mov
rdi, scanf_msg
mov
rsi, number1
mov
rax,
0
call
scanf
;
Вывод приглашения к вводу
mov
rdi, msg2
mov
rsi, 0
mov
rax, 0
call
printf
;
Ввод числа
mov
rdi, scanf_msg
mov
rsi, number2
mov
rax, 0
call
scanf
;
Обработка
call
LabSi ; RAX modified
;
Вывод результата
mov
rdi, result
mov
rsi, rax
mov
rax,
0
call
printf
;
Вывод конца строки
mov
rdi, endl
mov
rsi, 0
mov
rax,
0
call
printf
; Выход из программы
pop
rbp
mov
rax, 0
ret
LabSi:
push
rbx
push
rdx
mov
rax, [number1]
cmp
rax, [number2]
jl
Si_SmallBig
je
Si_Equal
mov
rax, [number2]
mov
rbx, [number1]
add
rax, 2
cdq
; <edx:eax>
idiv
rbx
jmp
Si_Branch
Si_SmallBig:
mov
rax, [number2]
mov
rbx, 8
cdq
; <edx:eax>
idiv
rbx
add
rax, 4
jmp
Si_Branch
Si_Equal:
mov
rax, 2
Si_Branch:
pop
rdx
pop
rbx
ret
Ж. Выводы
Тот
факт, что результаты, выполненные на
TASM, достаточно совпадают
с результатами, выполненными на NASM,
свидетельствует о том, что программа
составлена корректно.