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



       

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


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

TITLE MACRO4 (COM) Использование директивы LOCAL ; ------------------------------------------------- DIVIDE MACRO DIVIDEND,DIVISOR,QUOTIENT LOCAL COMP LOCAL OUT ; AX=делимое, BX=делитель, CX=частное MOV AX,DIVIDEND ;Загрузить делимое MOV BX,DIVISOR ;Загрузить делитель SUB CX,CX ;Регистр для частного COMP: CMP AX,BX ;Делимое < делителя? JB OUT ; да - выйти SUB AX,BX ;Делимое - делитель INC CX ;Частное + 1 JMP COMP OUT: MOV QUOTIENT,CX ;Записать результат ENDM ; ------------------------------------------------ 0000 CSEG SEGMENT PARA 'Code' ASSUME CS:CSEG,DS:CSEG,SS:CSEG,ES:CSEG 0100 ORG 100H 0100 EB 06 BEGIN: JMP SHORT MAIN ; ------------------------------------------------ 0102 0096 DIVDND DW 150 ;Делимое 0104 001B DIVSOR DW 27 ;Делитель 0106 ???? QUOTNT DW ? ;Частное ; ------------------------------------------------ 0108 MAIN PROC NEAR .LALL DIVIDE DIVDND,DIVSOR,QUOTNT + ; AX=делимое, BX=делитель, CX=частное 0108 A1 0102 R + MOV AX,DIVDND ;Загрузить делимое 010B 8B 1E 0104 R + MOV BX,DIVSOR ;Загрузить делитель 010F 2B C9 + SUB CX,CX ;Регистр для частного 0111 + ??0000: 0111 3B C3 + CMP AX,BX ;Делимое < делителя? 0113 72 05 + JB ??0001 ; да - выйти 0115 2B C3 + SUB AX,BX ;Делимое - делитель 0117 41 + INC CX ;Частное + 1 0118 EB F7 + JMP ??0000 011A + ??0001: 011A 89 0E 0106 R + MOV QUOTNT,CX ;Записать результат 011E C3 RET 011F MAIN ENDP 011F CSEG ENDS END BEGIN

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

TITLE MACRO5 (EXE) Проверка директивы INCLUDE EDIF ; ------------------------------------------------ 0000 STACK SEGMENT PARA STACK 'Stack' 0000 20 [????] DW 32 DUP(?) 0040 STACK ENDS ; ------------------------------------------------ 0000 DATA SEGMENT PARA 'Data' 0000 54 65 73 74 20 6F MESSGE DB 'Test of macro','$' 66 20 6D 61 63 72 6F 24 000E DATA ENDS ; ------------------------------------------------ 0000 CSEG SEGMENT PARA 'Code' 0000 BEGIN PROC FAR INIT CSEG,DATA,STACK 0000 1E + PUSH DS 0001 3B C0 + SUB AX,AX 0003 50 + PUSH AX 0004 B8 ---- R + MOV AX,DATA 0007 8E D8 + MOV DS,AX 0009 8E C0 + MOV ES,AX PROMPT MESSGE 000B B4 09 + MOV AH,09 ;Вывод на экран 000D 8D 16 0000 R + LEA DX,MESSGE 0011 CD 21 + INT 21H 0013 CB RET 0014 BEGIN ENDP 0014 CSEG ENDS END BEGIN




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