gpt4 book ai didi

Linux Intel 64bit 汇编事业部

转载 作者:太空宇宙 更新时间:2023-11-04 09:30:27 24 4
gpt4 key购买 nike

我正在努力理解为什么我的除法不起作用,下面是我当前的代码,它只接受两个个位数并尝试将它们相除:

STDIN equ 0
SYS_READ equ 0

STDOUT equ 1
SYS_WRITE equ 1

segment .data
num1 dq 0
num2 dq 0
quot dq 0
rem dq 0

segment .text
global _start
_start:
mov rax, SYS_READ
mov rdi, STDIN
mov rsi, num1
mov rdx, 2
syscall

mov rax, SYS_READ
mov rdi, STDIN
mov rsi, num2
mov rdx, 2
syscall

mov rax, [num1]
sub rax, '0'

mov rbx, [num2]
sub rbx, '0'

xor rdx, rdx
div rbx

add rax, '0'

mov [quot], rax
mov [rem], rdx

mov rax, SYS_WRITE
mov rdi, STDOUT
mov rsi, quot
mov rdx, 1
syscall

mov rax, 60
xor rdi, rdi
syscall

据我所知,除法时汇编程序会将 RDX:RAX 除以操作数 RBX。我只能假设这是问题所在,我将 128 位值除以 64 位值这一事实。每当我输入 8/2 或类似的东西时,我都会收到值 1 作为商。我在这里错过了什么?任何帮助将不胜感激。

最佳答案

您为操作数读取了 2 个字节,但似乎您忽略了第二个字节,而您不应该这样做。
假设您分别键入 8 和 2 一行,您将读取“8\n”和“2\n”。然后减去 '0',但保留 '\n',因此您的操作数将是 0x08 0x0A0x02 0x0A,分别是 2568 和 2562。而 2568/2562 = 1。

关于Linux Intel 64bit 汇编事业部,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32139441/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com