Консультация № 137894
26.05.2008, 21:03
0.00 руб.
0 2 2
Есть текст программы объясните, строку начиная PUSH DS заканчивая JNZ @M2, зачем ложить в стек DS и присваивать ему адрес 40h если мы его не используем ?

@M1:IN AL,64h
AND AL,00000010b
JNZ @M1
MOV AL,0Adh
OUT 64h,AL

PUSH DS
MOV BX,40h
MOV DS,BX
MOV BL,[6Ch]
ADD BL,180

@M2:CMP BL,[6Ch]
JNZ @M2

@M3:IN AL,64h
AND AL,0000010b
JNZ @M3
MOV AL,0Aeh
OUT 64h,AL
POP DS

Обсуждение

давно
Посетитель
7438
7205
26.05.2008, 21:31
общий
это ответ
Здравствуйте, Unique!
Еще как используем...
<font color=blue>MOV BL,[6Ch]</font>
читает байт по адресу <b>DS:6Ch</b>
Об авторе:
"Если вы заметили, что вы на стороне большинства, —
это верный признак того, что пора меняться." Марк Твен
давно
Старший Модератор
31795
6196
27.05.2008, 14:02
общий
это ответ
Здравствуйте, Unique!

По адресу 0040:006С - хранится текущее число тактов таймера(двойное слово = 32 бита)
В данном случае считывается младшие 8-мь бит этого числа(<font color=blue>MOV BL,[6Ch]</font>),
увеличивается на 180,
и ожидается совпадения значений (<font color=blue>СМР BL,[6Ch]</font>).
Вы правы это временная задержка на 180 тактов таймера.
Удачи!

Об авторе:
Мне безразлично, что Вы думаете о обо мне, но я рад за Вас - Вы начали думать.

Форма ответа