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

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

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

include "lst_2_03.inc"

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

include "lst_2_05.inc"

SEGMENT sseg para stack 'STACK'

DB 400h DUP(?)

ENDS

DATASEG

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

Txt1 DB LIGHTMAGENTA,0,28,"Дамп оперативной памяти",0

DB YELLOW,2,0,"Адрес:",0

DB LIGHTGREEN,2,11

DB "Шестнадцатеричное представление:",0

DB LIGHTCYAN,2,61,"ASCII-коды:",0

DB LIGHTRED,21,0,"Введите число "

DB "или нажмите управляющую клавишу:",0

Txt2 DB 23,0, "Стрелка вниз - следующие 256 байт;",0

DB 23,35, "Стрелка вверх - предыдущие 256 байт;",0

DB 24,0, "Enter - завершение ввода адреса;",0

DB 24,33, "Esc - отмена ввода адреса;",0

DB 24,60, "F10 - выход.",0

; Количество введенных символов числа

CharacterCounter DB 0

; Позиция для ввода адреса на экране

OutAddress DB 21,47

; Строка для ввода адреса

AddressString DB 9 DUP(0)

; Строка пробелов для "затирания" числа

SpaceString DB 21,47,9 DUP(' '),0

; Начальный адрес

StartAddress DD 0

; Код команды

CommandByte DB 0

ENDS

CODESEG

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

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

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

PROC MemoryDump

Mov AX,DGROUP

Mov DS,AX

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

Call Initialization

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

Mov AX,3

Int 10h

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

mov [ScreenString],25

mov [ScreenColumn],0

Call SetCursorPosition

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

Mov CX,5

Mov SI,offset Txt1

@@NextString1:

Call ShowColorString

loop @@NextString1

mov [TextColorAndBackground],WHITE

Mov CX,5

Mov SI,offset Txt2

@@NextString2:

Call ShowString

loop @@NextString2

; Установить белый цвет символов и черный фон

mov [TextColorAndBackground],WHITE

; Отобразить символы-разделители колонок

Mov AL,0B3h

mov [ScreenString],2

mov [ScreenColumn],9

Call ShowASCIIChar

mov [ScreenColumn],59

Call ShowASCIIChar

mov [ScreenString],3

mov [ScreenColumn],9

Call ShowASCIIChar

mov [ScreenColumn],59

Call ShowASCIIChar

; Инициализируем переменные

mov [StartAddress],0

mov [CommandByte],0

; ВНЕШНИЙ ЦИКЛ

@@q0: mov EBX,[StartAddress]

mov [ScreenString],4

Mov DX,16

@@q1: mov [ScreenColumn],0

; Отобразить линейный адрес первого байта в группе

mov [TextColorAndBackground],YELLOW

Mov EAX,EBX

Call ShowHexDWord

; Отобразить символ-разделитель колонок

mov [TextColorAndBackground],WHITE

inc [ScreenColumn]

Mov AL,0B3h

Call ShowASCIIChar

inc [ScreenColumn]

; Отобразить очередную группу байт

; в шестнадцатеричном коде

Mov CX,16

mov [TextColorAndBackground],LIGHTGREEN

@@q2: mov AL,[GS:EBX]

Call ShowByteHexCode

inc [ScreenColumn]


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



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