Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Абель.docx
Скачиваний:
13
Добавлен:
26.11.2018
Размер:
569.84 Кб
Скачать

0004 B8 ---- r mov ax,dseg

0007 8E D8 MOV DS,AX

Ассемблер оставляет незаполненным машинный адрес сегмента DSEG,

который становится элементом таблицы настройки в заголовке. С помощью

отладчика DEBUG можно просмотреть завершенную команду в следующем виде:

B8 A313

Значение A313 загружается в регистр DS в виде 13A3. В результате имеем

Регистр Адрес Смещение

CS 139F0 00

DS 13A30 40

SS 13A50 60

В качестве упражнения выполните трассировку любой вашей скомпонованной

программы под управлением отладчика DEBUG и обратите внимание на

изменяющиеся значения в регистрах:

Команда Изменяющиеся регистры

PUSH DS IP и SP

SUB AX,AX IP и AX (если был не нуль)

PUSH AX IP и SP

MOV AX,DSEG IP и AX

MOV DS,AX IP и DS

Регистр DS содержит теперь правильный адрес сегмента данных. Можно

использовать теперь команду D DS:00 для просмотра содержимого сегмента

данных DSEG и команду D SS:00 для просмотра содержимого стека.

ФУНКЦИИ ЗАГРУЗКИ И ВЫПОЛНЕНИЯ ПРОГРАММЫ

________________________________________________________________

Рассмотрим теперь, как можно загрузить и выполнить программу из

другой программы. Функция шест.4B дает возможность одной программе

загрузить другую программу в память и при необходимости выполнить. Для

этой функции необходимо загрузить адрес ASCIIZ-строки в регистр DX, а

адрес блока параметров в регистр BX (в действительности в регистровую пару

ES:BX). В регистре AL устанавливается номер функции 0 или 3:

AL=0. З а г р у з к а и в ы п о л н е н и е. Данная операция

устанавливает префикс программного сегмента для новой программы, а также

адрес подпрограммы реакции на Cntrl/Break и адрес передачи управления на

следующую команду после завершения новой программы. Так как все регистры,

включая SP, изменяют свои значения, то данная операция не для новичков.

Блок параметров, адресуемый по ES:BX, имеет следующий формат:

Смещение Назначение

0 Двухбайтовый сегментный адрес строки параметров для передачи.

2 Четырехбайтовый указатель на командную строку в PSP+80H.

6 Четырехбайтовый указатель на блок FCB в PSP+5CH.

10 Четырехбайтовый указатель на блок FCB в PSP+6CH.

AL=3. О в е р л е й н а я з а г р у з к а. Данная операция загружает

программу или блок кодов, но не создает PSP и не начинает выполнение.

Таким образом можно создавать оверлейные программы. Блок параметров

адресуется по регистровой паре ES:BX и имеет следующий формат:

Смещение Назначение

0 Двухбайтовый адрес сегмента для загрузки файла.

2 Двухбайтовый фактор настройки загрузочного модуля.

Возможные коды ошибок, возвращаемые в регистре AX: 01, 02, 05, 08, 10

и 11. Программа на рис.22.2 запрашивает DOS выполнить команду DIR для

дисковода D. Выполните эту программу, как EXE-модуль. (Автор благодарен

журналу PC Magazine за эту идею).

__________________________________________________________________________

TITLE EXDOS (EXE) Функция DOS 4BH для выполнения DIR

CSEG GMENT PARA 'Code'

ASSUME CS:CSEG,DS:CSEG,ES:CSEG

BEGIN: JMP SHORT MAIN

;----------------------------------------------------------

PARAREA DW ? ;Адрес строки вызова

DW OFFSET DIRCOM ;Указатель

; на командную строку

DW CSEG

DW OFFSET FCB1 ;Указатель на FCB2

DW CSEG

DIRCOM DB 17,'/C DIR D:',13,0

FCB1 DB 16 DUP(0)

FCB2 DB 16 DUP(0)

PROGNAM DB 'D:COMMAND.COM',0

; ---------------------------------------------------------

MAIN PROC FAR

MOV AH,4AH ;Получить 64K памяти

MOV BH,100H ; в параграфах

INT 21H

JC E10ERR ;Нет памяти?

MOV DI,2CH ;Получить сегментный адрес

MOV AX,[DI] ; строки вызова

LEA SI,PARAREA ; и записать его в

MOV [SI],AX ; 1 слово блока параметров

MOV AX,CS ;Загрузить в DS и ES

MOV DS,AX ; адрес CSEG

MOV ES,AX

MOV AH,4BH ;Функция загрузки

MOV AL,00 ; и выполнения

LEA BX,PARAREA ; COMMAND.COM

LEA DX,PROGNAM