c - 在 NASM 中打印更大的数字

标签 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

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

最佳答案

您已将数字(number1number2)定义为 DWORD,在 中使用 dd >.data 部分,但您将它们作为 QWORDcmp 引用。

所以结果是相当不可预测的/取决于内存布局。

关于c - 在 NASM 中打印更大的数字,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40663584/

相关文章:

c - 在 C 中通过 void 指针传递字符串时出现段错误

linux - ebx 寄存器在 NASM 中不起作用,但 ecx 可以工作

GDB:打印二进制值会省略前导零吗?

c - 用指针计算后缀表达式?

C:太大的堆栈会导致段错误吗?

android - 对 Callstack 库的 undefined reference 出现问题

汇编:在 ADC 循环中增加 2(或更大的数字)而不破坏 CF?

assembly - 使用arm neon进行RGB到灰度转换

winapi - 哪些参数被传递到 PE(可移植可执行文件)文件的入口点?

c - NASM 程序集 while 循环计数器