Dos7book
.pdf
|
Глава 9: |
Примеры композиции исполняемых файлов |
|||
xchg |
AH,AL |
|
;=384 |
Вход для индикации AH-AL |
|
add |
AL,30 |
|
; 386 |
Переведем 0 - 9 в ASCII |
|
cmp |
AL,39 |
|
; 388 |
Ýòî 0 - 9 èëè A - F ? |
|
jbe |
038E |
|
;*38A |
Знаки 0 - 9 оставим как есть |
|
add |
AL,07 |
|
; 38C |
A - F переведем в ASCII |
|
cmp |
BL,80 |
|
;=38E |
Проверим границы |
|
jb |
0395 |
|
;*391 |
Если за пределами границ, |
|
mov |
AL,20 |
|
;=393 |
заменим знаки пробелами |
|
push |
AX |
|
;=395 |
Сохраним значения |
|
push |
DX |
|
; 396 |
регистров AX и DX |
|
mov |
AH,02 |
|
; 397 |
Вызовем функцию |
|
mov |
DL,AL |
|
; 399 |
вывода одного |
|
int |
21 |
|
; 39B |
знака в STDOUT |
|
pop |
DX |
|
; 39D |
Восстановим значения |
|
pop |
AX |
|
; 39E |
регистров AX и DX |
|
ret |
|
|
; 39F |
Возврат из подпрограммы |
|
|
;********* Секция 22: замена обработчиков исключений |
||||
|
; 3A0 - адрес вызова со строк 24A, 24D, 28D, 290 |
||||
mov |
AH,35 |
|
;=3A0 |
вызов функции считывания |
|
int |
21 |
|
; 3A2 |
адреса обработчика в ES:BX |
|
mov |
DI,AX |
|
; 3A4 |
В DI подготовим адрес |
|
shl |
DI,1 |
|
; 3A6 |
ячейки памяти: DI = AX•2 |
|
shl |
DI,1 |
|
; 3A8 |
350D•4=D434 |
350E•4=D438 |
sub |
DI,D06E |
|
;*3AA |
D434-D06E=3C6 D438-D06E=3CA |
|
push |
DS |
|
; 3AE |
Сохраним содержимое |
|
push |
DX |
|
; 3AF |
регистров DS и DX |
|
lds |
DX,[DI] |
|
; 3B0 |
DS:DX - указатель на ячейку |
|
mov |
AH,25 |
|
; 3B2 |
Вызов функции записи |
|
int |
21 |
|
; 3B4 |
адреса обработчика |
|
pop |
DX |
|
; 3B6 |
Восстановим содержимое |
|
pop |
DS |
|
; 3B7 |
регистров DS и DX |
|
mov |
[DI],BX |
|
; 3B8 |
Сохраним в памяти адрес |
|
mov |
[DI+02],ES |
; 3BA |
прежнего обработчика |
||
inc |
AL |
|
; 3BD |
В AL - следующий номер |
|
ret |
|
|
; 3BF |
Возврат из подпрограммы |
;******** Секция 23: адреса и данные
;3C0 - адрес Himem, в строках 1B4, 1BE, 2B6
;3C2 - сегмент Himem, в строках 1B8, 1C8, 2A4
db |
|
00 |
00 00 00 |
|
|
|
|
; |
3C4 |
- третий байт |
EFLAG, |
в строках 22D, 29C |
|
db |
|
00 |
|
|
|
|
|
; |
3C5 |
- маска порта |
21h, â |
строках 238, 293 |
|
db |
|
00 |
|
|
|
;3C6 - адрес этой ячейки вычислен в строке 3AA
–569 –
Глава 9: Примеры композиции исполняемых файлов
|
; 3C8 |
- сегмент обработчика 0Dh, вписан из 23F |
|
db |
CC 02 |
00 00 |
|
|
; 3CA - адрес этой ячейки вычислен в строке 3AA |
||
|
; 3CC - сегмент обработчика 0Eh, вписан из 243 |
||
db |
C9 02 |
00 00 |
|
|
; 3CE - место хранения SI, доступ из 251, 258 |
||
db |
00 00 |
|
;3D0 - линейный адрес - 1EA, 213, 310, 328, 35A
;3D3 - старший байт линейного адреса - 351
db |
00 |
00 |
00 |
00 |
|
|
|
; 3D4 - место адреса сообщения - 134, 21A, 282 |
|||||
db |
71 |
04 |
|
|
|
|
|
;******** |
Секция 24: сообщения |
||||
|
; 3D6 |
1-е сообщение, от строки 129 |
||||
db |
0D |
0A |
'Error: 16-bit machine can' 27 |
|||
db |
't suit' 0D 0A 24 |
|
||||
|
; 3FB |
|
2-е сообщение, от строки 145 |
|||
db |
0D |
0A |
'Error: can' 27 't run under WINDOWS' |
|||
db |
0D |
0A |
24 |
|
|
|
|
; 41E |
3-е сообщение, от строки 15D |
||||
db |
0D |
0A |
'Error: incompatible EMM386 version' |
|||
|
; 442 |
4-е виртуальное сообщение, от строки 2BA |
||||
db |
0D |
0A |
24 |
|
|
|
|
; 445 |
5-е сообщение, от строк 1D8, 1F4 |
||||
db |
09 |
'Line A20 is disabled' 24 |
||||
|
; 45B |
6-е сообщение, от строки 1FA |
||||
db |
'GS=' |
20 |
24 |
|
||
|
; 460 |
7-е сообщение, от строки 223 |
||||
db |
09 |
'- |
below GS base' 24 |
|||
|
; 471 |
8-е сообщение, адрес в строке 3D4 |
||||
db |
09 |
'- |
above GS limit' 24 |
|||
|
; 483 |
9-е сообщение, от строки 134 |
||||
db |
09 |
' GS range or privilege violation' 24 |
||||
|
; 4A5 |
10-е сообщение, от строки 2C9 |
||||
db |
09 |
'Page isn' 27 't initialized or is' |
||||
db |
20 |
'swapped' 24 |
|
|||
|
; 4CB |
|
11-е сообщение, от строки 18E |
|||
db |
0D |
0A |
'Address error: invalid character(s)' 0A |
|||
|
; 4F1 |
12-е сообщение (help), от строки 182 |
||||
db |
0D |
0A |
09 |
'GS_dump.com - linear GS address' |
||
db |
20 |
'dump utility' 0D 0A 'Usage examples:' |
||||
db |
0D |
0A |
09 |
09 'GS_dump |
002FABCD' 0D 0A 09 09 |
|
db |
'GS_dump |
002FABCD |
A' 0D 0A 09 09 |
|||
db |
'GS_dump |
002FABCD |
R' 0D 0A 20 |
|||
|
|
|
|
|
– 570 – |