Перейти на: Главную | Индексную | Форумную страницу |
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 олов 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 (связь подпрограмм). Будьте особенно внимательны при работе со стеком.
Материалы находятся на сайте http://cracklab.narod.ru/asm/