Выделение блока памяти, обработчик прерывания таймера - 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

Объяснение кода листинга программы

  1. Переменная AH содержит код функции, в данном случае 4Ah это функция вывода сообщения.
  2. Переменная BX содержит смещение в таблице дескрипторов прерываний, 16+14 это смещение функции обработки прерывания от таймера.
  3. Выполняется команда PUSH DS, которая выталкивает в стек указатель на сегмент данных.
  4. Выполняется команда POP ES, которая выталкивает из стека в сегментный регистр ES указатель на сегмент данных.
  5. Выполняется команда INT 21h, которая вызывает обработчик прерывания 21h, в данном случае это обработчик прерывания от таймера.

Оцени полезность:

11   голосов , оценка 3.727 из 5
Похожие ответы