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"
为什么会这样?
答案 0 :(得分:1)
问题在于:
mov dx,[ebp+8]
没关系,但是你将ebx
推到了上面几行,所以[ebp+8]
不再是第一个参数,而是返回的地址(在参数之后)。您看到的输出是程序的“ascii转换”。 ;)
试试[ebp+0ch]
。