【发布时间】:2018-10-03 20:13:16
【问题描述】:
谁能帮我写一个程序来计算汇编中 3 个数字的平均值(NASM 64 位)?
我尝试了什么:
section .data
num1 db 3
num2 db 4
num3 db 5
divisor db 3
digit db 0, 10
section .text
global _start
_start:
mov rax, num1
mov rax, num2
div rax, num3
mov rbx, divisor
div rbx
mov rax, 60
mov rdi, 0
syscall
_printRAX:
add rax, 48
mov [digit], al
mov rax, 1
mov rdi, 1
mov rsi, digit
mov rdx, 2
syscall
ret
【问题讨论】:
-
问:操作系统是什么?问:你对那个操作系统做了什么“系统调用”?问:您的具体问题/遇到了什么问题?
-
我很困惑,你认为在汇编中找到平均值看起来像什么?好像你把一堆东西移到了 rax 中。
-
mov rax, num1将rax设置为num1的地址,采用NASM 语法。mov rax, [num1]将是一个设置rax = 0x????0a0003050403的 64 位负载(x86 是小端,db只有 1 个字节宽)。除此之外,您还没有设置 RDX。对于div,它需要归零。在静态链接的二进制文件中,Linux 会在_start之前将其归零,但在其他任何地方,此代码都可能因 SIGFPE 而因#DE 除法异常而崩溃。 -
不管怎样,你要么想
movzx eax, byte [num1]等到不同的寄存器中为add设置,要么你想add al, [num2]等等为后面的数字。 -
@paulsm4 操作系统是 Linux 64bit (mint)。