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



       

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


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

page 65,132 TITLE EXMOVE (EXE) Операции расширенной пересылки ;------------------------------------------------------ STACKSG SEGMENT PARA STACK 'Stack' DW 32 DUP(?) STACKSG ENDS ;------------------------------------------------------ DATASG SEGMENT PARA 'Data' NAME1 DB 'ABCDEFGHI' NAME2 DB 'JKLMNOPQR' NAME3 DB 'STUVWXYZ*' DATASG ENDS ;------------------------------------------------------- CODESG SEGMENT PARA 'Code' BEGIN PROC FAR ASSUME CS:CODESG,DS:DATASG,SS:STACKSG,ES:DATASG PUSH DS SUB AX,AX PUSH AX MOV AX,DATASG MOV DS,AX MOV ES,AX CALL B10MOVE ;Вызвать JUMP подпрограмму CALL C10MOVE ;Вызвать CALL подпрограмму RET ;Завершить программу BEGIN ENDP

; Расширенная пересылка (JUMP-подпрограмма), ; использующая переход по условию: ; ----------------------------------------- B10MOVE PROC LEA SI,NAME1 ;Инициализация адресов LEA DI,NAME2 ; NAME1 и NAME2 MOV CX,09 ;Переслать 9 символов B20: MOV AL,[SI] ;Переслать из NAME1 MOV [DI],AL ;Переслать в NAME2 INC SI ;Следующий символ в NAME1 INC DI ;Следующая позиция в NAME2 DEC CX ;Уменьшить счетчик цикла JNZ B20 ;Счетчик > 0? Да - цикл RET ;Если счетчик = 0, то B10MOVE ENDP ; вернуться

; Расширенная пересылка (LOOP-подпрограмма), ; использующая команду LOOP: ; -----------------------------------------; C10MOVE PROC LEA SI,NAME2 ;Инициализация адресов LEA DI,NAME3 ; NAME2 и NAME3 MOV CX,09 ;Переслать 9 символов C20

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

MOV AL,[SI] ;Переслать из NAME2 MOV [DI],AL ;Переслать в NAME3 INC DI ;Следующий символ в NAME2 INC SI ;Следующая позиция в NAME3 LOOP C20 ;Уменьшить счетчик, ; если не ноль, то цикл RET ;Если счетчик = 0, то C10MOVE ENDP ; вернуться CODESG ENDS END BEGIN

TITLE CASE (COM) Перекодировка в заглавные буквы 0000 CODESG SEGMENT PARA 'CODE' ASSUME CS:CODESG,DS:CODESG,SS:CODESG 0001 ORG 100H 0001 EB 1C 90 BEGIN: JMP MAIN ; ------------------------------------------- 0003 43 68 61 6E 67 65 TITLEX DB 'Change to uppercase letters' 20 74 6F 20 75 70 70 65 72 63 61 73 65 20 6C 65 74 74 65 72 73 ; ------------------------------------------- 011E MAIN PROC NEAR 011E 8D 1E 0104 R LEA BX,TITLEX+1 ;Адрес первого символа 0122 B9 001F MOV CX,31 ;Число символов 0125 B20: 0125 8A 27 MOV AH,[BX] ;Символ из TITLEX 0127 80 FC 61 CMP AH,61H ;Это 012A 72 0A JB B30 ; прописная 012C 80 FC 7A CMP AH,7AH ; буква 012F 77 05 JA B30 ; ? 0131 80 E4 DF AND AH,11011111B ;Да - преобразовать 0134 88 27 MOV [BX],AH ;Записать в TITLEX 0136 B30: 0136 43 INC BX ;Следующий символ 0137 E2 EC LOOP B20 ;Повторить цикл 31 раз 0139 C3 RET 013A MAIN ENDP 013A CODESG ENDS END BEGIN




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