Добавить в избранноеСделать домашней
 

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

 

 

Ответы на некоторые вопросы





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 ;Перейти к следующему байту
LOOP B20 ;Циклить 4 раза

13.3. В качестве примера см.рис.13.2, отличие - CX = 03.

13.4. В качестве примера см.рис.13.3, отличие - CX = 03.

13.5. а) Преобразование числа в ASCII-коде в двоичное представление:

Десятичные Шестнадцатиричные

8х1 = 8 8
2 х 10 = 20 14
3 х 100 = 300 12С
6 х 1000 = 6000 1770
4 х 10000 = 40000 9С40
----
B4F8
14.1. WKDAYS DB 'Sunday...'
DB 'Monday... '
DB 'Tuesday..'

14.2. DAYNO DB ?
DAYNAM DB 9 DUP(?)
NINE DB 9
LEA SI,WKDAYS ;Загрузить адрес таблицы
SUB АН,АН ;Очистить АН
MOV AL,DAYNO ;Загрузить день недели
DEC AL ;-1
MUL NINE ;Получить смещение
ADD SI,AX ;Плюс адрес таблицы
MOV CX,09 ;Девять символов
LEA DI,DAYNAM ;Адрес пересылки
REP MOVSB ;Переслать 9 символов

14.3. a) ITEMNO DB '06','10','14','21','24'
в) ITPRICE DW 9395,8225,9067,8580,1385

14.4. Возможная организация представлена в следующих процедурах:

Основной цикл Вызов процедур

В1OREAD Выдает на текст запроса и вводит номер элемента.
C10SRCH Выполняет поиск в таблице и выдает сообщение об ошибке.
D10MOVE Выделяет описание и цену из таблицы.
E10CONV Преобразует количество из кода ASCII в двоичное представление.
F10CALC Вычисляет стоимость (количество х цена).
G10CONV Преобр. стоимость из двоичн. представления в симв. (код ASCII).
K10DISP Выводит описание и стоимость на экран.

14.5. SORTAB DB 5 DUP(9 DUP(?))
LEA SI,ITDESC ;Инициализация
LEA 01,SORTAB ; адреса таблицы
MOV CX,45 ; и числа символов
CLD ;Направление слева направо
REP MOVSB ;Переслать таблицу

Приведенная подпрограмма пересылает таблицу. Для сортировки таблицы
см. рис.14.6.

15.1. 512.

15.3. В каталоге первый байт имени файла должен быть установлен в Е5.

15.5. Первый байт таблицы FAT содержит F8.

15.6. а) Позиции 28...31 в каталоге;
б) шестнадцатиричное число В4А записывается как 4А0В.

16.1. Все функции включают INT 21 Н: а) 16Н; в) 15Н; д) 14Н.

16.2. а) 4; б) 108 (9 секторов х 3 дорожки х 4 записи на дорожке);
в) одно обращение на сектор, т.е. всего 27.

16.3.Используйте рис.16.1 в качестве примера для создания файла и рис.13.6
для преобразования чисел из ASCII-кода в двоичное представление.

16.4. Используйте рис.16.2 в качестве примера для чтения файла и рис.13.6
для преобразования чисел из двоичного представления в ASCII-код.

16.5.а) Блок 0, запись 44; в) блок 1, запись 21.

16.6.Десятичное число 2652 равно шестнадцатиричному 0А5С, что записывается
как 5С0А0000.

16.7. Функции включают INT 21Н: а) 22Н; в) 28Н.

16.8. Поле FCBFLSZ содержит размер файла в байтах (произведение числа
записей на длину записи), поле FCBRCSZ содержит длину записей.
Разделите FCBFLSZ (четыре байта в регистровой паре DX:AX) на FCBRCSZ
(два байта).
16.9. См. рис.16.4 в качестве примера для чтения блока.

16.10. В гл.13 показано, как преобразовать числа в ASCII-коде в двоичное
представление.

16.11. Можно использовать рис.16.3 в качестве примера для прямого чтения и
рис.13.6 для преобразования чисел из ASCII-кода в двоичное
представление.

