Аппаратное обеспечение IBM PC


         

mov ah, 9h mov dx,


mov ax,0 call cs:[HMMEntry]
; Выводим номер версии на экран
call Print_word
mov ah, 9h mov dx, OFFSET ver2 int 21h
mov ax, bx call Print_word
; Запрашиваем область HMA
mov ah, 9h mov dx, OFFSET hmareq int 21h
mov ax,0100h mov dx,0ffffh
call cs:[HMMEntry] or ax, ax jnz hmareq_ok jmp error
hmareq_ok: mov ah, 9h mov dx, OFFSET okmsg int 21h
; Открываем линию A20
mov ah, 9h mov dx, OFFSET enA20 int 21h
mov ax,0300h
call cs:[HMMEntry] or ax, ax jnz enA20_ok jmp error
enA20_ok: mov ah, 9h mov dx, OFFSET okmsg int 21h
; Закрываем линию A20
mov ah, 9h mov dx, OFFSET dsA20 int 21h
mov ax,0400h
call cs:[HMMEntry] or ax, ax jnz dsA20_ok jmp error
dsA20_ok:
mov ah, 9h mov dx, OFFSET okmsg int 21h
; Освобождаем область HMA
mov ah, 9h mov dx, OFFSET hmarel int 21h
mov ax,0200h
call cs:[HMMEntry] or ax, ax jz error
mov ah, 9h mov dx, OFFSET okmsg int 21h
; Получаем локальный доступ к линии A20
mov ah, 9h mov dx, OFFSET loc_enA20 int 21h
mov ax,0500h
call cs:[HMMEntry] or ax, ax jz error
mov ah, 9h mov dx, OFFSET okmsg int 21h
; Проверяем линию A20
mov ah, 9h mov dx, OFFSET check_A20 int 21h
mov ax,0700h
call cs:[HMMEntry] or ax, ax jz error
mov ah, 9h mov dx, OFFSET okmsg int 21h
; Определяем размер свободной расширенной памяти
mov ah, 9h mov dx, OFFSET free_ext_mem int 21h
mov ax,0800h
call cs:[HMMEntry]
push ax mov ax, dx call Print_word
mov ah, 9h mov dx, OFFSET max_ext_block int 21h
pop ax call Print_word
; Освобождаем линию A20
mov ah, 9h mov dx, OFFSET loc_dsA20 int 21h
mov ax,0600h
call cs:[HMMEntry] or ax, ax jz error
mov ah, 9h mov dx, OFFSET okmsg int 21h
jmp terminate
error: push bx
mov ah, 9h mov dx, OFFSET errmsg int 21h
pop ax call Print_word
terminate:
.EXIT 0
; Вывод на экран содержимого регистра AX
Print_word proc near ;-------------------- push ax push bx push dx ; push ax mov cl,8 rol ax,cl call Byte_to_hex mov bx,dx @@out_ch bh @@out_ch bl ; pop ax call Byte_to_hex mov bx,dx @@out_ch bh @@out_ch bl ; pop dx pop bx pop ax ret Print_word endp ; Byte_to_hex proc near ;-------------------- ; al - input byte ; dx - output hex ;-------------------- push ds push cx push bx ; lea bx,tabl mov dx,cs mov ds,dx ; push ax and al,0fh xlat mov dl,al ; pop ax mov cl,4 shr al,cl xlat mov dh,al ; pop bx pop cx pop ds ret ; tabl db '0123456789ABCDEF' Byte_to_hex endp ;

Содержание  Назад  Вперед