Выделение блока памяти, обработчик прерывания таймера - Assembler
Формулировка задачи:
всем привет! вобщем выкопал я из траншеи программу вывода времени, увы написанную не мной..
в инициализации обработчика присутствует следующий фрагмент кода..
для чего требуется данный фрагмент кода? если не трудно, то прошу тыкнуть меня носом в нужном направлении..
RGB EQU 1Fh VAD EQU 0B800h ROW EQU 1 COL EQU 76 SEP EQU 3Ah TIME SEGMENT ORG 100h ASSUME CS:TIME, DS:TIME .186 START: JMP INIT NewInt1C PROC PUSHA CLD MOV AX,VAD MOV ES,AX MOV DI,(ROW-1)*160+(COL-1)*2 MOV AL,4 OUT 70h,AL IN AL,71h MOV CH,AL MOV AH,RGB MOV CL,4 SHR AL,CL OR AL,30h STOSW MOV AL,CH AND AL,0Fh OR AL,30h STOSW MOV AL,SEP STOSW MOV AL,2 OUT 70h,AL IN AL,71h MOV CH,AL SHR AL,CL OR AL,30h STOSW MOV AL,CH AND AL,0Fh OR AL,30h STOSW POPA DB 0EAh Int1COfs DW ? Int1CSeg DW ? NewInt1C ENDP INIT: CLI MOV AX,351Ch INT 21h MOV Int1COfs,BX MOV Int1CSeg,ES MOV AH,9 MOV DX,OFFSET copyright INT 21h MOV AH,4Ah MOV BX,16+14 PUSH DS POP ES INT 21h MOV AH,48h MOV BX,4 INT 21h MOV ES,AX DEC AX MOV SI,OFFSET NewInt1C XOR DI,DI MOV CX,INIT-(OFFSET NewInt1C) CLD REP MOVSB MOV ES,AX MOV WORD PTR ES:[1],0FFFFh XOR DX,DX INC AX MOV DS,AX MOV AX,251Ch INT 21h STI MOV AX,4C00h INT 21h copyright db 13,10,'Time! 3.9 - Coded By Sam In 1994 -' db 'The Flamoots Production - 64 Bytes In Memory!$' TIME ENDS END START
DEC AX ... MOV ES,AX MOV WORD PTR ES:[1],0FFFFh ... INC AX
Решение задачи: «Выделение блока памяти, обработчик прерывания таймера»
textual
Листинг программы
MOV AH,4Ah MOV BX,16+14 PUSH DS POP ES INT 21h
Объяснение кода листинга программы
- Переменная
AH
содержит код функции, в данном случае 4Ah это функция вывода сообщения. - Переменная
BX
содержит смещение в таблице дескрипторов прерываний, 16+14 это смещение функции обработки прерывания от таймера. - Выполняется команда
PUSH DS
, которая выталкивает в стек указатель на сегмент данных. - Выполняется команда
POP ES
, которая выталкивает из стека в сегментный регистр ES указатель на сегмент данных. - Выполняется команда
INT 21h
, которая вызывает обработчик прерывания 21h, в данном случае это обработчик прерывания от таймера.