前面已經說過,你必須將這個數字字符串轉換爲字符串,然後輸出:
section .text
global _start
_start:
mov eax, 20
mov ebx, 30
add eax, ebx
mov edi, buffer
mov ecx, 10
call _NumToStr
xor eax, eax
stosb ; null terminator
mov eax, 4
mov ebx, 1
mov ecx, buffer
int 80h
mov eax, 1
mov ebx, 0
int 80h
buffer rb 64 ; I am not sure how this is in NASM simply reserve 64 bytes as buffer.
; eax - number
; ecx - radix
; edi - buffer
_NumToStr:
test eax,eax
jns _NumToStrU
neg eax
mov byte [edi],"-"
inc edi
_NumToStrU
cmp eax,ecx
jb .lessA
xor edx,edx
div ecx
push edx
call _NumToStrU
pop eax
.lessA:
cmp al, 10
sbb al, 69h
das
stosb
ret
系統調用4寫入字符串,而不是整數。您必須先將結果轉換爲字符串,或者使用libc中的'printf'函數。 – Michael
@Michael我試圖堅持嚴格的彙編代碼。所以我不想使用printf。任何其他方式? – itsme
是的,將整數轉換爲一個字符串,方法是反覆除以10,並將餘數+'0'以倒退的順序保存在緩衝區中。然後打印該字符串。 – Michael