我決定創建一個函式,將 EAX 暫存器中的字串列印到控制臺,首先顯示一條訊息,然后顯示一些東西
代碼(NASM):
newLine equ 0xa
section .data
msg db "Hello world!", newLine, 0
section .text
global _start
_start:
mov eax, msg
call printf
call exit
printf:
push eax
push ebx
push ecx
push edx
mov ecx, eax
call lenFind
mov edx, eax
mov eax, 4
mov ebx, 1
int 0x80
pop edx
pop ecx
pop ebx
pop eax
ret
lenFind:
push edx
mov edx, 0
.find:
cmp [eax edx], byte 0
je .close
inc edx
jmp .find
.close:
pop edx
ret
exit:
mov eax, 1
mov ebx, 0
int 80h
輸出:
Hello world!
.shstrtab.text.data
?J?
我知道它可能是什么,但最有可能的問題是我使用的是 32 位暫存器
uj5u.com熱心網友回復:
您的lenFind不回傳任何結果!
長度是在EDX暫存器中計算的,但您已經從堆疊中恢復了它。然而,呼叫程式似乎期望長度在EAX暫存器中:
lenFind:
push edx
mov edx, 0
.find:
cmp [eax edx], byte 0
je .close
inc edx
jmp .find
.close:
MOV EAX, EDX <<< Add this line
pop edx
ret
轉載請註明出處,本文鏈接:https://www.uj5u.com/shujuku/446319.html
下一篇:使用“批處理”命令運行批處理檔案
