清华大学:《汇编语言程序设计》第六章 子程序结构

第六章子程序结构 过程定义伪操作 子程序的调用与返回 保存与恢复寄存器 子程序的参数传送 子程序的嵌套与递归
1 第六章 子程序结构 • 过程定义伪操作 • 子程序的调用与返回 • 保存与恢复寄存器 • 子程序的参数传送 • 子程序的嵌套与递归

1.过程定义伪操作 过程名 PROC NEAR(FAR) 过程名ENDP (1)NEAR属性:调用程序和子程序在同一代码段中 (段内调用) (2)FAR属性:调用程序和子程序不在同一代码段中 (段间调用)
2 1. 过程定义伪操作 过程名 PROC NEAR ( FAR ) 过程名 ENDP (1)NEAR属性:调用程序和子程序在同一代码段中 (段内调用) (2)FAR属性:调用程序和子程序不在同一代码段中 (段间调用) . .

code segment segx segment subt proc far main proc far ret call subr1 subt endp ret call subt main endp segx ends subl proc near segy segment ret subl endp call subt code ends segy ends
3 code segment main proc far …… call subr1 …… ret main endp subr1 proc near …… ret subr1 endp code ends segx segment subt proc far …… ret subt endp …… call subt …… segx ends segy segment …… call subt …… segy ends

2.子程序的调用与返回 子程序调用:隐含使用堆栈保存返回地址 call near ptr subp (1)保存返回地址 2)转子程序 sP)→(IP) call far ptr subp (1)保存返回地址 (2)转子程序 sP)→(工P) (CS) 子程序返回:ret
4 子程序调用:隐含使用堆栈保存返回地址 call near ptr subp (1) 保存返回地址 (2) 转子程序 call far ptr subp (1) 保存返回地址 (2) 转子程序 子程序返回:ret 2. 子程序的调用与返回 (SP)→ (IP) (IP) (CS) (SP)→

3.保存与恢复寄存器 subt proc far push ax push bx push CX push d 面面面面面面 pop dx pop CX pop bx pop ret subt endp 5
5 3. 保存与恢复寄存器 subt proc far push ax push bx push cx push dx …… …… pop dx pop cx pop bx pop ax ret subt endp

4.子程序的参数传送 (1)通过寄存器传送参数 (2)通过存储器传送参数 (3)通过地址表传送参数地址 (4)通过堆栈传送参数或参数地址 (5)多个模块之间的参数传送
6 (1) 通过寄存器传送参数 (2) 通过存储器传送参数 (3) 通过地址表传送参数地址 (4) 通过堆栈传送参数或参数地址 (5) 多个模块之间的参数传送 4. 子程序的参数传送

例:十进制到十六进制的转换(通过寄存器传送参数) decihex segment ;10>16 assume cs: decihex main proc far push d: sub axax push ax repeat: call decibin ;10→>2 call crlf ;回车换行 call binhex ;2→>16 call crlf Jmp epeat ret main ndp decitex ends end main 7
7 例:十进制到十六进制的转换(通过寄存器传送参数) decihex segment ; 10→16 assume cs: decihex main proc far push ds sub ax, ax push ax repeat: call decibin ; 10→2 call crlf ; 回车换行 call binihex ; 2→16 call crlf jmp repeat ret main endp …… …… …… decihex ends end main

decibin proc near binhex proc near moy bx 0 moV newchar: mov ah, 1 rotate: mov int 21h rol bx. Cl sub al, 30h mov a 1,0fh cmp al, 9 dd al, 3oh Jg exIt cmp 3ah cbw println xchg moV CX. dd al. 7 i printit: mov d, al CX mov an, xchg ax, bx int 21h add bx, ax dec ch jmp newchar nz rotat exit: ret ret decibin endp binhex end crlf proc near d. odh moy ah 2 int 21h mov d. oah mov ah. 2 int 21h t crlf end
8 decibin proc near mov bx, 0 newchar: mov ah, 1 int 21h sub al, 30h jl exit cmp al, 9 jg exit cbw xchg ax, bx mov cx, 10 mul cx xchg ax, bx add bx, ax jmp newchar exit: ret decibin endp binihex proc near mov ch, 4 rotate: mov cl, 4 rol bx, cl mov al, bl and al, 0fh add al, 30h cmp al, 3ah jl printit add al, 7 printit: mov dl, al mov ah, 2 int 21h dec ch jnz rotate ret binihex endp crlf proc near mov dl, 0dh mov ah, 2 int 21h mov dl, 0ah mov ah, 2 int 21h ret crlf endp

例:十六进制到十进制的转换(通过寄存器传送参数) hexidec segment 16→>10 assume cs: hexidec main proc f start: push ds sub axax push ax repeat cal hexibin ;16>2 call crlf call binded 2→>10 call crlf ]mp repeat ret maIn endp hexidec ends end start
9 例:十六进制到十进制的转换(通过寄存器传送参数) hexidec segment ; 16→10 assume cs: hexidec main proc far start: push ds sub ax, ax push ax repeat: call hexibin ; 16→2 call crlf call binidec ; 2→10 call crlf jmp repeat ret main endp …… …… …… hexidec ends end start