17.1. 01 и 06.

17.3.а) MOV AH,3CH ;Ф-ция создания файла
MOV CX,00 ;Нормальный атрибут
LEA DX,PATH1 ;ASCIIZ-строка
INT 21H ;Вызвать DOS
JC error ;Переход по ошибке
MOV CUSTHAN,AX ;Сохр. файловый номер

17.4.а) MOV AH,ЗОН ;Ф-ция открытия файла
MOV AL,OO ;Только чтение
LEA DX,PATH1 ;ASCIIZ-строка
INT 21H ;Вызвать OOS
JC error ;Переход по ошибке
MOV CUSTHAN.AX ;Сохр. файловый номер

17.5. При открытии большого числа файлов.

18.1. Используйте INT 13H и AH = 00.

18.2. Используйте INT 13H и AH = 01.

18.4. MOV АН,03 ;Функция записи
MOV AL,03 ;3 сектора
LEA BX,OUTDSK ;0бласть вывода
MOV CH,08 ;Дорожка 08
MOV CL,01 ;Сектор 01
MOV ОН,00 ;Сторона 0
MOV DL,01 ;Дисковод В
INT 13H

18.5. Байт состояния в регистре АН содержит 00000011.

19.2. а) MOV AH,05 ;Функция печати
MOV DL,0CH ;Перевод страницы
INT 21H
б) LEA SI,NAMEFLD ;Инициализ. имени
MOV CX,length ; и длины
В20:
MOV AH,05 ;Функция печати
MOV DL,[SI] ;Символ из имени
INT 21H ;Вызвать DOS
INC SI ;Следующий символ в имени
LOOP В20 ;Циклить length раз

в) Можно закодировать символ перевод строки (0А) в начале адреса.
Решение аналогично б),
д) Вывести еще символ перевода страницы (0С).

19.3. HEADNG DB 13, 10, 15, 'Title', 12

19.5. Нельзя использовать регистр CX для пятикратного цикла, так как
внутренний цикл печати имени уже использует этот регистр.Для регистра
BX цикл будет следующим:

MOV BX,05
С20:
DEC BX
JNZ С20

20.1. a) .SAIL.

20.2. a) MULTBY MACRO MULTPR,MULTCD
MOV AL,MULTCD
MUL MULTPR
ENDM

20.3. Для включения библиотеки макрокоманд только в первом проходе
необходимо кодировать:

IF1
INCLUDE library-name
ENDIF

20.4. Макроопределение должно начинаться следующим образом:

BIPRINT MACRO PRTLINE,PRLEN

PRTLINE и PRLEN являются фиктивными аргументами для адреса и
длины строки, которая предназначена для печати. Для печати с помощью
BIOS INT 17H см. гл.19.

20.5.Проверку IF нельзя использовать для тестирования на нулевой делитель.
Проверка IF работает только в процессе ассемблирования, в то время
как тестирование на нулевой делитель должно происходить при
выполнении программы. Используйте, например, следующие команды:

CMP DIVISOR,00 ;Нулевой делитель?
JNZ (обойти) ;Нет - обойти
CALL (подпрограмма вывода сообщения об ошибке)

21.1. a) EXTRN SUBPRO:FAR

21.2. a) PUBLIC QTY,VALUE.PRICE

21.3. Для примера используйте рис.21.5.

21.4. В качестве примера передачи параметров используйте рис.21.5. Отличие
состоит в том, что в данном случае используется запись в Стек трех
переменных. Поэтому вызываемая программа для доступа к третьему
элементу (PRICE) в стеке использует [BP+10]. Можно определить
собственный стандарт для возврата элемента PRICE через стек. Обратите
внимание также на операнд в команде возврата RET.

21.5. Данная программа включает материал из cледующих глав: 8 (ввод-вывод
на экран), 13 (преобразование между ASCII- и двоичным
представлением), 12 (двоичное умножение) и 21 (связь подпрограмм).
Будьте особенно внимательны при работе со стеком.

Оглавление

 

 
Web site engine code is Copyright © 2003 by LRCh.
All Rights Reserved.
Hosted by uCoz