IBM-PC汇编语言(⑥子程序结构)PPT教学课件
合集下载
相关主题
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
xor ax, ax
cmp al, 9
push ax
jg exit
call decibin call crlf call biwenku.baidu.comihex
cbw xchg ax, bx mov cx, 10 mul cx
call crlf
xchg ax, bx ;每次乘的
ret
add bx, ax
;结果在BX中
Main endp
2020/12/10
ch6
1
安徽理工大学 计算机科学与技术系 李敬兆
子程序的结构
《汇编语言》 第6章
子程序的基本结构包括以下几个部分:
(1)子程序定义 (2)保护现场和恢复现场 (3)子程序体 (4)子程序返回
2020/12/10
ch6
2
安徽理工大学 计算机科学与技术系 李敬兆
《汇编语言》 第6章
jmp newchar Exit : ret
2020/12/10
Decibchi6n endp
8
安徽理工大学 计算机科学与技术系 李敬兆
《汇编语言》 第6章
Binihex proc near
mov ch, 4
Crlf proc near
Rotate: mov cl, 4 rol bx, cl mov dl, bl and dl, 0fh add dl, 30h cmp dl, 3ah jl print add dl, 7h
2020/12/10
ch6
3
安徽理工大学 计算机科学与技术系 李敬兆
6.1.2 子程序的调用和返回
《汇编语言》 第6章
如果调用程序和过程在同一代码段中,则使用NEAR属性;
MAIN PROC FAR … CALL SUBR1 RET
MAIN ENDP ; SUBR1 PROC NEAR
… RET SUBR1 ENDP
START: PUSH DS SUB AX ,AX PUSH AX MOV AX , DATA … CALL NEAR PTR PROADD … RET
MAIN ENDP
2020/12/10
PROADD PROC NEAR
PUSH AX
PUSH CX
PUSH SI
PUSH DI
LEA SI ,ARY
2020/12/10
ch6
10
安徽理工大学 计算机科学与技术系 李敬兆
《汇编语言》 第6章
DATA SEGMENT ARY DW 100 DUP (?) COUNT DW 100 SUM DW ?
DATA ENDS
CODE SEGMENT
MAIN PROC FAR ASSUME CS:CODE , DS:DATA
2020/12/10
MAIN
PROC FAR … CALL SUBR1 RET
SUBR1 PROC NEAR …
RET SUBR1 ENDP MAIN ENDP
ch6
4
安徽理工大学 计算机科学与技术系 李敬兆
《汇编语言》 第6章
如果调用程序和过程不在同一代码段中,则使用FAR属性;
SEGX SEGMENT
… SUBT PROC FAR
… RET SUBT ENDP … CALL SUBT …
SEGX ENDS
;
SEGY SEGMENT
…
CALL SUBT
…
2020/12/10
SEGY ENDS ch6
5
安徽理工大学 计算机科学与技术系 李敬兆
6.1.3 保护现场和恢复现场
《汇编语言》 第6章
例如:若子程序PROG中改变了寄存器AX,BX,CX,DX的值,则 可采用如下方法保护和恢复现场。
安徽理工大学 计算机科学与技术系 李敬兆
《汇编语言》 第6章
2 如果过程和调用过程在同一源文件(同一模块)中, 则过程可直接访问模块中的变量。
3
4 例 6.4 主程序MAIN和过程PROADD在同一源文 件中,要求用过程PROADD累加数组的所有元素, 并把和(不考虑溢出的可能性)送到指定的存储单 元中去
mov ah, 2 mov dl, odh int 21h mov dl, oah int 21h ret Crlf endp
Print: mov ah, 2
int 21h
Decihex ends
dec ch jnz rotate
end repeat
2020/12/10 ret
ch6
9
Binihex endp
安徽理工大学 计算机科学与技术系 李敬兆
《汇编语言》 第6章
第6章 子程序结构
在程序设计中,我们会发现一些多次无规 律重复的程序段或语句序列。解决此类问题 一个行之有效的方法就是将它们设计成可供 反复调用的独立的子程序结构,以便在需要 时调用。在汇编语言中,子程序又称过程。
调用子程序的程序称为主调程序或主程序。
PROG
PROC
PUSH AX
PUSH BX PUSH CX
;保护现场
PUSH DX
•
┆
POP DX
POP CX POP BX
;恢复现场
POP AX RET
;返回断点处
PROC
ENDP
2020/12/10
ch6
6
安徽理工大学 计算机科学与技术系 李敬兆
6.1.4 主程序与子程序参数传递方式
1 通过寄存器传送参数
调用CRLF
结束
ch6
用十六进制形式 显示BX中的数
7
安徽理工大学 计算机科学与技术系 李敬兆
《汇编语言》 第6章
Decibin proc near
Decihex segment
mov bx, 0
assume cs:Decihex Main proc far Repeat: push ds
Newchar: mov ah, 1 int 21h sub al, 30h jl exit
MOV CX ,COUNT
6.1 子程序的设计方法
6.1.1 子程序的定义
子程序的定义是由过程定义伪指令PROC和ENDP 来完成的。其格式如下:
过程名 PROC [NEAR/FAR] ┆
过程名 ENDP 其中PROC表示过程定义开始,ENDP表示过程定
义结束。过程名是过程入口地址的符号表示。
一般过程名同标号一样,具有三种属性,即段 属性、偏移地址属性以及类型属性(NEAR 和 FAR)。
《汇编语言》 第6章
这是最常用的一种方式,使用方便,但参数很多时不能 使用这种方法。
例:十进制到十六进制转换的程序。程序要求从键盘取得
一个十进制数,然后把该数以十六进制的形式在屏幕上显示
出来。
开始
调用DECIBIN
从键盘取得十进制 数,保存到BX中
调用CRLF 调用BINIHEX
显示回车和换行
2020/12/10