что эти строки делают в ассемблере?

Я совсем новичок в сборке. Я всегда путаюсь в цифрах Может кто-нибудь, пожалуйста, помогите мне? Я использую TASM... так что 8066 ассемблер Есть ли хороший справочник, который я могу использовать?

SCREEN_CLEARER:
mov ax,1720h
mov cx,2000
mov bx,0
L2:
mov es:[bx],ax
add bx,2
loop L2
ret

Я не совсем понимаю, что такое 1720h, 2000. Я также не совсем уверен, как читать move es:[bx],ax

Спасибо большое


person CppLearner    schedule 10.04.2011    source источник


Ответы (1)


Похоже на DOS-код, пытающийся заполнить (текстовый) экранный буфер или около того..., IIRC ax будет символом (0x20 == ' ' == пробел) в сочетании с текстовыми атрибутами (0x17 == цвет переднего плана/фона) .

2000 будет 80x25 ;)

es для этой цели будет указывать на экранный буфер.

L2:
mov es:[bx],ax
add bx,2
loop L2

перемещает символ и атрибут (в ax) в каждое слово из es:[0] на 2000 слов (== 2 байта) до тех пор, пока cx не станет 0 (это значение кода операции loop).

person 0xC0000022L    schedule 10.04.2011
comment
Да, в самом деле. код взят отсюда. daniweb.com/software-development/assembly/threads/117744. так что 2-я строка печатает пробел? а есть цвет фона? Благодарю. - person CppLearner; 10.04.2011
comment
о, дисплей 80x25. это правда. что такое 1720h тогда? - person CppLearner; 10.04.2011
comment
@JohnWong: я написал это, это один байт для символа (' ' == 0x20) и один для атрибута (0x17, вероятно, светло-серый на черном или около того, но, честно говоря, я не помню значения, и они будут зависеть от BIOS/система). - person 0xC0000022L; 10.04.2011