基本装配计算器分配不起作用

Basic assembly calculator assignment not working

我们需要对使用系统调用输入的单个数字进行加减乘除运算。出于某种原因,我的添加是唯一有效的方法。我不明白为什么其余的不起作用。它们都没有输出,除了乘以 1 时有效的乘法。

我的减法代码:

segment .data
    one db 0
    two db 0
    diff db 0

segment .text
global _start

_start:
    mov rax, 0
    mov rdi, 0
    lea rsi, [one]
    mov rdx, 2
    syscall
    mov rbx, [one]
    sub rbx, 48
    mov rax, 0
    mov rdi, 0
    lea rsi, [two]
    mov rdx, 2
    syscall
    sub rbx, [two]
    mov [diff], rbx
    ;xor rbx, rbx
    mov rax, 1
    mov rdi, 1
    mov rdx, 1
    lea rsi, [diff]
    syscall
    mov rax, 60
    xor rdi, rdi
    syscall

我的乘法代码:

segment .data
one db 0
two db 0
multi db 0

segment .text
global _start

_start:
mov eax, 0
mov edi, 0
lea esi, [one]
mov edx, 2
syscall
;mov ebx, [one]
;sub ebx, '0'
mov eax, 0
mov edi, 0
lea rsi, [two]
mov edx, 2
syscall
mov eax, [one]
sub eax, '0'
;mov ecx, [two]
;sub ecx, '0'
mul dword [two]
mov [multi], eax 
xor edx, edx
mov eax, 1
mov edi, 1
mov edx, 1
lea esi, [multi]
syscall
mov eax, 60
xor edi, edi
syscall

和部门代码:

segment .data
one db 0
two db 0
qout db 0

segment .text
global _start

_start:
mov rax, 0
mov rdi, 0
lea rsi, [one]
mov rdx, 2
syscall
;mov rbx, [one]
;sub rbx, '0'
mov rax, 0
mov rdi, 0
lea rsi, [two]
mov edx, 2
syscall
mov eax, [one]
sub eax, '0'
mov edx, 0
mov ecx, two
;sub ecx, '0'
div ecx
mov [qout], [rax]
;xor rdx, rdx
mov rax, 1
mov rdi, 1
mov rdx, 1
lea rsi, [qout]
syscall
mov rax, 60
xor rdi, rdi
syscall

谁能告诉我为什么这不起作用。

这是我加的供参考:

segment .data
one db 0
two db 0
sum db 0

segment .text
global _start

_start:
mov eax, 0 ;read
mov edi, 0 ;file descriptor
lea esi, [one] ;write to one
mov edx, 2 ;size of input in bytes
syscall
mov ebx, [one]
sub ebx, '0' ;'convert' to int
mov eax, 0 ;again another input
mov edi, 0
lea rsi, [two]
mov edx, 2
syscall
add ebx, [two] ;add two to one
mov [sum], ebx ;move sum into [sum]
xor ebx, ebx ;clear the register
mov eax, 1 ;syscall write
mov edi, 1 ;file descriptor
mov edx, 1 ;output one byte
lea esi, [sum] ;output sum
syscall
mov eax, 60 ;syscall 60 is exit
xor edi, edi ;exit(0)
syscall

我找到了解决办法。在我的代码中,我从两个数字中减去“0”,并且在操作之后我只是添加了“0”again.For除法我做了建议的解决方案。