[英]Strange Characters when printing a string in x86 assembly language?
我的代碼需要有一個將打印到控制台的字符串,以及一個字符串長度計數程序,該程序將對其進行計數,而不是手動將字符串長度放入 edx 寄存器中。 但是我在打印字符串后立即打印了奇怪的字符。
global _start
section .text
_start:
mov edi, message
call _strlen
mov edx, eax
mov eax, 4
mov ebx, 1
mov ecx, message
int 80h
mov eax, 1
mov ebx, 5
int 80h
section .data
message: db "My name is Stanley Hudson", 0Ah
_strlen:
push ebx
push ecx
mov ebx, edi
xor al, al
mov ecx, 0xffffffff
repne scasb ; REPeat while Not Equal [edi] != al
sub edi, ebx ; length = offset of (edi – ebx)
mov eax, edi
pop ebx
pop ecx
ret
strlen
搜索終止字符串的 0 字節,但您的字符串沒有一個字節,因此它會一直運行,直到它確實找到一個零字節並返回一個太大的值。
你想寫
message: db "My name is Stanley Hudson", 0Ah, 0
; ^^^
另一個錯誤是您的_strlen
函數顯然位於.data
部分,因為您沒有在字符串之后返回section .text
。 x86-32 沒有NX 位,所以.data
部分是可執行的,一切仍然有效,但這肯定不是你想要的。
要擺脫特殊字符,請在啟動過程之前編寫 strlen 函數並為換行符創建一個新寄存器
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.