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



       

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


MOV BH,00 ;Очистить поле после имени MOV BL,NAMELEN ;Получить счетчик символов MOV CX,21 SUB CX,BX ;Вычислить оставшуюся длину B20: MOV NAMEFLD[BX],20H ;Установить символ пробела INC BX LOOP B20 RET B10READ ENDP ; Запись имени в таблицу: ; ---------------------- D10STOR PROC INC NAMECTR ;Число имен в таблице CLD LES SI,NAMEFLD MOV CX,10 REP MOVSV ;Переслать имя в таблицу RET D10STOR ENDP ; Сортировка имен в таблице: ; ------------------------- G10SORT PROC SUB DI,40 ;Установить адреса останова MOV ENDADDR,DI G20: MOV SWAPPED,00 ;Установить начало LEA SI,NAMETAB ; таблицы G30: MOV CX,20 ;Длина сравнения MOV DI,SI ADD DI,20 ;Следующее имя для сравнения MOV AX,DI MOV BX,SI REPE CMPSB ;Сравнить имя со следующим JBE G40 ; нет перестановки CALL H10XCHG ; перестановка G40: MOV SI,AX CMP SI,ENDADDR ;Конец таблицы?

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

JBE G30 ; нет - продолжить CMP SWAPPED,00 ;Есть перестановки? JNZ G20 ; да - продолжить, RET ; нет - конец сортировки G10SORT ENDP ; Перестановка элементов таблицы: ; ------------------------------ H10XCHG PROC MOV CX,10 LEA DI,NAMESAV MOV SI,BX REP MOVSW ;Сохранить меньший элемент

MOV CX,10 MOV DI,BX REP MOVSW ;Переслать больший элемент ; на место меньшего MOV CX,10 LEA SI,NAMESAV REP MOVSW ;Переслать сохраненный ; элемент на место большего MOV SWAPPED,01 ;Признак перестановки RET H10XCHG ENDP ; Вывод на экран отсортированные имена: ; ------------------------------------ K10DISP PROC LEA SI,NAMETAB K20: LEA DI,NAMESAV ;Начальный адрес таблицы MOV CX,10 REP MOVSV MOV AH,09 LEA DX,NAMESAV INT 21H ;Вывести на экран DEC NAMECTR ;Это последний элемент? JNZ K20 ; нет - повторить цикл, RET ; да - выйти K10DISP ENDP ; Очистка экрана: ; -------------- Q10CLR PROC MOV AX,0600H MOV BH,61H ;Цвет (07 для ч/б) SUB CX,CX MOV DX,184FH INT 10H RET Q10CLR ENDP ; Установка курсора: ; ----------------- Q20CURS PROC MOV AH,02

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

SUB BH,BH SUB DX,DX ;Установить курсор в 00,00 INT 10H RET Q20CURS ENDP

CODESG ENDS END BEGIN




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