六、过程定义伪操作 格式过程名PROC类型 过程名ENDP ▲过程定义由伪操作PROC开始、ENDP结束 其中:PROC和ENDP必须成对出现, 且语句前必须有过程名,过程名必须相同 ▲PROC和ENDP语句之间为子程的指令序列。 ▲程序中可以定义多个过程。 ▲程序经汇编、连接及装入内存后, 过程名为一具体的内存地址,指示子程入口
1 六、过程定义伪操作 格式 过程名 PROC 类型 、、、 过程名 ENDP ▲ 过程定义由伪操作PROC开始、ENDP结束。 其中: PROC 和ENDP 必须成对出现, 且语句前必须有过程名,过程名必须相同。 ▲ PROC和ENDP语句之间为子程的指令序列。 ▲ 程序中可以定义多个过程。 ▲ 程序经汇编、连接及装入内存后, 过程名为一具体的内存地址,指示子程入口
▲过程名常用作CALL调用指令的操作数, 子程的最后安排RE返回指令,使执行完子程后能返回调用处。 ▲过程有两种类型:NEAR和FAR 无类型项时,默认为NEAR类型 当过程与调用指令不在同一段时,应将过程定义为FAR类型。 过程类型决定子程中RET的返回类型
2 ▲过程名常用作CALL调用指令的操作数, 子程的最后安排RET返回指令,使执行完子程后能返回调用处。 ▲过程有两种类型:NEAR和FAR 无类型项时,默认为NEAR类型。 当过程与调用指令不在同一段时,应将过程定义为 FAR 类型。 过程类型决定子程中RET的返回类型
例1 display proc C3H RET ;NEAR属性的过程对应段内返回 display ENDP 例2 display PRoC Far CBH RET ;FAR属性的过程对应段间返回 display ENDP
3 例1 display PROC 、、 、、 C3H 、、 RET ;NEAR 属性的过程对应段内返回 display ENDP 例2 display PROC FAR 、、 、、 CBH 、、 RET ;FAR属性的过程对应段间返回 display ENDP
汇编语言程序举例三
4 汇编语言程序举例三
;利用汇编语言程序结构例三(子程结构) 用二进制显示中断向量表中数据D0H的个数 key EQU0D0H;用符号表示常量(关键字) code SEgMent ;代码段开始 ;用二进制显示BX内容子程 ASSUME CS: code begin: MOV AX. 0000H display proc MOV DS. AX MOV CX.16 MOV SI 0000H rotate: ROL BX. 1 MOV CX.0400H MOV DL BL MOV BX. 0 AND DL OIH MOⅤAL,key ADD DL 30H next: CMP I SI, AL MOV AH. 2H JNZ point INT 21H INC BX LOOP rotate point: INC SI RET 子程返回 LOOP next display ENDP CALL display;调用显示子程 code ENDs ;代码段结束 MOAH,4CH;返回DOS INT 21H end begin;指示程序结束和 ;程序入口
5 ;利用汇编语言程序结构例二(子程结构) ;用二进制显示中断向量表中数据D0H的个数 key EQU 0D0H ;用符号表示常量(关键字) code SEGMENT ;代码段开始 ASSUME CS:code begin: MOV AX , 0000H MOV DS , AX MOV SI , 0000H MOV CX , 0400H MOV BX , 0 MOV AL , key next: CMP [ SI ] , AL JNZ point INC BX point: INC SI LOOP next CALL display ; 调用显示子程 MOV AH, 4CH ; 返回DOS INT 21H ;用二进制显示BX内容子程 display PROC MOV CX , 16 rotate: ROL BX , 1 MOV DL , BL AND DL , 01H ADD DL , 30H MOV AH , 2H INT 21H LOOP rotate RET ;子程返回 display ENDP code ENDS ;代码段结束 END begin ;指示程序结束和 ;程序入口