第6章子程序结构.ppt
《第6章子程序结构.ppt》由会员分享,可在线阅读,更多相关《第6章子程序结构.ppt(42页珍藏版)》请在淘文阁 - 分享文档赚钱的网站上搜索。
1、计算机科学与技术系计算机科学与技术系 汇编语言汇编语言第6章子程序结构 Still waters run deep.流静水深流静水深,人静心深人静心深 Where there is life,there is hope。有生命必有希望。有生命必有希望计算机科学与技术系计算机科学与技术系 汇编语言汇编语言子程序的基本结构包括以下几个部分:子程序的基本结构包括以下几个部分:(1 1 1 1)子程序定义)子程序定义)子程序定义)子程序定义 (2 2 2 2)保护现场和恢复现场)保护现场和恢复现场)保护现场和恢复现场)保护现场和恢复现场 (3 3 3 3)子程序体)子程序体)子程序体)子程序体 (4
2、4 4 4)子程序返回)子程序返回)子程序返回)子程序返回 子程序的结构子程序的结构11/16/20222ch6计算机科学与技术系计算机科学与技术系 汇编语言汇编语言 子子程程序序的的定定义义是是由由过过程程定定义义伪伪指指令令PROCPROC和和ENDPENDP来完成的。其格式如下:来完成的。其格式如下:过程名过程名过程名过程名 PROC NEAR/FAR PROC NEAR/FAR PROC NEAR/FAR PROC NEAR/FAR 过程名过程名过程名过程名 ENDP ENDP ENDP ENDP 其其其其中中中中PROCPROCPROCPROC表表表表示示示示过过过过程程程程定定定定
3、义义义义开开开开始始始始,ENDPENDPENDPENDP表表表表示示示示过过过过程程程程定定定定义结束。义结束。义结束。义结束。过程名是过程入口地址的符号表示过程名是过程入口地址的符号表示过程名是过程入口地址的符号表示过程名是过程入口地址的符号表示。一般过程名同标号一样,具有三种属性,即段一般过程名同标号一样,具有三种属性,即段一般过程名同标号一样,具有三种属性,即段一般过程名同标号一样,具有三种属性,即段属性、偏移地址属性以及类型属性(属性、偏移地址属性以及类型属性(属性、偏移地址属性以及类型属性(属性、偏移地址属性以及类型属性(NEAR NEAR NEAR NEAR 和和和和 FAR)F
4、AR)FAR)FAR)。6.1.1 子程序的定义子程序的定义6.1 子程序的设计方法子程序的设计方法11/16/20223ch6计算机科学与技术系计算机科学与技术系 汇编语言汇编语言如果调用程序和过程在如果调用程序和过程在同一代码段同一代码段同一代码段同一代码段中,则使用中,则使用NEARNEAR属性属性属性属性;MAIN PROC FARMAIN PROC FAR CALL SUBR1CALL SUBR1 RETMAIN ENDPMAIN ENDP;SUBR1 PROC SUBR1 PROC NEARNEAR RETSUBR1 ENDPSUBR1 ENDPMAIN PROC FARMAIN
5、PROC FAR CALL SUBR1CALL SUBR1 RETSUBR1 PROC SUBR1 PROC NEARNEAR RETSUBR1 ENDPSUBR1 ENDPMAIN ENDPMAIN ENDP6.1.2 子程序的调用和返回子程序的调用和返回11/16/20224ch6计算机科学与技术系计算机科学与技术系 汇编语言汇编语言如果如果调用程序和过程不在同一代码段中调用程序和过程不在同一代码段中调用程序和过程不在同一代码段中调用程序和过程不在同一代码段中,则使用,则使用FAR属性;属性;SEGX SEGMENTSEGX SEGMENT SUBT PROC FARFAR RETSUBT
6、 ENDP CALL SUBT SEGX ENDSSEGX ENDS;SEGY SEGMENTSEGY SEGMENTSEGY SEGMENTSEGY SEGMENT CALL SUBT SEGY ENDSSEGY ENDS11/16/20225ch6计算机科学与技术系计算机科学与技术系 汇编语言汇编语言6.1.3 6.1.3 保护现场和恢复现场保护现场和恢复现场例如:若子程序例如:若子程序例如:若子程序例如:若子程序PROGPROG中改变了寄存器中改变了寄存器中改变了寄存器中改变了寄存器AXAX,BXBX,CXCX,DXDX的值,则的值,则的值,则的值,则 可采用如下方法保护和恢复现场。可采
7、用如下方法保护和恢复现场。可采用如下方法保护和恢复现场。可采用如下方法保护和恢复现场。PROGPROCPUSHPUSHAXAXPUSH PUSH BX BX PUSH PUSHCXCX;保护现场;保护现场;保护现场;保护现场PUSHPUSHDXDX POPPOPDXDXPOPPOPCXCXPOPPOPBXBX;恢复现场;恢复现场;恢复现场;恢复现场POPPOPAXAXRET;返回断点处;返回断点处PROCENDP11/16/20226ch6计算机科学与技术系计算机科学与技术系 汇编语言汇编语言6.1.4 主程序与子程序参数传递方式主程序与子程序参数传递方式 1 1 通过寄存器传送参数通过寄存器
8、传送参数通过寄存器传送参数通过寄存器传送参数 这是最常用的一种方式,使用方便,但参数很多时不能这是最常用的一种方式,使用方便,但参数很多时不能使用这种方法。使用这种方法。例:十进制到十六进制转换的程序。程序要求从键盘取例:十进制到十六进制转换的程序。程序要求从键盘取得一个十进制数,然后把该数以十六进制的形式在屏幕上显得一个十进制数,然后把该数以十六进制的形式在屏幕上显示出来。示出来。开始开始调用DECIBIN调用CRLF调用BINIHEX调用CRLF结束从键盘取得十进制从键盘取得十进制数,保存到数,保存到BXBX中中显示回车和换行显示回车和换行用十六进制形式用十六进制形式显示显示BXBX中的数
9、中的数11/16/20227ch6计算机科学与技术系计算机科学与技术系 汇编语言汇编语言Decihex segment assume cs:DecihexMain proc farMain proc farRepeat: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 ne
10、arDecibin proc near mov bx,0Newchar:mov ah,1 int 21h sub al,30h jl exit cmp al,9 jg exit cbw xchg ax,bxxchg 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 11/16/20228ch6计算机科学与技术系计算机科学与技术系 汇编语言汇编语言B
11、inihex proc nearBinihex proc near mov ch,4mov ch,4Rotate:mov cl,4 Rotate:mov cl,4 rol bx,cl rol bx,cl mov dl,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
12、 rotate ret ret Binihex endpBinihex endpCrlf proc nearCrlf proc near mov ah,2mov ah,2 mov dl,odh mov dl,odh int 21h int 21h mov dl,oah mov dl,oah int 21h int 21h ret retCrlf endpCrlf endpDecihex ends end repeat 11/16/20229ch6计算机科学与技术系计算机科学与技术系 汇编语言汇编语言2 2如果过程和调用过程在同一源文件(同一模块)中,如果过程和调用过程在同一源文件(同一模块)中
13、,如果过程和调用过程在同一源文件(同一模块)中,如果过程和调用过程在同一源文件(同一模块)中,则过程可直接访问模块中的变量。则过程可直接访问模块中的变量。则过程可直接访问模块中的变量。则过程可直接访问模块中的变量。3 4 例例例例 6.4 6.4 6.4 6.4 主程序主程序主程序主程序MAINMAINMAINMAIN和过程和过程和过程和过程PROADDPROADDPROADDPROADD在同一源文件在同一源文件在同一源文件在同一源文件中,要求用过程中,要求用过程中,要求用过程中,要求用过程PROADDPROADDPROADDPROADD累加数组的所有元素,并把累加数组的所有元素,并把累加数组
14、的所有元素,并把累加数组的所有元素,并把和(不考虑溢出的可能性)送到指定的存储单元中和(不考虑溢出的可能性)送到指定的存储单元中和(不考虑溢出的可能性)送到指定的存储单元中和(不考虑溢出的可能性)送到指定的存储单元中去去去去11/16/202210ch6计算机科学与技术系计算机科学与技术系 汇编语言汇编语言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
15、PROC FARMAIN PROC FAR ASSUME CS:CODE,DS:DATA ASSUME CS:CODE,DS:DATASTART:PUSH DSSTART:PUSH DS SUB AX,AX SUB AX,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
16、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 ADD 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 START11/16/202
17、211ch6计算机科学与技术系计算机科学与技术系 汇编语言汇编语言CODE SEGMENTARY DW 100 DUP(?)ARY DW 100 DUP(?)COUNT DW 100COUNT DW 100SUM DW?SUM 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
18、TABLE+4,OFFSET SUNMOV BX,OFFSET TABLEMOV BX,OFFSET TABLECALL PROADD CALL PROADD ;计算;计算;计算;计算SUMSUMPROADD PROC NEAR 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
19、 AX RETPROADD ENDPCODE ENDS END STARTBXBX+2BX+4DI3 3 通过地址表传递参数通过地址表传递参数11/16/202212ch6计算机科学与技术系计算机科学与技术系 汇编语言汇编语言例:把内存中字变量例:把内存中字变量例:把内存中字变量例:把内存中字变量numnum的值,的值,的值,的值,转换为转换为转换为转换为4 4个用个用个用个用ASCASC码表示的码表示的码表示的码表示的1616进制数码,串的起始地址为进制数码,串的起始地址为进制数码,串的起始地址为进制数码,串的起始地址为stringstring 。Data segmentNum dw 25a
20、fhString db 4 dup(?),$,0dh,0ahData endsStack segment para stack stack db 100 dup(?)Stack endsCode segment assume 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
21、 21h retMain endp2000:00002000:00023000:00003000:00013000:00033000:00043000:00073000:00093000:000d3000:000e3000:00123000:00153000:001915150000af250200spstring地址地址NumLea dx,string地址(地址(IP)4 4 通过堆栈传递地址或参数通过堆栈传递地址或参数11/16/202213ch6计算机科学与技术系计算机科学与技术系 汇编语言汇编语言Binhex proc nearBinhex proc near push bp mov
22、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 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-211/16/202214ch6计算机科学与技
23、术系计算机科学与技术系 汇编语言汇编语言Next:mov di,bl inc di dec ch jnz rota popf pop cx pop bx pop di pop ax pop bp ret 4ret 4Binhex endpBinhex endpCode ends end begin 0015001525af0002spstring地址地址NumLea dx,string地址地址(IP)flagcxbxdiaxbpsp11/16/202215ch6计算机科学与技术系计算机科学与技术系 汇编语言汇编语言 例例例例3 3:求:求:求:求1010个数的累加值个数的累加值个数的累加值个数
24、的累加值.-远调用远调用远调用远调用Data segmentAry db 10 dup(?)Count db 10Sum db?Data endsStack segment para stack stack db 100 dup(?)Stack endsCode1 segment assume cs:code1,ds:data,ss;stackMain proc farStart:push ds xor ax,ax push ax mov ax,data mov ds,ax11/16/202216ch6计算机科学与技术系计算机科学与技术系 汇编语言汇编语言 Mov bx,offset ary
25、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 ah,2 int 21h retMain endpCode1 endsSum地址地址Count地址地址Ary地址地址MOV AL,SUM MOV AL,SUM 地址地址地址地址spIPCS11/16/202217ch6计算机科学与技术系计算机科学与技术系 汇编语言汇编语言Sum地址地址Count地址地址Ary地址地址spMOV AL,SUM 地址地址disicxa
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 章子 程序结构
限制150内