簡體   English   中英

用 x86 匯編語言打印字符串時出現奇怪的字符?

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM