《汇编语言程序设计》
实 验 报 告
院 系
专 业 年 级 学 号 姓 名
目录
实验1 Masm6.11的使用方法 ............................................ 错误!未定义书签。 实验2 比较两个字符串的大小 ............................................................................ 9 实验3 求学生名次 .............................................................................................. 16 实验4 求员工年工作量 ...................................................................................... 29 实验5 子程序和主程序之间的参数传递 .......................................................... 37 实验6 C语言和汇编语言混合编程下的排序算法 ......................................... .42 实验7 采用汇编语言对C语言函数调用的方法求平均数 .............. 46
I
实验一 Masm6.11的使用方法
一、实验目的
1、创建一个新的汇编语言程序,熟练掌握汇编语言开发工具的使用方法,并对开发环境中一些坏境变量进行设置。
2、创建一个工程文件,对该工程文件进行编译,连接,并运行; 3、对建立的工程文件进行调试,在运行过程中查看各个寄存器的值,内存单元的值等。
二、实验环境
该试验包括的硬件和软件条件如下: 1、硬件环境
(1)Intel i5 3317U (2)内存4G 2、软件环境
(1)Window XP Professor (2)MASM6.11开发软件
三、实验步骤
1、将Masm6.11安装程序拷贝到D盘根目录下,并执行d:\\Masm611目录下Setup.exe文件,按照安装提示将程序安装到C盘根目录。
2、将C:\\masm611\\Bin目录下的所有文件拷贝到C:\\Masm611\\binr目录下,将C:\\Masm611\\help目录下的所有文件拷贝到c:\\Masm61\\binr目录下。 3、执行C:\\Masm611\\Binr目录下的pwb.exe文件,打开开发环境。 4、在PWB编辑窗口中输入实验1.1中的程序,并保存为test.asm文件。 5、执行Project菜单下New Project子菜单创建一个新的工程文件,并命名为test.mak,将test.asm文件加入到该工程文件中。
6、执行Project下Build子菜单编译连接该工程文件,并运行该可执行程序,观察程序执行的结果。
7、执行Run菜单下Debug子菜单,进入调试环境。
8、在程序的如下位置设置断点,并按要求观察寄存器堆栈或者内存单元的值。
Data segment
Msgl db \
第 1 页
Num db 0
EnMsg db 0ah,0dh,'$'
Msg2 db \ Msg3 db \ avg db 0
ascavg db 0,0,'$' Data ends
Stack segment para stack db 20h dup(0) Stack ends
code segment
Assume Cs:code,Ss:stack,ds:Data
Start: mov ax,data mov ds,ax
lea dx,Msgl ;此行设置断点,观察DS所指示的数据段的情况 mov ah, 09h int 21h
Call Numproc ;此行设置断点,观察屏幕输出,并观察堆栈的变化 mov num,bl ;此行设置断点,观察bl的值,并观察堆栈的变化 lea dx,EnMsg mov ah,09h int 21h lea dx,Msg2 mov ah,09h int 21h
call Avgproc ;此行设置断点,观察屏幕输出信息
lea dx,EnMsg ;此行设置断点,观察avg所对应的存储单元的值 mov ah,09h int 21h
lea dx, Msg3
mov ah,09h int 21h
call bta ;此行设置断点,观察屏幕输出信息
mov ah,4ch ;此行设置断点,观察ascavg所对应的存储单元的值及屏 ;幕输出信息 int 21h
Numproc proc push ax push cx push dx
第 2 页
lea dx,EnMsg mov ah,09h int 21h mov bl,0 lop1: mov ah,01h
int 21h ;设置断点观察al寄存器的值 cmp al,0dh jz lop2 cmp al,'0' jl lop1 cmp al, '9' ja lop1 sub al,30h mov cl,al mov al,bl mov ch,10
mul ch
mov bl,al ; add bl,cl ; jmp lop1 lop2: pop dx pop cx pop ax ret Numproc endp
Avgproc proc push ax push cx
xor dx,dx ; mov cl,num ;lop3: call Numproc xor ax,ax mov al,bl add ax,dx Div num
add avg,al ; xor dx,dx mov dl,ah sub cl,1 jnz lop3
pop ax ; pop cx
ret ;设置断点观察al寄存器的值 设置断点观察bl寄存器的值 设置断点观察堆栈值的变化 设置断点观察cl寄存器的值 设置断点观察avg存储单元的值 设置断点观察avg存储单元的值 设置断点观察堆栈值的变化
第 3 页