2015-08-25 23 views
0

我們需要對使用系統調用輸入的單個數字進行加法,減法,乘法和除法。出於某種原因,我的補充是唯一可行的。我找不出爲什麼其他人不工作。所有這些輸出什麼都沒有,除了乘法如果按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 
+1

發佈您的加法代碼也可能有幫助。 –

+1

如果您希望其他人提供幫助,請注意您的代碼,並學習使用調試器,以便逐步完成代碼並修復自己的錯誤。從乍一看,這至少與[這個問題]一樣的問題(http://stackoverflow.com/questions/32139441/linux-intel-64bit-assembly-division/32140194)。 – Jester

+0

我會嘗試在那裏的解決方案,我現在添加了我的補充意見 –

回答

0

我找到了解決辦法。在我的代碼中,我從兩個數中減去了'0',並且在操作之後我再次加了'0'。對於分區,我做了this question建議的解決方案。