binidec proc near hexibin proc mov Cx. 10000d moy bx. 0 call dec di newchar mov Cx, 1000d moV call dec div Int b al. 3oh mov cx. 100d exl t call dec div cmp a 10 mov cx. 10d add to call dec div ub al 27h cmp al, Oah mov cx. 1d exit call dec div cmp al, 10h ret ]ge exIt add to moV C binidec endp shi bx. Cl mov al dec_div proc near add ax moy ax. bx jmp newchar mov dx. 0 exit hexibin endp div Cx moy bx dx moy d al add d 30h moy ah. 2 int 21h ret d d ec a7 v endp 10
10 hexibin proc near mov bx, 0 newchar: mov ah, 1 int 21h sub al, 30h jl exit cmp al, 10 jl add_to sub al, 27h cmp al, 0ah jl exit cmp al, 10h jge exit add_to: mov cl, 4 shl bx, cl mov ah, 0 add bx, ax jmp newchar exit: ret hexibin endp binidec proc near mov cx, 10000d call dec_div mov cx, 1000d call dec_div mov cx, 100d call dec_div mov cx, 10d call dec_div mov cx, 1d call dec_div ret binidec endp dec_div proc near mov ax, bx mov dx, 0 div cx mov bx, dx mov dl, al add dl, 30h mov ah, 2 int 21h ret dec_div endp
按次数下载不扣除下载券;
注册用户24小时内重复下载只扣除一次;
顺序:VIP每日次数-->可用次数-->下载券;
- 清华大学:《汇编语言程序设计》第八章 输入输出程序设计.ppt
- 清华大学:《汇编语言程序设计》第五章 循环与分支程序设计.ppt
- 清华大学:《汇编语言程序设计》第二章 80x86计算机组织.ppt
- 清华大学:《汇编语言程序设计》第九章 BIOS和DOS中断.ppt
- 清华大学:《汇编语言程序设计》第三章(3-3) 逻辑指令.ppt
- 清华大学:《汇编语言程序设计》第三章(3-2) 8086的指令系统.ppt
- 清华大学:《汇编语言程序设计》第三章(3-1) 8086的寻址方式.ppt
- 清华大学:《汇编语言程序设计》第七章 高级汇编语言技术.ppt
- 清华大学:《汇编语言程序设计》第一章 基础知识.ppt
- 清华大学:《汇编语言程序设计》汇编语言程序与高级语言程序的连接.ppt
- 徐州工程学院:《网页制作与网站建设》讲义.docx
- 《计算机进程管理》讲义.ppt
- 《计算机辅助设计——机电系统CAD》教学讲义教材:附录二 常见机械CAD软件简介.doc
- 《计算机辅助设计——机电系统CAD》教学讲义教材:附录一 MATLAB 软件简介.doc
- 《计算机辅助设计——机电系统CAD》教学讲义教材:第八章 机电系统计算机辅助设计的发展.doc
- 《计算机辅助设计——机电系统CAD》教学讲义教材:第七章 机电系统的智能设计理论和方法.doc
- 《计算机辅助设计——机电系统CAD》教学讲义教材:第六章 产品数据管理技术.doc
- 《计算机辅助设计——机电系统CAD》教学讲义教材:第五章 机械产品模型理论及常用建模技术.doc
- 《计算机辅助设计——机电系统CAD》教学讲义教材:第四章 机电系统动态性能的计算机仿真.doc
- 《计算机辅助设计——机电系统CAD》教学讲义教材:第三章 机电系统的计算机辅助分析.doc
- 清华大学:《汇编语言程序设计》第四章 汇编语言程序格式.ppt
- 清华大学:《汇编语言程序设计》绪论.ppt
- 《数据库原理与应用》ppt电子书.ppt
- 《C++程序开发教程》课程电子教案(PPT教学课件)第二章 C++基础知识.ppt
- 《C++程序开发教程》课程电子教案(PPT教学课件)第九章 多态性.ppt
- 《C++程序开发教程》课程电子教案(PPT教学课件)第十章 模板.ppt
- 《C++程序开发教程》课程电子教案(PPT教学课件)第四章 函数.ppt
- 《C++程序开发教程》课程电子教案(PPT教学课件)第十二章 异常处理.ppt
- 《C++程序开发教程》课程电子教案(PPT教学课件)第五章 类与对象.ppt
- 《C++程序开发教程》课程电子教案(PPT教学课件)第七章 动态内存分配.ppt
- 《C++程序开发教程》课程电子教案(PPT教学课件)第八章 继承性.ppt
- 《C++程序开发教程》课程电子教案(PPT教学课件)第十三章 图书馆设计.ppt
- 《C++程序开发教程》课程电子教案(PPT教学课件)第三章 基本控制结构程序设计.ppt
- 《C++程序开发教程》课程电子教案(PPT教学课件)第六章 数据结构.ppt
- 《C++程序开发教程》课程电子教案(PPT教学课件)习题课.ppt
- 《C++程序开发教程》课程电子教案(PPT教学课件)模板习题.ppt
- 《C++程序开发教程》课程电子教案(PPT教学课件)第十一章 流类库和输入/输出.ppt
- 《C++程序开发教程》课程电子教案(PPT教学课件)第一章 软件设计.ppt
- 深圳信息职院:《电子商务》双语版 UNIT 17-01 Outlook Express6说明.ppt
- 深圳信息职院:《电子商务》双语版 UNIT18-01 FoxMail的使用.ppt