напечатать строку в сборке - PullRequest
0 голосов
/ 19 февраля 2011
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 Ответ

1 голос
/ 19 февраля 2011

Проблема здесь:

mov dx,[ebp+8]

все будет в порядке, но вы нажали ebx на несколько строк выше, поэтому [ebp+8] уже не первый параметр, а адрес возврата (который следует за параметром).Вывод, который вы видите, является "переводом ascii" вашей программы.;)
Попробуйте с [ebp+0ch].

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...