微机原理与接口技术 第5章 汇编语言程序设计 西安邮电大学计算机学院 王 钰
第5章 汇编语言程序设计 本讲主要内容 汇编语言程序设计 过程程序设计
4. 子程序设计 … 子程序又称为过程,它相当于高级语言的过程或函数,是一个独立的程序段,能完成某些确定的功能,并能被其它程序调用。 第5章 汇编语言程序设计 4. 子程序设计 子程序又称为过程,它相当于高级语言的过程或函数,是一个独立的程序段,能完成某些确定的功能,并能被其它程序调用。 (1) 过程的定义 过程名 PROC 类型 RET 过程名 ENDP …
… … … 第5章 汇编语言程序设计 (2)过程的调用 CALL 过程名 ① 段内调用 CSEG SEGMENT CALL SUBT 第5章 汇编语言程序设计 (2)过程的调用 CALL 过程名 ① 段内调用 CSEG SEGMENT CALL SUBT MOV AH,4CH INT 21H SUBT PROC NEAR RET SUBT ENDP CSEG ENDS … … …
第5章 汇编语言程序设计 ② 段间调用 XSEG SEGMENT YSEG SEGMENT CALL SUBT1 CALL SUBT1 MOV AH,4CH YSEG ENDS INT 21H SUBT1 PROC FAR RET SUBT1 ENDP XSEG ENDS … … … … …
(3) 子程序在源程序中的位置 第5章 汇编语言程序设计 第5章 汇编语言程序设计 (3) 子程序在源程序中的位置 子程序一般是放在返回DOS语句和段结束语句之间的位置。因为在正常情况下这个区域的程序是不会被执行的。 当然,也可以放在主程序的最前面。这时要注意主程序的起始标号要在子程序之后。 XSEG SEGMENT CALL SUBT1 MOV AH,4CH INT 21H SUBT1 PROC FAR RET SUBT1 ENDP XSEG ENDS … XSEG SEGMENT SUBT1 PROC FAR RET SUBT1 ENDP STRAT: CALL SUBT1 MOV AH,4CH INT 21H XSEG ENDS END STRAT …
综上,当需多次访问的程序段较长,访问次数又不是太多时,选用子程序结构较好。 第5章 汇编语言程序设计 (4)宏指令与子程序(过程) ① 空间开销:子程序优于宏指令。 ② 时间开销:宏指令优于子程序。 综上,当需多次访问的程序段较长,访问次数又不是太多时,选用子程序结构较好。 当需多次访问的程序段较短,访问次数又很频繁时,选用宏指令结构显然要更好些。
要求转换ASCII码部分分别用子程序调用和宏调用的方法实现。 第5章 汇编语言程序设计 (5) 子程序调用和宏调用使用的例子 [例] 在存储器Hexdata单元中存放着4位十六进制数4D7EH,试编写程序将这4位十六进制数分别转换为相应的ASCII码,并依次存放到Result的4个单元中去,并依次在屏幕上显示。 要求转换ASCII码部分分别用子程序调用和宏调用的方法实现。
第5章 汇编语言程序设计 ① 用子程序调用方法编程: LEA SI, RESULT+3 MOV CX, 4 STD LOOP1: LODSB 第5章 汇编语言程序设计 ① 用子程序调用方法编程: LEA SI, RESULT+3 MOV CX, 4 STD LOOP1: LODSB MOV DL, AL MOV AH, 02H INT 21H LOOP LOOP1 MOV DL, 'H' MOV AH, 4CH ;十六进制转换成ASCII码子程序 HEXASC PROC CMP AL, 0AH JB P30 ADD AL, 07H P30: ADD AL, 30H RET HEXASC ENDP CODE ENDS END START DATA SEGMENT Hexdata DW 4D7EH Result DB 4 DUP(?) DATA ENDS CODE SEGMENT ASSUME CS:CODE, DS:DATA START: MOV AX, DATA MOV DS, AX MOV CX, 4 LEA DI, Result MOV BX, Hexdata NEXT: MOV AX, BX AND AL, 0FH CALL HEXASC ;子程序调用 MOV [DI], AL INC DI PUSH CX MOV CL, 4 SHR BX, CL POP CX LOOP NEXT
第5章 汇编语言程序设计 ② 用宏调用方法编程 HEXASC ;宏调用 MOV [DI], AL INC DI PUSH CX 第5章 汇编语言程序设计 ② 用宏调用方法编程 HEXASC ;宏调用 MOV [DI], AL INC DI PUSH CX MOV CL, 4 SHR BX, CL POP CX LOOP NEXT LEA SI, RESULT+3 MOV CX, 4 STD LOOP1: LODSB MOV DL, AL MOV AH, 02H INT 21H LOOP LOOP1 MOV DL, 'H' MOV AH, 4CH INT 21H CODE ENDS END START DATA SEGMENT Hexdata DW 4D7EH Result DB 4 DUP(?) DATA ENDS CODE SEGMENT ASSUME CS:CODE, DS:DATA START: MOV AX, DATA MOV DS, AX ;十六进制转换成ASCII码宏定义 HEXASC MACRO CMP AL, 0AH JB PLUS30 ADD AL, 07H PLUS30: ADD AL, 30H ENDM MOV CX, 4 LEA DI, Result MOV BX, [SI] NEXT: MOV AX, BX AND AL, 0FH
第5章 汇编语言程序设计 LEA SI, RESULT+3 START: MOV AX, DATA MOV CX, 4 MOV DS, AX 第5章 汇编语言程序设计 LEA SI, RESULT+3 MOV CX, 4 STD LOOP1: LODSB MOV DL, AL MOV AH, 02H INT 21H LOOP LOOP1 MOV DL, 'H' MOV AH, 4CH INT 21H START: MOV AX, DATA MOV DS, AX MOV CX, 4 LEA DI, Result MOV BX, [SI] NEXT: MOV AX, BX AND AL, 0FH CMP AL, 0AH JB PLUS30 ADD AL, 07H PLUS30: ADD AL, 30H MOV [DI], AL INC DI PUSH CX MOV CL, 4 SHR BX, CL POP CX LOOP NEXT
第5章 汇编语言程序设计小结 第5章 汇编语言程序设计 首先,我们学习了汇编语言源程序的分段结构和语句分类及语 句格式。 第5章 汇编语言程序设计 第5章 汇编语言程序设计小结 首先,我们学习了汇编语言源程序的分段结构和语句分类及语 句格式。 其次,详细学习了伪指令语句和宏指令语句。 最后,我们学习了汇编语言程序设计中四种结构程序的设计方 法,即简单结构程序设计方法,循环结构程序设计方法,分支 结构程序设计方法和子程序结构程序设计方法。 另外,我们还学习了如何通过上机操作把汇编语言源程序变成 计算机能够执行的应用程序。 其中,结构程序设计是本章的重点。希望大家要熟练掌握,并 能在程序设计中灵活应用。
再 见