Model medium

; Подключить файл мнемонических обозначений

; кодов управляющих клавиш

include "lst_2_03.inc"

; Подключить файл мнемонических обозначений цветов

include "lst_2_05.inc"

SEGMENT sseg para stack 'STACK'

DB 400h DUP(?)

ENDS

DATASEG

; Текстовые сообщения

Text1 DB 0,19,"Включение режима "

DB "линейной адресации данных",0

DB 11,0,"Для просмотра "

DB "содержимого регистров процессора",0

DB 12,0,"перед запуском процедуры "

DB "перехода в режим",0

DB 13,0,"линейной адресации нажмите "

DB "любую клавишу.",0

Text2 DB 11,0,"Произведено переключение в "

DB "режим линейной адресации.",0

DB 12,0,"Для просмотра содержимого "

DB "регистров процессора",0

DB 13,0,"нажмите любую клавишу.",0

Text3 DB 11,0,"После завершения данной "

DB "программы регистр GS",0

DB 12,0,"может использовать для "

DB "линейной адресации",0

DB 13,0,"любая другая программа.",0

DB 24,18,"Для выхода из программы "

DB "нажмите любую клавишу.",0

ENDS

CODESEG

;*****************************

;* Основной модуль программы *

;*****************************

PROC LAddrTest

Mov AX,DGROUP

Mov DS,AX

; Установить текстовый режим и очистить экран

Mov AX,3

Int 10h

; Скрыть курсор - убрать за нижнюю границу экрана

mov [ScreenString],25

mov [ScreenColumn],0

Call SetCursorPosition

; Вывести первое текстовое сообщение

; на экран зеленым цветом

mov [TextColorAndBackground],LIGHTGREEN

Mov CX,4

Mov SI,offset Text1

@@NextString1:

Call ShowString

loop @@NextString1

; Ожидать нажатия любой клавиши

Call GetChar

; Занести контрольное число в дополнительные

; сегментные регистры данных

Mov AX,0ABCDh

Mov ES,AX

Mov FS,AX

Mov GS,AX

; Показать содержимое регистров процессора

Call far ShowRegs

; Установить режим прямой адресации памяти

Call Initialization

; Вывести второе текстовое сообщение

; на экран голубым цветом

mov [TextColorAndBackground],LIGHTCYAN

Mov CX,3

Mov SI,offset Text2

@@NextString2:

Call ShowString

loop @@NextString2

; Ожидать нажатия любой клавиши

Call GetChar

; Показать содержимое регистров процессора

Call far ShowRegs

; Вывести третье текстовое сообщение

; на экран желтым цветом

mov [TextColorAndBackground],YELLOW

Mov CX,4

Mov SI,offset Text3

@@NextString3:

Call ShowString

loop @@NextString3

; Ожидать нажатия любой клавиши

Call GetChar

; Установить текстовый режим

Mov ax,3

Int 10h

; Выход в DOS

Mov AH,4Ch

Int 21h

ENDP LAddrTest

ENDS

; Подключить набор процедур вывода/вывода данных

include "lst_2_02.inc"

; Подключить подпрограмму, переводящую сегментный

; регистр GS в режим линейной адресации

include "lst_3_01.inc"

; Подключить подпрограмму, отображающую на экране

; содержимое регистров процессора

include "lst_3_02.inc"

END

Листинг 2.4 [1] демонстрирует использование линейной адресации для отображения содержимого памяти компьютера на экране, то есть выдачи дампа памяти. Про­грамма MemoryDump позволяет просматривать все адресное пространство, а не только оперативную память. Можно, например, считывать память видеоконтрол­лера или вообще неиспользуемые области.

Кроме процедур ввода/вывода общего назначения, в MemoryDump используются также следующие подпрограммы:

- процедура ShowASCIIChar осуществляет вывод символа в ASCII-коде в задан­ную позицию экрана;

- процедура HexToBin32 осуществляет перевод числа (введенного с клавиату­ры адреса) из шестнадцатеричного кода в двоичный;

- процедура GetAddressOrCommand принимает команды, вводимые с клавиату­ры (введенное число воспринимается как линейный адрес памяти в шестнадцатеричном коде, нажатие на управляющие клавиши — как команда).

Листинг 2.4 – Использование линейной адресации для отображения на экран содержимого оперативной памяти

IDEAL

P386

LOCALS


Понравилась статья? Добавь ее в закладку (CTRL+D) и не забудь поделиться с друзьями:  



double arrow
Сейчас читают про: