соответствующие номера дисководов. Простейший способ запуска компоновщика
представляет ввод команды LINK, что приводит к загрузке компоновщика с
диска в память. На экране появятся следующие запросы:
Object Modules [.OBJ]:
Run File [d:filename.ЕХЕ]:
List File [NUL.MAP]:
Libraries [.LIB]:
Курсор при этом расположится в конце первой строки, где необходимо
указать имя файла. Введите номер дисковода (если он не определен по
умолчанию) и имя файла. Не следует набирать тип файла OBJ - компоновщик
подразумевает это. Во втором запросе предполагается аналогичное имя файла
(но можно его заменить). Если необходимо, введите номер дисковода. Третий
запрос предполагает, что листинг компоновки программы не требуется.
Последний запрос имеет отношение к библиотечным средствам DOS.
Если вы хотите оставить значения по умолчанию, то в трех последних
запросах просто нажмите Return. Ниже приведен пример запросов и ответов, в
результате которых компоновщик должен создать файлы ЕХЕ и CON:
Object Modules [.OBJ]:B:ASMPROG [return]
Run File [d:filename.ЕХЕ]:В: [return]
List File [NUL.MAP]:CON [return]
Libraries [.LIB]: [return]
Ответ CON приводит к выводу карты компоновки на экран для проверки на
наличие сообщений об ошибках. Команду LINK можно сформировать также
следующим образом:
LINK B:ASMPROG,В:,CON
Описание остальных режимов компоновщика LINK можно найти в
руководстве no DOS.
Программа ЕХЕ2ВIN
-------------------
Программа EXE2BIN.COM в операционной системе DOS используется для
преобразования ЕХЕ-модулей в СОМ-модули, при этом полагается, что
программы подготовлены в соответствии с требованиями для СОМ-модулей. Для
запуска программы EXE2BIN вставьте дискету DOS в дисковод А, а дискету с
ЕХЕ-файлом - в дисковод В. Для винчестерского диска следует использовать
дисковод С. Введите следующую команду:
EXE2BIN B:filename,B:filename.COM
Первым операндом является имя ЕХЕ-файла, которое вводится без
указания типа. Второй операнд представляет собой имя СОМ-файла; здесь
можно изменить имя программы, но обязательно следует указывать тип СОМ.
После того как преобразование будет выполнено, можно удалить файлы OBJ и
ЕХЕ.
Ответы на некоторые вопросы
__________________________________________________________________________
1.1. а) 01001101; в) 00111111.
1.2. а) 0101; в) 10101.
1.3. а) 00100010; в) 00100000.
1.4. а) 11101101; в) 11000110.
1.5. а) 00111000; в) 10000000.
1.6. а) 51; в) 5D.
1.7. а) 23С8; в) 8000.
1.8. а) 13; в) 59; д) FFF.
1.9. а) Стек, данные и код; в) параграф.
1.l0. a) AX, BX, CX, DX, Dl, SI; в) AX и DX; д) флаги.
1.11.a) ROM (постоянная память выполняет процедуры начальной загрузки и
управляет операциями ввода-вывода.
б) RAM (оперативная память) представляет собой область, где находятся
программы и данные при выполнении.
2.1. а) В82946.
2.2. Е CS:101 54.
2.3. a) MOV AX, 3004
ADD AX,3000
RET
в) R и IP устанавливают IP в 0.
2.4. Произведение равно 0612Н.
2.6. Использовать команду N для указания имени программы (например, СОМ),
установить длину программы в регистре CX и с помощью команды W
записать программу.
3.1. TITLE и PAGE.
3.2. а), б) и в) корректны; г) неверно, так как начинается с цифры;
д) корректно только при ссылке на регистр AX.
3.4. a) END; в) ENDS.
3.6. RET является командой, которая обеспечивает возврат в операционную
систему; END является директивой, которая указывает ассемблеру, что в
тексте более нет команд для ассемблирования.
3.7. ASSUME CS:CDSEG,DS:DATSEG,SS:STKSEG.
3.8. PUSH DS
SUB AX, AX
PUSH AX
4.1. а) Ввести команду MASM и ответить на запросы: В:TEMPY В:, В: и В:
4.2. a) DEBUG B:TEMPY.EXE; б) B:TEMPY
4.3. а) Резервная копия исходного файла;
в) файл листинга ассемблирования с исходным и объектным кодом;
д) файл объектного кода;
ж) карта компоновки.
4.4. MOV AX,DATSEG
MOV DS,AX
4.5. MOV AL,30H
SHL AL,1
MOV BL,18H
MUL BL
4.6. Сегмент данных должен выглядеть следующим образом:
FLDA OB 28H
FLDB DB 14H
FLDC DW ?
5.1. а) 2; в) 10; д) 8.
5.2. CONAME DB 'RGB Electronics'
5.3. a) FLDA DD 73H
в) FLDC DW ?
д) FLDE DW 16, 19, 20, 27, 30
5.4. a) ASCII 3236; б) 1AH.
5.5. а) 26; в) ЗА732500.
5.6. a) MOV AX,320
в) ADD BX,40H
д) SHL FLDB,1 (или SAL)
6.1. 64 К.
6.3. Это использует старшую область COM-программы или при недостатке
памяти - старшие адреса оперативной памяти.
6.4. EXE2BIN SAMPLE,SAMPLE.COM.
7.1. +127 и -128. Операнд представляет собой однобайтовое значение от 00Н
до 7FH (от 0 до + 127) и от 80Н до 0FFH (от -128 до -1).
7.2. а) 62В; в) 5ЕА (преобразует С6 в двоичное дополнение).
7.3. Приводим одно из многих возможных решений:
MOV AX,00
MOV BX,01
MOV CX,12
MOV DX,00
В20:
ADD AX,BX ;Номер в AX
MOV BX,DX
MOV DX,AX
LOOP B20
7.4. а) CMP DX,CX в) JCXZ адрес д) CMP BX,AX
JA адрес или CMP CX,0 JLE или JNG
JZ адрес
7.5. a) OF (1); в) ZF (1); д) DF (1)
7.7. Первая (основная) процедура PROC должна иметь атрибут FAR, так как ее
вызов и выполнение происходят из операционной системы. Атрибут NEAR
указывает на то, что адрес процедуры находится внутри конкретной
программы (т.е. в пределах одного сегмента ассемблерного модуля).
7.9. Три (по одному на каждый вызов CALL).
7.10.а) 1001 1010; в) 1111 1011; д) 0001 1100.
7.12.а) 01011100 11011100; в) 11001101 11001000.
8.1. Строка = 18Н, столбец = 27Н.
8.3. MOV AX,0600H ;3апрос
MOV BH,07 ; функции
MOV CX,OCOOH ; очистки
MOV DX,164FH ; экрана
INT 10Н
8.4. а) Вызов базовой функции DOS:
MSSGE DB 'What Is the date (mm/dd/yy)?',07H,'$'
MOV AH,09 ;Запрос функции
MOV DX,MSSGE ;вывода сообщения
INT 21H
8.5. а) Вызов базовой функции DOS:
DATEPAR LABEL BYTE
MAXLEN DB 9 ;Длина области ввода
ACTLEN DB ?
DATEFLD DB 9 DUP(' ')
DB '$'
MOV AH,0AH ;Запрос функции
LEA DX,DATEPAR ; ввода
INT 21H
9.1. a) 1000 0001; в) 0111 1000.
9.2. a) MOV АН,00 ;Запрос функции установки режима
MOV AL,02 ; 80х25 BW
INT 10Н
в) MOV AН,060AН ;3апрос прокрутки на 10 строк
MOV BH,07 ;Нормальный видеоатрибут
MOV CX,0000 ;Полный экран
MOV DX,184FH
INT 10Н
9.3. а) 48; в) 47.
9.5. Использовать команду INT 10Н для ввода и проверить скэнкод.
10.1. Восемь цветов для фона и 16 цветов для текста.
10.2. а) 1011 0101; в) 1000 1100.
10.3. Низкое разрешение: четыре бита на пиксел дает 16 цветов.
Среднее разрешение: два бита на пиксел дает 4 цвета.
Высокое разрешение: один бит на пиксел дает 2 "цвета" (BW -
черно-белое изображение).
10.4. MOV AH,09 ;Функция вывода
MOV AL,04 ;Символ
MOV BH,00 ;Страница #0
MOV BL,01011010В ;Светло-зеленый на сиреневом
MOV CX,05 ;Повторение 5 раз
INT 10Н
10.6. Сначала установить графический режим, а затем, используя
INT 10Н (AH=0BH),
установить цвет фона.
10.7. Сначала установить графический режим.
MOV AH,0DH ;Прочитать точку
MOV CX,13 ;Столбец
MOV DX,12 ;Строка
INT 10Н
11.1. а) JCXZ lаbеl2
label1: MOV AX,[SI]
MOV [DI],AX
INC DI
INC DI
INC SI
INC SI
LOOP label1
label2: ...
11.2. Установить флаг направления DF для пересылки справа налево. Для
команды MOVSB начальная установка на адреса NAME1 + 9 и NAME2 + 9.
Для команды MOVSW начальная установка на адреса NAME1 + 8 и
NAME2 + 8. Подпрограмма по метке H10SCAS может использовать
MOV AX,'mb'
и с помощью команды SCASW выполнить сканирование.
11.3. a) CLD ;Пересылка слева направо
LEA SI,CONAME ;Инициализация
LEA DI,PRLINE ; для пересылки
MOV CX,20 ; 20 байт
REP MOVSB
в) CLD ;Пересылка слева направо
LEA SI,CONAME+2 ;Начать с 3-го
LODSW ;Загрузить два байта
д) CLD ;Пересылка слева направо
MOV CX,20 ;20 байт
LEA SI,CONAME ;Инициализация
LEA DI,PRLINE ;адресов
REPE CMPSB ;Сравнение
11.4. Одно из решений:
H10SCAS PROC NEAR
CLD ;Пересылка слева направо
MOV CX,10 ;10 байт
LEA DI,NAME1 ;Инициализация адреса
MOV AL,'e' ; и символа для поиска
Н20:
REPNE SCASB ;Сканирование
JNE H3Q ;Символ найден?
CMP BYTE PTR[DI],'r' ; Да - следующий
JNE Н20 ; байт равен r?
MOV AH, 03
Н30: RET
H10SCAS ENDP
11.5. PATTERN DB 0ЗН,04Н,05Н,0В4Н
DISPLAY DB 80 DUP(' '),'$'
CLD ;Пересылка слева направо
LEA SI,PATTERN ;Инициализация
LEA DI,DISPLAY ; адресов
MOV CX,20 ;20 байт
REP MOVSW ;Переслать образец
Затем можно использовать команду INT 21 Н для вывода на экран
значения из области DISPLAY.
12.1.a) MOV AX,DATAY
ADD AX,DATAX
MOV DATAY,AX
б) См. рис.12.2 (многословное сложение).
12.2.Команда STC устанавливает флаг CF.Сумма равна 0148Н плюс 0237Н плюс 1
12.3.a) MOV AX,DATAX
MUL DATAY
б) См. рис.12.4 для умножения двойного слова на слово.
12.5. a) MOV AX,DATAX
MOV BL,25
DIV BL
13.1. а) Команда ADD дает результат 6СН, а команда AAA - 0102Н.
в) Команда SUB дает результат 02Н, а команда AAS не имеет эффекта.
13.2. LEA SI,UNPAK ;Инициализация адреса
MOV CX,04 ; и счетчика циклов
В20:
OR [SI],ЗОН ;Включить тройку кода ASCII
INC SI ;Перейти к следующему байту