Как вы печатаете смайлик в сборке? - PullRequest
3 голосов
/ 21 декабря 2009

Я написал программу на ассемблере и скомпилировал ее. Он предназначен для печати синего смайлика, а затем подождите, пока пользователь нажмет клавишу, прежде чем он завершится. Он делает этот последний бит, но не печатает смайлик. Может кто-нибудь объяснить, что я сделал не так?

CSEG segment
org 100h
Begin:

mov ax,0B800h
mov es,ax
mov di,0

mov ah,31
mov al,1
mov es:[di],ax

mov ah,10h
int 16h

int 20h

CSEG ends
end Begin

Я скомпилировал его с MASM с 16-битным компоновщиком

Ответы [ 3 ]

1 голос
/ 21 декабря 2009

Вы можете ткнуть в буфер видео напрямую, только если вы работаете только в текстовом режиме. Я предполагаю, что вы используете какую-то Windows и фактически не загружаете DOS, так что вы, вероятно, находитесь в графическом режиме.

То, что вы можете сделать, это открыть окно консоли и затем Alt Введите , чтобы перейти в полноэкранный текстовый режим. Попробуйте запустить там свою программу.

0 голосов
/ 29 января 2011

Ваш код в порядке, вам просто нужно запустить полноэкранный режим, как предложил Грег Хьюгилл, или настроить командное окно на использование старого растрового шрифта (например, SYSTEM). Щелкните правой кнопкой мыши строку заголовка окна и откройте вкладку «Шрифт».

0 голосов
/ 21 декабря 2009

Прошло около года с тех пор, как я работал с MASM, и единственный домашний справочник, который у меня дома, - это MIPS, поэтому я, правда, немного ржавый, однако для печати на экране требуется системное прерывание (int 21h), но единственное системное прерывание, которое я вижу, это вызов завершения программы после прерывания клавиатуры.

...