Ассемблер и программирование для IBM PC


       

ГЛАВА 23. Прерывания BIOS и DOS - часть 56


MOVE_CURSOR PROC FAR ASSUME CS:CODESEG

Ассемблер для IBM PC. Программы. 163

ROWWPAR EQU 8 ;Параметр "строка" COLPAR EQU 6 ;Параметр "столбец"

PUSH BP ;Сохранить регистр BP MOV BP,SP ;Установить BP на параметры

MOV SI,[BP+ROWPAR] ;SI указывает на строку MOV DH,[SI] ;Поместить столбец в DL

MOV AH,02 ;Функция установки курсора SUB BH,BH ;Страница #0 INT 10H

POP BP ;Вернуться RET 4 ; в вызывающую программу MOVE_CURSOR ENDP CODESEG ENDS END

Адрес начала Программа

00000 Таблица векторов прерываний (см. гл. 23)

00400 Область связи с постоянной памятью (ROM)

00500 Область связи с операционной системой (DOS)

00600 IBMBIO.COM Буфер каталога Дисковый буфер Блок параметров дисковода/таблица распределения файлов (FAT, одна для каждого дисковода)

XXXX0 Резидентная часть командного процессора COMMAND.COM

XXXX0 Область памяти для программ (типа COM или EXE)

XXXX0 Пользовательский стек для COM-программ (256 байтов)

XXXX0 Транзитная часть командного процессора COMMAND.COM (записывается в старшие адреса памяти).

TITLE EXDOS (EXE) Функция DOS 4BH для выполнения DIR CSEG GMENT PARA 'Code' ASSUME CS:CSEG,DS:CSEG,ES:CSEG BEGIN: JMP SHORT MAIN ;---------------------------------------------------------- PARAREA DW ? ;Адрес строки вызова

Ассемблер для IBM PC. Программы. 164

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 INT 21H ;Вызвать DOS JC E20ERR ;Ошибка выполнения? MOV AL,00 ;Нет кода ошибки JMP X10XIT 0ERR: MOV AL,01 ;Код ошибки 1 JMP X10XIT 0ERR: MOV AL,02 ;Код ошибки 2 JMP X10XIT 0XIT: MOV AH,4CH ;Функция завершения INT 21H ;Вызвать DOS IN ENDP EG ENDS END




Содержание  Назад  Вперед