Как распечатать из регистров в сборке? - PullRequest
0 голосов
/ 26 сентября 2018

Сначала я должен заявить, что я совершенно НОВЫЙ для ASM.

У меня есть пример перемещения символа в AL и печати его на экране:

mov al, 041h
int 10h                 
mov al, 042h
int 10h
mov al, 043h
int 10h
ret

Это печатает ABC вscreen.

Как сделать что-то похожее, переместив эти 3 символа в другой регистр?Такие как DL.

Ответы [ 2 ]

0 голосов
/ 27 сентября 2018

Это выводит ABC на экран.

Код, который вы показали, может сделать это, только если мы предположим, что AH=0Eh, идентификационный номер для функции BIOS Teletype.

Как мне сделать что-то похожее с перемещением этих 3 символов в другой регистр?Например, DL.

Вы можете!

Помимо BIOS API (int 10h) есть также DOS API (int 21h).
Если вы установитесимволы - по одному за раз - в регистре DL функция вывода символов DOS 02h также будет печатать их на экране, и с дополнительным преимуществом, что вам не нужно беспокоиться о номере DisplayPageв BH или CharacterColor в BL.

mov ah, 02h      ;DOS Character Output
mov dl, 41h
int 21h                 
mov dl, 42h
int 21h
mov dl, 43h
int 21h

Ответ Питера Кордеса, очевидно, остается правильным.

"Вы не можете свободно выбирать, какие регистры вы используете для запроса какой-либо функции API."

Примечание о шестнадцатеричных числах.

В такой инструкции, как mov al, 041h, префикс шестнадцатеричного числа с 0 является избыточным и - по крайней мере для меня - несколько снижает читабельность.
Вы должны только ставить нулевой префикс шестнадцатеричного числаиначе бы это начиналось с буквы, поэтому те, которые начинаются с 'A' ... 'F'.

0 голосов
/ 26 сентября 2018

Как я могу сделать что-то похожее с перемещением этих 3 символов в другой регистр?Например, DL.

Вы не можете.

int 10h функции имеют фиксированное соглашение о вызовах.Вы передаете им аргументы в регистрах, где они их хотят.Итак, mov al,dl.

https://en.wikipedia.org/wiki/INT_10H. Сначала необходимо установить код функции в AH, например mov ah, 0Eh / int 10h для функции «телетайпный выход».(В текстовом режиме он смотрит только на AL. В документации также упоминается номер страницы и цвет в BX, но вы не используете это.)

...