《第六章子程序结构(精品).ppt》由会员分享,可在线阅读,更多相关《第六章子程序结构(精品).ppt(44页珍藏版)》请在taowenge.com淘文阁网|工程机械CAD图纸|机械工程制图|CAD装配图下载|SolidWorks_CaTia_CAD_UG_PROE_设计图分享下载上搜索。
1、 在在程程序序设设计计中中,可可以以发发现现一一些些多多次次无无规规律律重重复复的的程程序序段段或或语语句句序序列列。解解决决此此类类问问题题一一个个行行之之有有效效的的方方法法就就是是将将它它们们设设计计成成可可供供反反复复调调用用的的独独立立的的子子程程序序结结构构,以以便便在在需需要要时时调用。在汇编语言中调用。在汇编语言中,子程序又称过程子程序又称过程子程序又称过程子程序又称过程。调用子程序的程序称为主调程序或主程序调用子程序的程序称为主调程序或主程序调用子程序的程序称为主调程序或主程序调用子程序的程序称为主调程序或主程序。第第6章章 子程序结构子程序结构2/8/20232/8/202
2、31 1ch6ch6子程序的基本结构包括以下几个部分:子程序的基本结构包括以下几个部分:(1 1 1 1)子程序定义)子程序定义)子程序定义)子程序定义 (2 2 2 2)保护现场和恢复现场)保护现场和恢复现场)保护现场和恢复现场)保护现场和恢复现场 (3 3 3 3)子程序体)子程序体)子程序体)子程序体 (4 4 4 4)子程序返回)子程序返回)子程序返回)子程序返回 子程序的结构子程序的结构2/8/20232/8/20232 2ch6ch6 子子程程序序的的定定义义是是由由过过程程定定义义伪伪指指令令PROCPROC和和ENDPENDP来完成的。其格式如下:来完成的。其格式如下:过程名过
3、程名过程名过程名 PROC NEAR/FARPROC NEAR/FARPROC NEAR/FARPROC NEAR/FAR 过程名过程名过程名过程名 ENDPENDPENDPENDP 其其其其中中中中PROCPROCPROCPROC表表表表示示示示过过过过程程程程定定定定义义义义开开开开始始始始,ENDPENDPENDPENDP表表表表示示示示过过过过程程程程定定定定义结束。义结束。义结束。义结束。过程名是过程入口地址的符号表示过程名是过程入口地址的符号表示过程名是过程入口地址的符号表示过程名是过程入口地址的符号表示。一般过程名同标号一样,具有三种属性,即段一般过程名同标号一样,具有三种属性,
4、即段一般过程名同标号一样,具有三种属性,即段一般过程名同标号一样,具有三种属性,即段属性、偏移地址属性以及类型属性(属性、偏移地址属性以及类型属性(属性、偏移地址属性以及类型属性(属性、偏移地址属性以及类型属性(NEAR NEAR NEAR NEAR 和和和和 FAR)FAR)FAR)FAR)。6.1.1 子程序的定义子程序的定义6.1 子程序的设计方法子程序的设计方法2/8/20232/8/20233 3ch6ch61.1.如果调用程序和过程在如果调用程序和过程在同一代码段同一代码段同一代码段同一代码段中,则使用中,则使用NEARNEARNEARNEAR属属属属性性性性;MAIN PROC
5、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 ENDP例例6.16.1过程嵌套定义过程嵌套定义2/8/20232/8/20234 4ch6ch62.2.如果如果调用程序和过程不在同
6、一代码段中调用程序和过程不在同一代码段中调用程序和过程不在同一代码段中调用程序和过程不在同一代码段中,则使用,则使用FARFAR属性;属性;SEGX SEGMENT SUBT PROC FARFAR RETSUBT ENDP CALL SUBT SEGX ENDS;SEGY SEGMENTSEGY SEGMENT CALL SUBT SEGY ENDS例例6.26.22/8/20232/8/20235 5ch6ch66.1.2 子程序的调用和返回子程序的调用和返回调用调用:CALL far/near ptr 过程名过程名返回返回:RET n2/8/20232/8/20236 6ch6ch66.
7、1.3 6.1.3 保护现场和恢复现场保护现场和恢复现场例如:若子程序例如:若子程序例如:若子程序例如:若子程序PROGPROG中改变了寄存器中改变了寄存器中改变了寄存器中改变了寄存器AXAX,BXBX,CXCX,DXDX的值,则的值,则的值,则的值,则 可采用如下方法保护和恢复现场。可采用如下方法保护和恢复现场。可采用如下方法保护和恢复现场。可采用如下方法保护和恢复现场。PROGPROCPUSHPUSHAXAXPUSH PUSH BX BX PUSH PUSHCXCX;保护现场保护现场保护现场保护现场PUSHPUSHDXDX POPPOPDXDXPOPPOPCXCXPOPPOPBXBX;恢复
8、现场恢复现场恢复现场恢复现场POPPOPAXAXRET;返回断点处返回断点处PROCENDP2/8/20232/8/20237 7ch6ch66.1.4 主程序与子程序参数传递方式主程序与子程序参数传递方式 1 1 通过寄存器传送参数通过寄存器传送参数通过寄存器传送参数通过寄存器传送参数 这是最常用的一种方式,使用方便,但参数很多时不能这是最常用的一种方式,使用方便,但参数很多时不能使用这种方法。使用这种方法。例例6.3 6.3 十进制到十六进制转换的程序。程序要求从键盘十进制到十六进制转换的程序。程序要求从键盘取得一个十进制数,然后把该数以十六进制的形式在屏幕上取得一个十进制数,然后把该数以
9、十六进制的形式在屏幕上显示出来。显示出来。开始开始调用DECIBIN调用CRLF调用BINIHEX调用CRLF结束从键盘取得十进制从键盘取得十进制数,保存到数,保存到BXBX中中显示回车和换行显示回车和换行用十六进制形式用十六进制形式显示显示BXBX中的数中的数2/8/20232/8/20238 8ch6ch6Decihex segment assume cs:DecihexRepeat:Repeat:call call decibindecibin call call crlfcrlf call call binihexbinihex call call crlfcrlf MOV AH,4C
10、H MOV AH,4CH INT 21H INT 21H DecibinDecibin proc near proc near mov bx,0Newchar:mov ah,1 int 21h sub al,30h jl exit cmp al,9 jg exit cbw xchgxchg ax,ax,bxbx movmov cxcx,10,10 mulmul cxcx xchgxchg ax,ax,bxbx ;每次乘的每次乘的 add add bxbx,ax ,ax ;结果在结果在BX中中 jmp newchar Exit:retDecibinDecibin endpendp 2/8/202
11、32/8/20239 9ch6ch6BinihexBinihex proc near proc near movmov chch,4,4Rotate:Rotate:movmov cl cl,4,4 rolrol bxbx,cl cl movmov dl,dl,blbl and dl,0fh and dl,0fh add dl,30h add dl,30h cmpcmp dl,3ah dl,3ah jl jl print print add dl,7h add dl,7h Print:Print:movmov ah,2 ah,2 intint 21h 21h decdec chch jnzjnz
12、 rotate rotate ret ret BinihexBinihex endpendpCrlfCrlf proc near proc near movmov ah,2 ah,2 movmov dl,dl,odhodh intint 21h 21h movmov dl,dl,oahoah intint 21h 21h ret retCrlfCrlf endpendpDecihex ends end repeat 2/8/20232/8/20231010ch6ch62 2如果过程和调用过程在同一源文件(同一模块)中,如果过程和调用过程在同一源文件(同一模块)中,如果过程和调用过程在同一源文件
13、(同一模块)中,如果过程和调用过程在同一源文件(同一模块)中,则过程可直接访问模块中的变量。则过程可直接访问模块中的变量。则过程可直接访问模块中的变量。则过程可直接访问模块中的变量。3 4 例例例例 6.4_1 6.4_1 6.4_1 6.4_1 主程序主程序主程序主程序MAINMAINMAINMAIN和过程和过程和过程和过程PROADDPROADDPROADDPROADD在同一源文在同一源文在同一源文在同一源文件中,要求用过程件中,要求用过程件中,要求用过程件中,要求用过程PROADDPROADDPROADDPROADD累加数组的所有元素,并累加数组的所有元素,并累加数组的所有元素,并累加数
14、组的所有元素,并把和(不考虑溢出的可能性)送到指定的存储单元把和(不考虑溢出的可能性)送到指定的存储单元把和(不考虑溢出的可能性)送到指定的存储单元把和(不考虑溢出的可能性)送到指定的存储单元中去中去中去中去2/8/20232/8/20231111ch6ch6DATA 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 AS
15、SUME 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 PUSH DI PUSH DI LEA SI,L
16、EA 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 START2/8/20232/8/20231212ch6ch6CODE SE
17、GMENTARY 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?TABLE DW?TABLE DW?DW?DW?DW?DW?MOV TABLE,OFFSET ARYMOV TABLE,OFFSET ARYMOV TABLE+2,OFFSET COUNTMOV TABLE+2,OFFSET COUNTMOV TABLE+4,OFFSET SUNMOV TABLE+4,OFF
18、SET SUNMOV BX,OFFSET TABLEMOV BX,OFFSET TABLECALL PROADD CALL PROADD ;计算计算SUMSUMPROADD PROC NEAR PUSH AX PUSH CX PUSH SI PUSH DI PUSH SI,MOV SI,BX MOV DI,MOV DI,BX+2BX+2 MOV CX,MOV CX,DI DI MOV DI,MOV DI,BX+4BX+4 XOR AX,AX XOR AX,AXNEXT:ADD AX,NEXT:ADD AX,SISI ADD SI,2 ADD SI,2 LOOP NEXT LOOP NEXT M
19、OV MOV 【DI,DI,AX AX POP DIPOP DI POP SI POP CX POP AX RETPROADD ENDPCODE ENDS END START3 3 通过地址表传递参数通过地址表传递参数例例6.4_26.4_22/8/20232/8/20231313ch6ch64 4 通过堆栈传递地址或参数通过堆栈传递地址或参数Data segmentAry dw 100 dup(?)Count db 100Sum dw?Data endsStack segment para stack stack dw 100 dup(?)tos label wordStack endsCo
20、de1 segment assume cs:code1,ds:data,ss;stackMain proc farStart:push ds xor ax,ax push ax mov ax,data mov ds,ax mov ax,stack mov ss,ax mov sp,offset tos Mov bx,offset ary Push bx Mov bx,offset count Push bx Mov bx,offset sum Push bx Call far ptr proadd movmov al,sum al,sum mov dl,al mov ah,2 int 21h
21、ret Main endp Code1 ends例例6.4_36.4_32/8/20232/8/20231414ch6ch6Sum地址地址Count地址地址Ary地址地址spdisicxaxbp(Sp)bpIPCSCode2 segment assume cs:code2ProaddProadd proc far proc far push bp mov bp,sp push ax push cx push si push di mov si,bp+0ah mov di,bp+08h mov cl,di mov di,bp+06h xor al,alAgain:add al,si inc si
22、 dec cl jnz again mov di,al pop di pop si pop cx pop ax pop bp ret 6ret 6Proadd endpCode2 ends end startbp+0ahbp+08hbp+06hSpSpSpSpSp2/8/20232/8/20231515ch6ch6(1)PUBLIC(1)PUBLIC伪指令伪指令 格式:格式:PUBLIC PUBLIC PUBLIC PUBLIC 符号符号符号符号 ,符号,符号,符号,符号 功功能能:说说明明其其后后的的符符号号是是全全局局符符号号。全全局局符符号号能能被被其其他他模模块引用。块引用。(局部符号
23、)局部符号)(2)EXTRN(2)EXTRN伪指令伪指令 格式:格式:EXTRN EXTRN EXTRN EXTRN 符号:类型符号:类型符号:类型符号:类型 ,符号:类型,符号:类型,符号:类型,符号:类型 功功能能:说说明明在在本本模模块块中中需需要要引引用用的的、由由其其他他模模块块定定义义的的符符号,即外部符号号,即外部符号。5 5 多个模块之间的参数传送问题多个模块之间的参数传送问题多个模块之间的参数传送问题多个模块之间的参数传送问题2/8/20232/8/20231616ch6ch6;source module 1;source module 1extrnextrn var2:wo
24、rd,lab2:far var2:word,lab2:farpublic var1,lab1public var1,lab1Data1 segmentData1 segment var1 db?var1 db?var3 var3 dwdw?var4 var4 dwdw?Data1 endsData1 endscode1 segmentcode1 segment assume cs:code1,ds:data1 assume cs:code1,ds:data1Main proc farMain proc far start:start:movmov ax,data1 ax,data1 movmo
25、v ds,axds,ax lab1 lab1:movmov ah,4ch ah,4ch intint 21h 21hMain Main endpendpCode1 ends Code1 ends End startEnd start;source module 2source module 2 extern var1:byte,var4:wordextern var1:byte,var4:wordextern var1:byte,var4:wordextern var1:byte,var4:word public var2 public var2 public var2 public var2
26、 Data2 segmentData2 segmentData2 segmentData2 segment var2 var2 var2 var2 dwdwdwdw?var3 var3 var3 var3 dwdwdwdw?Data2 ends Data2 ends Data2 ends Data2 ends code2 segment code2 segment code2 segment code2 segment assume cs:code2,ds:data2 assume cs:code2,ds:data2 assume cs:code2,ds:data2 assume cs:cod
27、e2,ds:data2Main proc farMain proc farMain proc farMain proc far start:start:start:start:movmovmovmov ax,data2 ax,data2 ax,data2 ax,data2 movmovmovmov ds,axds,axds,axds,ax movmovmovmov ah,4ch ah,4ch ah,4ch ah,4ch intintintint 21h 21h 21h 21hMain Main Main Main endpendpendpendpCode2 ends Code2 ends Co
28、de2 ends Code2 ends End startEnd startEnd startEnd start注意:注意:应先有应先有应先有应先有public public public public 定义,然后才有定义,然后才有定义,然后才有定义,然后才有extrnextrnextrnextrn说明说明说明说明;source module 3source module 3extern lab2:farextern lab2:farextern lab2:farextern lab2:farpublic lab2,lab3public lab2,lab3public lab2,lab3pub
29、lic lab2,lab3Data2 segmentData2 segmentData2 segmentData2 segment var2 var2 var2 var2 dwdwdwdw?var3 var3 var3 var3 dwdwdwdw?Data2 endsData2 endsData2 endsData2 endscode3 segmentcode3 segmentcode3 segmentcode3 segment assume cs:code3 assume cs:code3 assume cs:code3 assume cs:code3 Lab2:Lab2:Lab2:Lab2
30、:.Lab3:Lab3:Lab3:Lab3:.Code3 ends Code3 ends Code3 ends Code3 ends End End End End例例6.5 6.5 多个模块间的参数共享多个模块间的参数共享2/8/20232/8/20231717ch6ch6;Source model 1Source model 1EXTERN EXTERN proaddproadd:far:farDATA SEGMENT DATA SEGMENT commoncommon ARY ARY DW 100 DUP(?)DW 100 DUP(?)COUNTCOUNT DW 100 DW 100 S
31、UM SUM DW?DW?DATA ENDSDATA ENDSCODE1 SEGMENT MAIN PROC FARMAIN PROC FAR ASSUME CS:CODE1,DS:DATA ASSUME CS:CODE1,DS:DATASTART:START:PUSH DS PUSH DS SUB AX,AX SUB AX,AX PUSH AX PUSH AX MOV AX,DATA MOV AX,DATA CALL far CALL far ptrptr PROADD PROADD RET RETMAIN ENDPMAIN ENDPCODE1 ENDSCODE1 ENDS END STAR
32、TEND START主程序和子过程不在同一个模块的时参数传递方法一主程序和子过程不在同一个模块的时参数传递方法一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 ENDPCODE2 endsCODE2 ends END END;Source model 2Source model 2PUBLIC PROADDPUBLIC PROADDDATA SEGMENT DATA SEGMENT commoncomm
33、on ARY ARY DW 100 DUP(?)DW 100 DUP(?)COUNTCOUNT DW 100 DW 100 SUM SUM DW?DW?DATA ENDSDATA ENDSCODE2 SEGMENT PROADD PROC FARPROADD PROC FAR ASSUME CS:CODE2,DS:DATA ASSUME CS:CODE2,DS:DATA MOV AX,DATA MOV AX,DATA MOV DS,AX MOV DS,AX PUSH AX PUSH AX PUSH CX PUSH CX PUSH SI PUSH SI PUSH DI PUSH DI LEA S
34、I,ARY LEA SI,ARY MOV CX,COUNT MOV CX,COUNT XOR AX,AX XOR AX,AXNEXT:NEXT:ADD AX,SI ADD AX,SI ADD SI,2 ADD SI,2 (如例如例6.4_16.4_1的参数传递可利用段覆盖的参数传递可利用段覆盖)2/8/20232/8/20231818ch6ch6;Source model 1;Source model 1extern var1:word extern var1:word extern output:farextern output:farextern var2:wordextern var2:
35、wordpublic quitpublic quitlocal_datalocal_data segment segment varvar dwdw 5 5 local_datalocal_data ends endscode segmentcode segment assume assume cs:code,ds:local_datacs:code,ds:local_datamain proc farmain proc farstart:start:movmov ax,local_dataax,local_data movmov ds,axds,ax movmov bx,varbx,var
36、movmov ax,segax,seg var1 var1 movmov es,axes,ax add bx,es:var1 add bx,es:var1主程序和子过程不在同一个模块的时参数传递方法二主程序和子过程不在同一个模块的时参数传递方法二 movmov ax,segax,seg var2 var2 movmov es,axes,ax sub es:var2,50 sub es:var2,50 jmpjmp ouputouput quitquit:mov:mov ah,4ch ah,4ch intint 21h 21hmain main endpendpcode endscode end
37、s end start end start;Source model 2;Source model 2public var1public var1extdata1 segmentextdata1 segment var1 var1 dwdw 10 10 extdata1 endsextdata1 ends end end;source model 3;source model 3public var2public var2extern quit:farextern quit:farextdata2 segmentextdata2 segment var2 var2 dwdw 3 3 extda
38、ta2 endsextdata2 endspublic outputpublic outputprogram segmentprogram segment assume assume cs:programcs:program,ds:extdata2 ds:extdata2 outputoutput:jmpjmp quit quit program endsprogram ends end end(例例6.6 6.6 含三个源模块含三个源模块)2/8/20232/8/20231919ch6ch6;Source model 1;Source model 1Global Global segment
39、 publicsegment publicExtern var1:wordExtern var1:wordExtern var2:wordExtern var2:wordGlobal Global endsendsLocal_dataLocal_data segment segment Local_dataLocal_data ends endscodecode segment segment assume assume cs:codecs:code,dsds:local_datalocal_data,es:globales:globalmain proc farmain proc far主程
40、序和子过程不在同一个模块的时参数传递方法三主程序和子过程不在同一个模块的时参数传递方法三start:start:movmov x,local_datax,local_data movmov ds,axds,ax movmov ax,global ax,global movmov es,axes,ax movmov bx,es:var1 bx,es:var1 add es:var2,bx add es:var2,bx movmov ah,4ch ah,4ch intint 21h 21hmain main endpendpcodecode ends ends end start end star
41、t(例例6.7 6.7 含二个源模块含二个源模块);source model 2;source model 2Global segment publicGlobal segment public public var1 public var1 public var2 public var2 var1 var1 dwdw?var2 var2 dwdw?Global endsGlobal ends end end2/8/20232/8/20232020ch6ch66.1.5 6.1.5 增强功能的过程定义伪操作增强功能的过程定义伪操作ProcnameProcnameProcnameProcname
42、 PROC PROC PROC PROC attributes field attributes field attributes field attributes field USERUSERUSERUSER register list register list register list register list ,parameter field ,parameter field ,parameter field ,parameter field ProcnameProcnameProcnameProcname ENDP ENDP ENDP ENDPAttributes field(A
43、ttributes field(Attributes field(Attributes field(属性字段)属性字段)属性字段)属性字段)包括:包括:DistanceDistanceDistanceDistance:near near near near 、farfarfarfar Language type Language type Language type Language type:说明是那种高级语言的子程序说明是那种高级语言的子程序 如如pascalpascalpascalpascal 、c c c c 等。等。VisibilityVisibilityVisibilityVisi
44、bility :说明程序的可见性说明程序的可见性 是是privateprivateprivateprivate 或是或是publicpublicpublicpublic。ProloguePrologueProloguePrologue:是一个是一个宏的名字宏的名字宏的名字宏的名字,允许用宏来控制过程的入口或出口有关的代码,允许用宏来控制过程的入口或出口有关的代码USERUSERUSERUSER:该字段用来该字段用来指定用户所需保存和恢复的寄存器表指定用户所需保存和恢复的寄存器表指定用户所需保存和恢复的寄存器表指定用户所需保存和恢复的寄存器表。Parameter fieldParameter f
45、ieldParameter fieldParameter field:参数字段参数字段 ,允许用户指定该过程所用的参数允许用户指定该过程所用的参数允许用户指定该过程所用的参数允许用户指定该过程所用的参数 。标识符:类型标识符:类型标识符:类型标识符:类型 ,标识符:类型,标识符:类型,标识符:类型,标识符:类型 2/8/20232/8/20232121ch6ch6Data segmentAry db 10 dup(?)Count db 10Sum db?Data endsStack segment para stack stack db 100 dup(?)Stack endsCode1 se
46、gment assume cs:code1,ds:data,ss:stackMain proc farStart:push ds xor ax,ax push ax mov ax,data mov ds,ax Mov bx,offset ary Push bx Mov bx,offset count Push bx Mov bx,offset sum Push bx Call far Call far ptrptr proaddproadd mov al,sum mov dl,al mov ah,2 int 21h retMain endpCode1 ends对对例例6.4 6.4 采用用增强
47、功能过程定义伪操作实现采用用增强功能过程定义伪操作实现 2/8/20232/8/20232222ch6ch6Code2 segment assume cs:code2ProaddProadd proc far proc far push bp mov bp,sp push ax push cx push si push di mov si,bp+0ah mov di,bp+08h mov cl,di mov di,bp+06h xor al,alAgain:add al,si inc si dec cl jnz again mov di,al pop di pop si pop cx pop
48、ax pop bp ret 6ret 6Proadd endpCode2 ends end startCode2 segment assume cs:code2ProaddProadd proc proc pascalpascal useruser ax ax cxcx si si didi,parapara:wordword,parcparc:wordword,parspars:wordword mov si,para mov di,parc mov cl,di mov di,pars xor al,alAgain:add al,si inc si dec cl jnz again mov
49、di,al ret ret Proadd endpCode2 ends end startSumSum地址地址地址地址CountCount地址地址地址地址AryAry地址地址地址地址(bp)IPCS(bp+2)(bp+4)(bp+6)(bp+8)(bpbp +a+a)原始原始bp parspars paraparaparcparc局部局部局部局部变量变量变量变量disicxax(bp-2)2/8/20232/8/20232323ch6ch6Code2 segment assume cs:code2ProaddProadd proc far proc far push bp mov bp,sp
50、push ax push cx push si push di mov si,bp+0ah mov di,bp+08h mov cl,di mov di,bp+06h xor al,alAgain:add al,si inc si dec cl jnz again mov di,al pop di pop si pop cx pop ax pop bp ret 6ret 6Proadd endpCode2 ends end startCode2 segment assume cs:code2ProaddProadd proc proc C C useruser ax ax cxcx si si