Linux英特尔64位组装部门

我正在努力理解为什么我的部门不工作,下面是我目前的代码,它只需要两个单一的数字,并试图分裂他们:

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位的值。 每当我input8/2或类似的东西,我收到价值1作为商。 我在这里错过了什么? 任何帮助将不胜感激。

Solutions Collecting From Web of "Linux英特尔64位组装部门"

你阅读2个字节的操作数,但似乎你忽略了第二,当你不应该。
假设你输入8和2,每个输入一行,你将会看到“8 \ n”和“2 \ n”。 然后你减去'0',但是离开'\ n',所以你的操作数将是0x08 0x0A0x02 0x0A ,它们是2568和2562.而2568/2562 = 1。