汇编语言与DOS系统实验报告
一、实验目的
1、掌握x86体系段式内存组织方式,了解如何用程序指令访问不同的内存空
间
2、了解DOS系统的基本操作
3、掌握汇编语言的编译和调试方法
二、实验条件
1、DOS操作系统平台
三、实验原理
1、x86实模式下内存采用分段的组织方式,将20位的地址空间分为16位的
段地址和16位的偏移地址,表示为“段地址:偏移地址”的形式,实际物理地址=段地址×16+偏移地址。
2、DOS系统基本操作命令:
(1)cd命令进入磁盘或文件夹
(2)dir命令列出目录下的文件
(3)makedir创建目录
(4)del删除文件
(5)copy复制文件
(6)rename文件重命名
3、汇编语言编译命令:
(1)edit命令编辑程序
(2)masm生成目标文件
(3)link链接生成可执行文件
(4)输入文件名运行程序
4、程序调试方法
使用debug命令调试程序,常用的调试参数有:
(1)-u反汇编生成程序的汇编代码
(2)-d查看内存地址的内容
(3)-p/t单步调试
(4)-g设置断点
(5)-e修改指定地址内容
四、实验内容
1、写出A+B problem的汇编代码,使用编译命令生成可执行文件并使用
debug加载可执行程序。
实验代码如下:
DATA SEGMENT
ADDER1 DB 35H
ADDER2 DB 48H
SUM DB ?
DATA ENDS
CODE SEGMENT
ASSUME CS:CODE,DS:DATA
START: MOV AX,DATA
MOV DS,AX
MOV AL,ADDER1
ADD AL,ADDER2
MOV SUM,AL
MOV AX,4C00H
INT 21H
CODE ENDS
END START
首先将源文件使用masm命令和link命令生成可执行文件,使用debug命令调试程序,使用-u参数显示汇编代码,g命令设置断点到MOV SUM,AL指令处,此时使用d ds:0000即可在内存中显示两个加数以及两个数的和的数值,可以使用-e命令修改参数。
2、增加变量N,实现N个数字的加法运算,实验中N设置为4,实验代码
如下:
DATA SEGMENT
ADDER1 DB 35H
ADDER2 DB 48H
ADDER3 DB 20H
ADDER4 DB 30H
SUM DB ?
DATA ENDS
CODE SEGMENT
ASSUME CS:CODE,DS:DATA
START: MOV AX,DATA
MOV DS,AX
MOV AL,ADDER1
ADD AL,ADDER2
ADD AL,ADDER3
ADD AL,ADDER4
MOV SUM,AL
MOV AX,4C00H
INT 21H
CODE ENDS
END START
编译与debug操作与1类似。
3、将加法运算实现为函数调用,使用call命令调用函数,实验代码如下:
DATA SEGMENT
ADDER1 DB 35H
ADDER2 DB 48H
SUM DB ?
DATA ENDS
CODE SEGMENT
ASSUME CS:CODE,DS:DATA
START: MOV AX, DATA
MOV DS,AX
CALL ADDER
MOV AX,4C00H
INT 21H
ADDER PROC NEAR
MOV AL,ADDER1
ADD AL,ADDER2
MOV SUM,AL
INT 21H
RET
ADDER ENDP
CODE ENDS
END START
代码中添加了adder函数用来计算两数之和,使用call命令调用adder函数来计算数字之和。
编译和debug过程与1类似,进行debug操作查看寄存器和栈中数据的变化可以观察出,在call命令调用时,系统将call指令的下一条指令的地址存入了寄存器sp中,随后该地址被压入栈中,调用结束时返回地址从栈中弹出存入sp中,然后传给ip寄存器,程序从ip寄存器指向的地址继续执行。
五、实验结论
1、汇编代码通过masm、link命令生成exe可执行文件
2、生成的可执行文件可以通过debug命令设置断点或者单步调试来观察每
一步执行过程中寄存器的状态、内存中数据的取值等
3、函数调用时系统会将返回地址入栈,调用结束时将返回地址出栈并传递给
寄存器ip,程序会继续执行函数调用的下一条指令
六、实验体会
1、掌握了DOS系统的基本操作命令
2、通过A+B Problem的实验了解了汇编程序的开发过程,熟悉了程序调试
的基本方法
3、加深了对于函数调用过程中返回地址的压栈出栈操作的理解
七、思考题
1、给ds寄存器赋值是因为程序开始时设置了数据段的adder1和adder2两
个数据,在进行debug时可以使用-dds:0000来查看两个加数与它们两个的和的取值
2、对Debug软件的基本功能比较满意,目前没有增加其他功能的需求。