在 NASM 中打印更大的数字
Printing bigger number in NASM
我刚开始学习汇编,遇到了一些小问题。我正在尝试编写一个程序,该程序接受两个整数并打印较大的一个。我想使用 C 中的 printf 和 scanf 来做到这一点。不幸的是,我写的总是 returns 第二个值,我一直想知道为什么。这是代码:
extern printf
extern scanf
global main
section .text
main:
push rbp
;input of the first number
mov rdi, fmt
mov rsi, number1
xor rax, rax
call scanf
;input of the second number
mov rdi, fmt
mov rsi, number2
xor rax, rax
call scanf
;comparing numbers
mov rdx, qword [number1]
cmp rdx, qword [number2]
jl _1isSmaller
jge _2isSmaller
_1isSmaller: ;1st number is smaller
mov rdi, fmt_out
mov rsi, qword [number1]
xor rax, rax
call printf
jmp _exit
_2isSmaller: ;2nd number is smaller
mov rdi, fmt_out
mov rsi, qword [number2]
xor rax, rax
call printf
jmp _exit
_exit:
pop rbp
mov rax, 0
mov rbx, 1
int 80h
section .data
fmt db "%d", 0
fmt_out db "Smaller number: %d", 10, 0
number1 dd 0
number2 dd 0
有没有人可以帮助我?提前致谢
您已在 .data
部分将您的号码(number1
和 number2
)定义为 DWORD
和 dd
,但是您用 cmp
将它们引用为 QWORD
s。
所以结果在内存布局上相当unpredictable/depending
我刚开始学习汇编,遇到了一些小问题。我正在尝试编写一个程序,该程序接受两个整数并打印较大的一个。我想使用 C 中的 printf 和 scanf 来做到这一点。不幸的是,我写的总是 returns 第二个值,我一直想知道为什么。这是代码:
extern printf
extern scanf
global main
section .text
main:
push rbp
;input of the first number
mov rdi, fmt
mov rsi, number1
xor rax, rax
call scanf
;input of the second number
mov rdi, fmt
mov rsi, number2
xor rax, rax
call scanf
;comparing numbers
mov rdx, qword [number1]
cmp rdx, qword [number2]
jl _1isSmaller
jge _2isSmaller
_1isSmaller: ;1st number is smaller
mov rdi, fmt_out
mov rsi, qword [number1]
xor rax, rax
call printf
jmp _exit
_2isSmaller: ;2nd number is smaller
mov rdi, fmt_out
mov rsi, qword [number2]
xor rax, rax
call printf
jmp _exit
_exit:
pop rbp
mov rax, 0
mov rbx, 1
int 80h
section .data
fmt db "%d", 0
fmt_out db "Smaller number: %d", 10, 0
number1 dd 0
number2 dd 0
有没有人可以帮助我?提前致谢
您已在 .data
部分将您的号码(number1
和 number2
)定义为 DWORD
和 dd
,但是您用 cmp
将它们引用为 QWORD
s。
所以结果在内存布局上相当unpredictable/depending