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



         

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


page 60,132 TITLE EXRING (COM) Вывод имен, выровненных справа CODESG SEGMENT PARA 'Code' ASSUME CS:CODESG,DS:CODESG,SS:CODESG,ES:CODESG ORG 100H BEGIN: JMP SHORT MAIN ;-------------------------------------------------------- NAMEPAR LABEL BYTE ;Имя списка параметров MAXNLEN DB 31 ;Макс. длина ACTNLEN DB ? ;Число введенных символов NAMEFLD DB 31 DUP(' ') ;Имя

PROMPT DB 'Name?', '$' NAMEDSP DB 31 DUP(' '), 13, 10, '$' ROW DB 00 ;-------------------------------------------------------- MAIN PROC NEAR ;Основная процедура MOV AX,0600H CALL Q10SCR ;Очистить экран SUB DX,DX ;Установить курсор в 00,00 CALL Q20CURS A10LOOP: CALL B10INPT ;Ввести имя с клавиатуры TEST ACTNLEN,0FFH ;Нет имени? (т.е. конец) JZ A90 ; да - выйти CALL D10SCAS ;Найти звездочку CMP AL,'*' ;Найдена? JE A10LOOP ; да - обойти CALL E10RGHT ;Выровнять имя справа CALL A10LOOP A90: RET MAIN ENDP ; Вывод запроса для ввода имени: ; ----------------------------- B10INPT PROC MOV AH,09 LEA DX,PROMPT ;Выдать текст запроса INT 21H RET B10INPT ENDP ; Поиск звездочки в имени: ; ----------------------- D10SCAS PROC CLD MOV AL,'*' MOV CX,30 ;Длина сканирования - 30 LEA DI,NAMEFLD REPNE SCASB ;Звездочка найдена? JE D20 ; да - выйти, MOV AL,20H ; нет стереть * в AL D20: RET D10SCAS ENDP

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

; Выравнивание справа и вывод на экран: ; ------------------------------------ E10RGHT PROC STD SUB CH,CH MOV CL,ACTNLEN ;Длина в CX для REP LEA SI,NAMEFLD ;Вычислить самую правую ADD SI,CX ; позицию DEC SI ; введенного имени LEA DI,NAMEDSP+30 ;Правая поз. поля имени REP MOVSB ;Переслать справа налево MOV DH,ROW MOV DL,48 CALL Q20CURS ;Установить курсор MOV AH,09 LEA DX,NAMEDSP ;Выдать имя на экран INT 21H CMP ROW,20 ;Последняя строка экрана? JAE E20 ; нет - INC ROW ; увеличить строку, JMP E90 E20: MOV AX,0601H ; да - CALL Q10SCR ; прокрутить и MOV DH,ROW ; установить курсор MOV DL,00 CALL Q20CURS E90: RET E10RGHT ENDP ; Очистить область имени: ; ---------------------- F10CLNM PROC CLD MOV AX,2020H MOV CX,15 ;Очистить 15 слов LEA DI,NAMEDSP REP STOSW RET F10CLNM ENDP ; Прокрутка экрана: ; ---------------- Q10SCR PROC ;AX установлен при вызове MOV BH,30 ;Цвет ( 07 для ч/б) MOV CX,00 MOV DX,184FH INT 10H RET Q10SCR ENDP ; Установить курсор (строка/столбец): ; ---------------------------------- Q20CURS PROC ;DX установлен при вызове MOV AH,02 SUB BH,BH




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