在NASM中打印更大的数字

时间:2016-11-17 19:36:34

标签: c assembly nasm min

我刚刚开始学习装配,我遇到了一个小问题。我试图编写一个程序,它采用两个整数并打印较大的整数。我想使用来自C的printf和scanf来做这件事。不幸的是我写的总是返回第二个值,我一直在想为什么。这是代码:

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

有没有人可以帮助我?提前致谢

1 个答案:

答案 0 :(得分:2)

您已使用number1部分中的number2将您的号码(DWORDdd)定义为.data,但您引用了这些号码作为QWORDcmp

因此结果非常难以预测/取决于内存布局。