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 (связь подпрограмм).
Будьте особенно внимательны при работе со стеком.
__________________________________________________________________________
Редактиpовал Еpшов В.Г. Дата последней редакции: 02/04/99