汇编语言程序设计 156
三、模块间的变量传递
1、分别输入以下两个程序,保存文件名分别为L1.ASM和L2.ASM。 L1.ASM程序是主模块,内容如下:
STACK SEGMENT STACK
DW 10 DUP(?)
STACK ENDS
PUBLIC OPRN1,OPRN2,OPRN3 ;声明三个公共变量可以被外部模块使用 EXTRN ADDSUB:FAR ;声明外部模块定义的过程 DATA
SEGMENT OPRN1 DW 1234H OPRN2 DW 4321H OPRN3 DW ?,? DATA CODE
ENDS SEGMENT
ASSUME CS:CODE,DS:DATA,SS:STACK
START: MOV
MOV CALL MOV INT
CODE
ENDS END
START AX,DATA DS,AX
ADDSUB ;调用外部过程 AH,4CH 21H
L2.ASM 是子模块,内容如下:
EXTRN OPRN1:WORD,OPRN2:WORD,OPRN3:WORD
;声明本模块中可以引用的公共变量及调用类型 PUBLIC ADDSUB ;声明可以被外部模块调用的过程 CODE
SEGMENT
ASSUME CS:CODE
ADDSUB PROC
PUSH PUSH
FAR BX AX
MOV AX,OPRN1 MOV BX,OPRN2 ADD AX, BX
MOV OPRN3,AX ;存放两个参数的和
汇编语言程序设计实验指导 157
MOV AX, OPRN1 SUB AX,BX
MOV OPRN3[2],AX ;存放两个参数的差 POP POP RET
ADDSUB ENDP CODE
ENDS END
2、分别汇编以上两个源文件,生成对应的OBJ文件,再链接这两个目标文件得到 EXE可执行程序。
3、用DEBUG工具调试此可执行程序,察看文件链接后代码段的内容构成,用T命令 单步执行程序,并注意观察运算结果。
AX BX
汇编语言程序设计 158
*实验十 汇编语言综合实验
实验目的
1、掌握C语言和汇编语言的混合编程方法; 2、了解了解磁盘文件的读写方法;
实验内容及步骤
一、汇编语言和C语言混合编程
1、输入以下C语言程序,其功能为演示在中模式下TC程序调用汇编语言子函数的过程,
保存的文件名为MAIN.C #include \
extern int subs(int,int); /* 声明subs为外部函数*/ main()
{ int x=0;int y=0; scanf(\
printf(\}
2、输入以下汇编语言子程序,其功能为实现两个整数相减,保存程序文件名为SUB.ASM
.MODEL MEDIUM .CODE
PUBLIC _SUBS _SUBS PROC FAR
PUSH BP MOV BP,SP
MOV AX,[BP+6] ;AX是被减数 SUB AX,[BP+8] ;相减
POP BP ;恢复BP寄存器的内容 RET _SUBS ENDP END
3、在DOS提示符下输入如下两条命令:
ml /c sub.asm
;把SUB.ASM 汇编成SUB.OBJ文件,但不链接(注意大小写)。 tcc –mm –Iinclude –Llib main.c sub.obj
汇编语言程序设计实验指导 159
;该命令按照中型模式链接程序,直接把MAIN.C编译成目标文件,并和SUB.OBJ链 接生成MAIN.EXE程序。
4、运行MAIN.C程序,输入两个整数,观察输出结果。
5、分析在SUB子程序中取得参数为什么用BP+6和BP+8地址获得?
二、磁盘文件读写实验
1、在D:\\建立一个文本文件F1.TXT,并在文件中输入内容“南京航空航天大学 信息科学与技术学院欢迎您!”,也可以输入其它信息。 2、输入以下汇编语言文件,并汇编、链接通过。 .model small .stack .DATA
HANDLE DW ?
filename1 db 'd:\\f1.txt',0 filename2 db 'd:\\f2.txt',0 temp db 1000 dup (?) .code .startup
lea dx,filename1 mov al,0 mov ah,3dh
int 21h ;打开F1.TXT文件 jc error
mov handle,ax ;文件代号存入HANDLE mov ah,3fh mov bx,handle mov cx,34
lea dx,temp ;读取打开的文件,读字节数在CX中 int 21h ;读取的内容存放在TEMP中 jc error
mov bx,handle
mov ah,3eh ;关闭该文件 int 21h
mov ah,3ch mov cx,0
lea dx,filename2
int 21h ;建立F2.TXT文件 jc error
mov handle,ax

