1、汇编语言程序举例三查找关键字1六、过程定义伪操作格式 过程名 PROC 类型 、过程名 ENDP 过程 定义由伪操作 PROC开始、 ENDP结束 。其中: PROC 和 ENDP 必须成对出现 ,且语句前必须有过程名, 过程名必须相同 。 PROC和 ENDP语句之间为子程的指令序列。 程序中可以定义多个过程。 程序经汇编、连接及装入内存后 ,过程名为一具体的内存地址,指示子程入口。2 过程名常用作 CALL调用指令的操作数 ,子程的最后安排 RET返回指令,使执行完子程后能返回调用处 。 过程有两种类型: NEAR和 FAR 无类型项时, 默认为 NEAR类型 。当过程与调用指令不在同一段
2、时,应将过程定义为 FAR 类型。过程类型决定子程中 RET的返回类型3例 1 display PROC、 C3H 、RET ;NEAR 属性的过程对应段内返回display ENDP例 2 display PROC FAR、 CBH、RET ;FAR属性的过程对应段间返回display ENDP4;汇编语言程序结构例二(子程结构) ;用二进制显示中断向量表中数据 D0H的个数key EQU 0D0H ;用符号表示常量 (关键字 )code SEGMENT ;代码段开始ASSUME CS:code begin: MOV AX , 0000H MOV DS , AX MOV SI , 0000H
3、 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 ; 返回 DOSINT 21H;用二进制显示 BX内容子程display PROC MOV CX , 16 rotate: ROL BX , 1 MOV DL , BLAND DL , 01HADD DL , 30HMOV AH , 2H INT 21H LOOP rotateRET ;子程返回display ENDP code EN
4、DS ;代码段结束END begin ;指示程序结束和;程序入口5七、等值定义伪操作格式 符号名 EQU 需等值的表达式 作用是用符号名等值指 定的表达式其中 表达式可以是任何有效的操作数汇编时用语句中的表达式代替程序中符号所在的地方。 应用:1. 定义符号常量,方便修改程序。2. 某表达式多次出现时,用等值伪操作可以方便编程。6;汇编语言程序结构例二(子程结构) ;用二进制显示中断向量表中数据 D0H的个数key EQU 0D0H ;用符号表示常量 (关键字 )code SEGMENT ;代码段开始ASSUME CS:code begin: MOV AX , 0000H MOV DS , A
5、X 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 ; 返回 DOSINT 21H;用二进制显示 BX内容子程display PROC MOV CX , 16 rotate: ROL BX , 1 MOV DL , BLAND DL , 01HADD DL , 30HMOV AH , 2H INT 21H LOOP rotateRET ;子程返回disp
6、lay ENDP code ENDS ;代码段结束END begin ;指示程序结束和;程序入口7例三 用二进制显示中断向量表中数据 D0H的个数。分析: 中断向量表指内存 0: 0 0: 3FFH 大小 400H (即 1K ) 字节空间 ;查找关键字 D0H;将关键字的个数,存放在 BX中 ,采用二进制显示 BX内容, 16个字符;采用子程调用结构。8主程序流程图 子程序流程图9;汇编语言程序结构例二(子程结构) ;用二进制显示中断向量表中数据 D0H的个数key EQU D0H ;用符号表示常量 (关键字 )code SEGMENT ;代码段开始ASSUME CS:code begin:
7、 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 ; 返回 DOSINT 21H;用二进制显示 BX内容子程display PROC MOV CX , 16 rotate: ROL BX , 1 MOV DL , BLAND DL , 01HADD DL , 30HMOV AH , 2H INT 21H LOOP rotateRET ;子程返回display ENDP code ENDS ;代码段结束END begin ;指示程序结束和;程序入口10