编辑: 哎呦为公主坟 2019-07-18

四、子程序参数的传递 Crlf proc near mov dl,0dh mov ah,2 int 21h mov dl,0ah mov ah,2 int 21h retCrlf endp

四、子程序参数的传递 如过程和调用程序在同一源文件中,则过程可直接访问模块中的变量 例6.4主程序MAIN和子程序PROADD在同一源文件中,要求用子程序PROADD累加数组中的所有元素,并把和(不考虑溢出的可能性)送到指定的存储单元中去.在这里,子程序PROADD直接访问模块的数据区.

四、子程序参数的传递 多个模块之间的参数传递 PUBLIC symbol[在一个模块中定义的符号(包括变量、标号、过程名等)在提供给其它模块使用时,必须要使用PUBLIC定义该符号为外部符号. EXTRN symbol name:type[在另一个模块中定义而要在本模块中使用的符号必须使用EXTRN伪操作,如符号为变量,则类型应该为byte,word,dword等;

如符号为标号或过程名,则类型应为near,far

四、子程序参数的传递 例6.5Extrn var:word,lab2:farPublic var1,var4,lab1Data1 segment var1 db ? var3 dw ? var4 dw ?Data1 endsCode1 segment assume cs:code1,ds:data1Main proc farStart:mov ax,data1 mov ds,ax ……..……..Lab1:mov ax,4c00h int 21hMain endpCode ends end start

四、子程序参数的传递 Extrn var1:byte,var4:wordPublic var2Data2 segment var2 dw

0 var3 db

5 dup(?)Data2 endsCode2 segment assume cs:code2,ds:data2………Code2 ends end Extrn lab1:farPublic lab2,lab3Code3 segment assume cs:code3 ……… lab2:lab3:Code3 ends end

四、子程序参数的传递 结构伪操作STRUC struct_name STRUC (DB、DW、DD等伪操作) struct_name ENDSSTRUC伪操作只能定义一种结构模式,它并不能把有关信息存入存储器,为了达到这一目的,必须使用结构预置语句,结构顶置语句的格式是: PERSONAL_DATA STRUC INITIALS DB 'XX' LAST_NAME DB

5 DUP(?) ID DB 0,

0 AGE DB ? WEIGHT DW ?PERSONAL_DATA ENDS 例:EMPLOYEE_1 PERSONAL_DATA EMPLOYEE_2 PERSONAL_DATA < >EMPLOYEES PERSONAL_DATA

100 DUP (< >) Variable structure name (preassignment specifications)

四、子程序参数的传递 MOV AL, EMPLOYEE_1.LAST_NAME[SI]MOV AL, [BX].LAST_NAME[SI]MOV AL, EMPLOYEES+4*12.LAST_NAME[SI] §6.2 嵌套与递归子程序 嵌套:子程序调用其他子程序递归:子程序调用自己,该情况要合理设置出口参数,否则会造成程序死锁 §6.2 嵌套与递归子程序 例:编制计算N! (N>=0)的程序. N!= N* (N-1) * (N-2) * … * 1求N!本身是一个子程序,由于N!是N和(N-1)!的乘积,所以为求(N-1)!必须递归调用求N!的子程序,但每次调用所使用的参数都不相同. §6.2 嵌套与递归子程序 data_seg segment n_v dw ?result dw ?data_seg endsstack_seg segmentdw

128 dup(0)tos label wordstack_seg ends code1 segment main proc far assume cs:code1,ds:data_seg,ss:stack_segstart: mov ax,stack_seg mov ss,ax mov sp,offset tos push ds sub ax,ax push ax mov ax,data_seg mov ds,ax §6.2 嵌套与递归子程序 mov bx,offset result push bx mov bx,n_v push bx call far ptr fact ret main endp code1 ends code segmentframe struc save_bp dw ? save_cs_ip dw

2 dup(?) n dw ? result_addr dw ? frame ends assume cs:code fact proc far push bp mov bp,sp push bx push ax mov bx,[bp].result_addr mov ax,[bp].n cmp ax,0 je done push bx dec ax push ax call far ptr fact mov bx,[bp].result_addrmov ax,[bx] mul [bp].n jmp short returndone: mov ax,1 return: mov [bx], ax pop ax pop bx pop bp ret

4 fact endp code ends end start §6.2 嵌套与递归子程序 6.3子程序举例 例6.11 P231例6.12 P237下课自学 §6.4 DOS系统功能调用 裸机 汇编语言程序 系统功能调用 21H号中断是DOS提供给用户的用于调用系统功能的中断,它有近百个功能供用户选择使用,主要包括设备管理、目录管理和文件管理三个方面的功能ROM-BIOS也以中断服务程序的形式,向程序员提供系统的基本输入输出程序汇编语言程序设计需要采用系统的各种功能程序充分利用操作系统提供的资源是程序设计的一个重要方面,需要掌握 功能调用的格式 通常按照如下4个步骤进行:在AH寄存器中设置系统功能调用号在指定寄存器中设置入口参数执行指令INT 21H实现中断服务程序的功能调用根据出口参数分析功能调用执行情况 字符输出的功能调用 DOS功能调用INT 21H功能号:AH=02H入口参数:DL=字符的ASCII码功能:在显示器当前光标位置显示给定的字符,光标右移一个字符位置.如按Ctrl-Break或Ctrl-C则退出 ;

下载(注:源文件不在本站服务器,都将跳转到源网站下载)
备用下载
发帖评论
相关话题
发布一个新话题