在程序集中打印字符串

时间:2011-02-19 08:07:32

标签: assembly x86

section .text
org 100h
push selected
call output
mov ah,4Ch
int 21h

output:
push ebp
mov ebp, esp
sub esp, 4
push ebx
mov ah,0x9
mov dx,[ebp+8]
int 21h
pop ebx
mov esp, ebp
pop ebp
ret
section .data
selected DB "I selected a random number between 0 and 99",0xd,0xa,'$'

我必须通过堆栈传递参数。

预期输出为:

"I selected a random number between 0 and 99" 

,但实际输出是:

"
═  Я ЪЁ■↔Ё▐☺▲♦K☺▲♦V☺▲♦▲♦☺☺☺ ☻               #♣╓ p♣¶ ↑ p♣        ♣
                                                 h(☺ш♦ ┤L═!fUfЙхfГь♦fS┤      gЛU
═!f[fЙьf]├   I selected a random number between 0 and 99"

为什么会这样?

1 个答案:

答案 0 :(得分:1)

问题在于:

mov dx,[ebp+8]

没关系,但是你将ebx推到了上面几行,所以[ebp+8]不再是第一个参数,而是返回的地址(在参数之后)。您看到的输出是程序的“ascii转换”。 ;)
试试[ebp+0ch]