《子程序结构》PPT课件.ppt
《《子程序结构》PPT课件.ppt》由会员分享,可在线阅读,更多相关《《子程序结构》PPT课件.ppt(42页珍藏版)》请在淘文阁 - 分享文档赚钱的网站上搜索。
1、计算机科学与技术系计算机科学与技术系 汇编语言汇编语言 在在程程序序设设计计中中,我我们们会会发发现现一一些些多多次次无无规规律律重重复复的的程程序序段段或或语语句句序序列列。解解决决此此类类问问题题一一个个行行之之有有效效的的方方法法就就是是将将它它们们设设计计成成可可供供反反复复调调用用的的独独立立的的子子程程序序结结构构,以以便便在在需需要要时调用。在汇编语言中时调用。在汇编语言中,子程序又称过程子程序又称过程子程序又称过程子程序又称过程。调用子程序的程序称为主调程序或主程序调用子程序的程序称为主调程序或主程序调用子程序的程序称为主调程序或主程序调用子程序的程序称为主调程序或主程序。第第
2、6章章 子程序结构子程序结构1/11/20231ch6计算机科学与技术系计算机科学与技术系 汇编语言汇编语言子程序的基本结构包括以下几个部分:子程序的基本结构包括以下几个部分:(1 1 1 1)子程序定义)子程序定义)子程序定义)子程序定义 (2 2 2 2)保护现场和恢复现场)保护现场和恢复现场)保护现场和恢复现场)保护现场和恢复现场 (3 3 3 3)子程序体)子程序体)子程序体)子程序体 (4 4 4 4)子程序返回)子程序返回)子程序返回)子程序返回 子程序的结构子程序的结构1/11/20232ch6计算机科学与技术系计算机科学与技术系 汇编语言汇编语言 子子程程序序的的定定义义是是由
3、由过过程程定定义义伪伪指指令令PROCPROC和和ENDPENDP来完成的。其格式如下:来完成的。其格式如下:过程名过程名过程名过程名 PROC NEAR/FAR PROC NEAR/FAR PROC NEAR/FAR PROC NEAR/FAR 过程名过程名过程名过程名 ENDP ENDP ENDP ENDP 其其其其中中中中PROCPROCPROCPROC表表表表示示示示过过过过程程程程定定定定义义义义开开开开始始始始,ENDPENDPENDPENDP表表表表示示示示过过过过程程程程定定定定义结束。义结束。义结束。义结束。过程名是过程入口地址的符号表示过程名是过程入口地址的符号表示过程名是
4、过程入口地址的符号表示过程名是过程入口地址的符号表示。一般过程名同标号一样,具有三种属性,即段一般过程名同标号一样,具有三种属性,即段一般过程名同标号一样,具有三种属性,即段一般过程名同标号一样,具有三种属性,即段属性、偏移地址属性以及类型属性(属性、偏移地址属性以及类型属性(属性、偏移地址属性以及类型属性(属性、偏移地址属性以及类型属性(NEAR NEAR NEAR NEAR 和和和和 FAR)FAR)FAR)FAR)。6.1.1 子程序的定义子程序的定义6.1 子程序的设计方法子程序的设计方法1/11/20233ch6计算机科学与技术系计算机科学与技术系 汇编语言汇编语言如果调用程序和过程
5、在如果调用程序和过程在同一代码段同一代码段同一代码段同一代码段中,则使用中,则使用NEARNEAR属性属性属性属性;MAIN PROC FARMAIN PROC FAR CALL SUBR1CALL SUBR1 RETMAIN ENDPMAIN ENDP;SUBR1 PROC SUBR1 PROC NEARNEAR RETSUBR1 ENDPSUBR1 ENDPMAIN PROC FARMAIN PROC FAR CALL SUBR1CALL SUBR1 RETSUBR1 PROC SUBR1 PROC NEARNEAR RETSUBR1 ENDPSUBR1 ENDPMAIN ENDPMAIN
6、 ENDP6.1.2 子程序的调用和返回子程序的调用和返回1/11/20234ch6计算机科学与技术系计算机科学与技术系 汇编语言汇编语言如果如果调用程序和过程不在同一代码段中调用程序和过程不在同一代码段中调用程序和过程不在同一代码段中调用程序和过程不在同一代码段中,则使用,则使用FAR属性;属性;SEGX SEGMENTSEGX SEGMENT SUBT PROC FARFAR RETSUBT ENDP CALL SUBT SEGX ENDSSEGX ENDS;SEGY SEGMENTSEGY SEGMENTSEGY SEGMENTSEGY SEGMENT CALL SUBT SEGY EN
7、DSSEGY ENDS1/11/20235ch6计算机科学与技术系计算机科学与技术系 汇编语言汇编语言6.1.3 6.1.3 保护现场和恢复现场保护现场和恢复现场例如:若子程序例如:若子程序例如:若子程序例如:若子程序PROGPROG中改变了寄存器中改变了寄存器中改变了寄存器中改变了寄存器AXAX,BXBX,CXCX,DXDX的值,则的值,则的值,则的值,则 可采用如下方法保护和恢复现场。可采用如下方法保护和恢复现场。可采用如下方法保护和恢复现场。可采用如下方法保护和恢复现场。PROGPROCPUSHPUSHAXAXPUSH PUSH BX BX PUSH PUSHCXCX;保护现场;保护现场
8、;保护现场;保护现场PUSHPUSHDXDX POPPOPDXDXPOPPOPCXCXPOPPOPBXBX;恢复现场恢复现场恢复现场恢复现场POPPOPAXAXRET;返回断点处返回断点处PROCENDP1/11/20236ch6计算机科学与技术系计算机科学与技术系 汇编语言汇编语言6.1.4 主程序与子程序参数传递方式主程序与子程序参数传递方式 1 1 通过寄存器传送参数通过寄存器传送参数通过寄存器传送参数通过寄存器传送参数 这是最常用的一种方式,使用方便,但参数很多时不能这是最常用的一种方式,使用方便,但参数很多时不能使用这种方法。使用这种方法。例:十进制到十六进制转换的程序。程序要求从键
9、盘取例:十进制到十六进制转换的程序。程序要求从键盘取得一个十进制数,然后把该数以十六进制的形式在屏幕上显得一个十进制数,然后把该数以十六进制的形式在屏幕上显示出来。示出来。开始开始调用DECIBIN调用CRLF调用BINIHEX调用CRLF结束从键盘取得十进制从键盘取得十进制数,保存到数,保存到BXBX中中显示回车和换行显示回车和换行用十六进制形式用十六进制形式显示显示BXBX中的数中的数1/11/20237ch6计算机科学与技术系计算机科学与技术系 汇编语言汇编语言Decihex segment assume cs:DecihexMain proc farMain proc farRepea
10、t:push dsRepeat:push ds xor ax,ax xor ax,ax push ax push ax call decibincall decibin call crlf call crlf call binihex call binihex call crlf call crlf ret retMain endpMain endp Decibin proc nearDecibin proc near mov bx,0Newchar:mov ah,1 int 21h sub al,30h jl exit cmp al,9 jg exit cbw xchg ax,bxxchg
11、ax,bx mov cx,10 mov cx,10 mul cx mul cx xchg ax,bx xchg ax,bx ;每次乘的每次乘的 add bx,ax add bx,ax ;结果在结果在BX中中 jmp newchar Exit:retDecibin endp Decibin endp 1/11/20238ch6计算机科学与技术系计算机科学与技术系 汇编语言汇编语言Binihex proc nearBinihex proc near mov ch,4mov ch,4Rotate:mov cl,4 Rotate:mov cl,4 rol bx,cl rol bx,cl mov dl,
12、bl mov dl,bl and dl,0fh and dl,0fh add dl,30h add dl,30h cmp dl,3ah cmp dl,3ah jl print jl print add dl,7h add dl,7h Print:mov ah,2 Print:mov ah,2 int 21h int 21h dec ch dec ch jnz rotate jnz rotate ret ret Binihex endpBinihex endpCrlf proc nearCrlf proc near mov ah,2mov ah,2 mov dl,odh mov dl,odh i
13、nt 21h int 21h mov dl,oah mov dl,oah int 21h int 21h ret retCrlf endpCrlf endpDecihex ends end repeat 1/11/20239ch6计算机科学与技术系计算机科学与技术系 汇编语言汇编语言2 2如果过程和调用过程在同一源文件(同一模块)中,如果过程和调用过程在同一源文件(同一模块)中,如果过程和调用过程在同一源文件(同一模块)中,如果过程和调用过程在同一源文件(同一模块)中,则过程可直接访问模块中的变量。则过程可直接访问模块中的变量。则过程可直接访问模块中的变量。则过程可直接访问模块中的变量。3 4
14、 例例例例 6.4 6.4 6.4 6.4 主程序主程序主程序主程序MAINMAINMAINMAIN和过程和过程和过程和过程PROADDPROADDPROADDPROADD在同一源文件在同一源文件在同一源文件在同一源文件中,要求用过程中,要求用过程中,要求用过程中,要求用过程PROADDPROADDPROADDPROADD累加数组的所有元素,并把累加数组的所有元素,并把累加数组的所有元素,并把累加数组的所有元素,并把和(不考虑溢出的可能性)送到指定的存储单元中和(不考虑溢出的可能性)送到指定的存储单元中和(不考虑溢出的可能性)送到指定的存储单元中和(不考虑溢出的可能性)送到指定的存储单元中去去
15、去去1/11/202310ch6计算机科学与技术系计算机科学与技术系 汇编语言汇编语言DATA SEGMENTDATA SEGMENT ARY ARY DW 100 DUP(?)DW 100 DUP(?)COUNTCOUNT DW 100 DW 100 SUM SUM DW?DW?DATA ENDSDATA ENDSCODE SEGMENTCODE SEGMENT MAIN PROC FARMAIN PROC FAR ASSUME CS:CODE,DS:DATA ASSUME CS:CODE,DS:DATASTART:PUSH DSSTART:PUSH DS SUB AX,AX SUB AX,
16、AX PUSH AX PUSH AX MOV AX,DATA MOV AX,DATA CALL NEAR PTR PROADDCALL NEAR PTR PROADD RET RETMAIN ENDPMAIN ENDPPROADD PROC NEARPROADD PROC NEAR PUSH AXPUSH AX PUSH CX PUSH CX PUSH SI PUSH SI PUSH DI PUSH DI LEA SI,LEA SI,ARYARY MOV CX,MOV CX,COUNTCOUNT XOR AX,AX XOR AX,AXNEXT:ADD AX,SINEXT:ADD AX,SI A
17、DD SI,2 ADD SI,2 LOOP NEXT LOOP NEXT MOV MOV SUMSUM,AX,AX POP DIPOP DI POP SI POP SI POP CX POP CX POP AX POP AX RET RETPROADD ENDPPROADD ENDPCODE ENDSCODE ENDS END START END START1/11/202311ch6计算机科学与技术系计算机科学与技术系 汇编语言汇编语言CODE SEGMENTARY DW 100 DUP(?)ARY DW 100 DUP(?)COUNT DW 100COUNT DW 100SUM DW?SU
18、M DW?NUM DW 100 DUP(?)NUM DW 100 DUP(?)N DW 100N DW 100TOTAL DW?TOTAL DW?;MOV TABLE,OFFSET ARYMOV TABLE,OFFSET ARYMOV TABLE+2,OFFSET COUNTMOV TABLE+2,OFFSET COUNTMOV TABLE+4,OFFSET SUNMOV TABLE+4,OFFSET SUNMOV BX,OFFSET TABLEMOV BX,OFFSET TABLECALL PROADD CALL PROADD ;计算;计算;计算;计算SUMSUMPROADD PROC NE
19、AR PUSH AX PUSH CX PUSH SI MOV SI,MOV SI,MOV CX,MOV CX,MOV DI,MOV DI,XOR AX,AX XOR AX,AXNEXT:ADD AX,SINEXT:ADD AX,SI ADD SI,2 ADD SI,2 LOOP NEXT LOOP NEXT MOV ,AX MOV ,AX POP SI POP CX POP AX RETPROADD ENDPCODE ENDS END STARTBXBX+2BX+4DI3 3 通过地址表传递参数通过地址表传递参数1/11/202312ch6计算机科学与技术系计算机科学与技术系 汇编语言汇编语言
20、例:把内存中字变量例:把内存中字变量例:把内存中字变量例:把内存中字变量numnum的值,的值,的值,的值,转换为转换为转换为转换为4 4个用个用个用个用ASCASC码表示的码表示的码表示的码表示的1616进制数码,串的起始地址为进制数码,串的起始地址为进制数码,串的起始地址为进制数码,串的起始地址为stringstring 。Data segmentNum dw 25afhString db 4 dup(?),$,0dh,0ahData endsStack segment para stack stack db 100 dup(?)Stack endsCode segment assume
21、cs:code,ds:data,ss:stackMain proc farBegin:push ds xor ax,ax push ax mov ax,data mov ds,ax lea bx,string lea bx,string push bxbx push num call binhexcall binhex lea dx,string mov ah,9 int 21h retMain endp2000:00002000:00023000:00003000:00013000:00033000:00043000:00073000:00093000:000d3000:000e3000:0
22、0123000:00153000:001915150000af250200spstring地址地址NumLea dx,string地址(地址(IP)4 4 通过堆栈传递地址或参数通过堆栈传递地址或参数1/11/202313ch6计算机科学与技术系计算机科学与技术系 汇编语言汇编语言Binhex proc nearBinhex proc near push bp mov bp,sp push ax push di push bx push cx pushf mov ax,bp+4 ;ax=25afh mov di,bp+6 ;di=0002 mov ch,4 mov cl,4 roat:rol
23、ax,cl mov bl,al and bl,0fh add bl,30h cmp bl,39h jle next add bl,7h 0015001525af0002spstring地址地址NumLea dx,string地址地址(IP)flagcxbxdiaxbp(Sp)bpbp+2bp+4bp+6Bp-6Bp-4Bp-21/11/202314ch6计算机科学与技术系计算机科学与技术系 汇编语言汇编语言Next:mov di,bl inc di dec ch jnz rota popf pop cx pop bx pop di pop ax pop bp ret 4ret 4Binhex
24、endpBinhex endpCode ends end begin 0015001525af0002spstring地址地址NumLea dx,string地址地址(IP)flagcxbxdiaxbpsp1/11/202315ch6计算机科学与技术系计算机科学与技术系 汇编语言汇编语言 例例例例3 3:求:求:求:求1010个数的累加值个数的累加值个数的累加值个数的累加值.-远调用远调用远调用远调用Data segmentAry db 10 dup(?)Count db 10Sum db?Data endsStack segment para stack stack db 100 dup(?
25、)Stack endsCode1 segment assume cs:code1,ds:data,ss;stackMain proc farStart:push ds xor ax,ax push ax mov ax,data mov ds,ax1/11/202316ch6计算机科学与技术系计算机科学与技术系 汇编语言汇编语言 Mov bx,offset ary Push bx Mov bx,offset count Push bx Mov bx,offset sum Push bx Call far ptr proadd mov al,summov al,sum mov dl,al mov
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 子程序结构 子程序 结构 PPT 课件
限制150内