我正在寫這個小程序,輸入除數和除數,程序將輸出商和餘數。這裏是代碼:ASCII到十進制,反之亦然,對於NASM中的多個字符
segment .data
prompt db "Please enter a number: ", 10
promptLen equ $-prompt
prompt2 db "Please enter the divisor: ", 10
prompt2Len equ $-prompt2
prompt3 db "Your quotient is: ",10
prompt3Len equ $-prompt3
prompt4 db "Your remainder is: ",10
prompt4Len equ $-prompt4
segment .bss
inputNum resb 2
inputDiv resb 2
quotient resb 2
remainder resb 2
segment .text
global _start
_start:
mov eax, 4
mov ebx, 1
mov ecx, prompt
mov edx, promptLen
int 80h
mov eax, 3
mov ebx, 0
mov ecx, inputNum
mov edx, 2
int 80h
mov eax, 4
mov ebx, 1
mov ecx, prompt2
mov edx, prompt2Len
int 80h
mov eax, 3
mov ebx, 0
mov ecx, inputDiv
mov edx, 2
int 80h
xor edx, edx
mov ax, [inputNum]
mov bx, [inputDiv]
and ax, 0xff
and bx, 0xff
sub ax, '0'
sub bx, '0'
div bx
add ax, '0'
add dx, '0'
mov [quotient], ax
mov [remainder], dx
mov eax, 4
mov ebx, 1
mov ecx, prompt3
mov edx, prompt3Len
int 80h
mov eax, 4
mov ebx, 1
mov ecx, quotient
mov edx, 2
int 80h
mov eax, 4
mov ebx, 1
mov ecx, prompt4
mov edx, prompt4Len
int 80h
mov eax, 4
mov ebx, 1
mov ecx, remainder
mov edx, 2
int 80h
jmp exit
exit:
mov eax, 1
xor ebx, ebx
int 80h
代碼是現在的方式,我只能處理一個字符的數字;通過減去'0'並重新加上輸出。 任何人都可以請幫助我使用更有效的方式做這種轉換,這樣我就不會被限制爲只有一個字符的數字?
你關心效率,或正確性? – 2014-10-20 16:04:29
如果你不能使用libc,你必須編寫你自己的轉換例程。大量的例子。你可以[每個數字乘以10循環](http://stackoverflow.com/questions/26337518/how-can-i-make-10000-1000-100-from-10-the-easiest-way/26339409 )用於文本到二進制,並在二進制到文本的循環中除以10。 – Jester 2014-10-20 16:04:40
如果你要評論你的代碼的每一行,這將有很大的幫助。 – 2014-10-20 16:18:12