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



       

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


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

CALL P10PRNT ; да - печатать JMP G20 G60: CMP AL,09H ;Символ табуляции? JNE G70 DEC BX ; да - установить BX: MOV BYTE PTR [DI+BX],20H ;Заменит TAB на пробел AND BX,0FFF8H ;Обнулить правые 8 бит ADD BX,08 ; и прибавить 8 G70: MOV COUNT,BX JMP G30 G80: MOV BX,COUNT ;Конец файла MOV BYTE PTR [DI+BX],0CH ;Прогон страницы CALL P10PRNT ;Печатать последнюю строку G90: RET G10XFER ENDP ; Подпрограммы печати: ; ------------------- P10PRNT PROC NEAR MOV AH,40H ;Функция печати MOV BX,04 MOV CX,COUNT ;Длина INC CX LEA DX,DISAREA INT 21H MOV AX,2020H ;Очистить область вывода MOV CX,60 LEA DI,DISAREA REP STOSW RET P10PRNT ENDP ; Подпрограмма чтения сектора: ; --------------------------- R10READ PROC NEAR MOV AH,3FH ;Функция чтения MOV BX,HANDLE ;Номер файла MOV CX,512 ;Длина MOV DX,SECTOR ;Буфер INT 21H MOV ENDCDE,AX RET R10READ ENDP ; Прокрутка экрана: ; ---------------- Q10SCR PROC NEAR MOV AX,0600H MOV BH,1EH ;Установить цвет MOV CX,0000 ;Прокрутка (сскроллинг) MOV DX,184FH INT 10H RET Q10SCR ENDP

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

; Подпрограмма установки курсора: ; ------------------------------ Q20CURS PROC NEAR MOV AH,02 ;Функция установки MOV BH,00 ; курсора MOV DX,00 INT 10H RET Q20CURS ENDP ; Вывод сообщения об ошибке: ; ------------------------- X10ERR PROC NEAR MOV AH,40H ;Функция вывода на экран MOV BX,01 ;Номер MOV CX,18 ;Длина LEA DX,OPENMSG ;Адрес сообщения INT 1H MOV NDCDE,01 ;Признак ошибки RET X10ERR ENDP CODESG ENDS END BEGIN

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

TITLE MACRO1 (EXE) Макрос для инициализации ; -------------------------------------------- INIT1 MACRO ASSUME CS:CSEG,DS:DSEG,SS:STACK,ES:DSEG PUSH DS SUB AX,AX PUSH AX MOV AX,DSEG MOV DS,AX MOV ES,AX ENDM ;Конец макрокоманды ; -------------------------------------------- 0000 STACK SEGMENT PARA STACK 'Stack' 0000 20 [ ???? ] DW 32 DUP(?) 0040 STACK ENDS ; -------------------------------------------- 0000 DSEG SEGMENT PARA 'Data' 0000 54 65 73 74 20 6F MESSGE DB 'Test of macro-instruction', 13 66 20 6D 61 63 72 6F 2D 69 6E 73 74 72 65 73 74 69 6F 6E 0D 001A DSEG ENDS ; -------------------------------------------- 0000 CSEG SEGMENT PARA 'Code' 0000 BEGIN PROC FAR INIT1 ;Макрокоманда 0000 1E + PUSH DS 0001 2B C0 + SUB AX,AX 0003 50 + PUSH AX 0004 B8 ---- R + MOV AX,DSEG 0007 8E D8 + MOV DS,AX 0009 8E C0 + MOV ES,AX 000B B4 40 MOV AH,40H ;Вывод на экран 000D BB 0001 MOV BX,01 ;Номер 0010 B9 001A MOV CX,26 ;Длина 0013 8D 16 0000 R LEA DX,MESSGE ;Сообщение 0017 CD 21 INT 21H 0019 CB RET 001A BEGIN ENDP 001A CSEG ENDS END BEGIN




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