Системное программное обеспечение. Особенности программирования 32-разрядных процессоров. Рощин А.В. - 51 стр.

UptoLike

Составители: 

51
Листинг 2.1 – Подпрограмма, устанавливающая режим линейной
адресации данных
; Порт, управляющий запретом немаскируемых прерываний
CMOS_ADDR equ 0070h
CMOS_DATA equ 0071h
; Селекторы сегментов
SYS_PROT_CS equ 0008h
SYS_REAL_SEG equ 0010h
SYS_MONDO_SEG equ 0018h
CODESEG
;**********************************************
;* ВКЛЮЧЕНИЕ РЕЖИМА ЛИНЕЙНОЙ АДРЕСАЦИИ ПАМЯТИ *
;* (процедура параметров не имеет) *
;**********************************************
PROC Initialization NEAR
pushad
; Сохранить значения сегментных регистров в
; реальном режиме (кроме GS)
mov [CS:Save_SP],SP
mov AX,SS
mov [CS:Save_SS],AX
mov AX,DS
mov [CS:Save_DS],AX
; (работаем теперь только с кодовым сегментом)
mov AX,CS
mov [word ptr CS:Self_Mod_CS],AX
mov DS,AX
cli
mov SS,AX
mov SP,offset Local_Stk_Top
sti
; Установить режим линейной адресации
call SetLAddrModeForGS
; Восстановить значения сегментных регистров
cli
mov SP,[CS:Save_SP]
mov AX,[CS:Save_SS]
mov SS,AX
mov AX,[CS:Save_DS]
mov DS,AX
sti
; Разрешить работу линии A20
call Enable_A20
popad
ret
Листинг 2.1 – Подпрограмма, устанавливающая режим линейной
                    адресации данных
; Порт, управляющий запретом немаскируемых прерываний
CMOS_ADDR      equ 0070h
CMOS_DATA      equ 0071h
; Селекторы сегментов
SYS_PROT_CS    equ 0008h
SYS_REAL_SEG   equ 0010h
SYS_MONDO_SEG equ 0018h

CODESEG
;**********************************************
;* ВКЛЮЧЕНИЕ РЕЖИМА ЛИНЕЙНОЙ АДРЕСАЦИИ ПАМЯТИ *
;*       (процедура параметров не имеет)      *
;**********************************************
PROC Initialization NEAR
        pushad
; Сохранить значения сегментных регистров в
; реальном режиме (кроме GS)
        mov     [CS:Save_SP],SP
        mov     AX,SS
        mov     [CS:Save_SS],AX
        mov     AX,DS
        mov     [CS:Save_DS],AX
; (работаем теперь только с кодовым сегментом)
        mov     AX,CS
        mov     [word ptr CS:Self_Mod_CS],AX
        mov     DS,AX
        cli
        mov     SS,AX
        mov     SP,offset Local_Stk_Top
        sti

; Установить режим линейной адресации
        call    SetLAddrModeForGS

; Восстановить значения сегментных регистров
        cli
        mov     SP,[CS:Save_SP]
        mov     AX,[CS:Save_SS]
        mov     SS,AX
        mov     AX,[CS:Save_DS]
        mov     DS,AX
        sti

; Разрешить работу линии A20
        call    Enable_A20
        popad
        ret


                               51