lab1汇编语言与DOS系统实验报告
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
汇编语言与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软件的基本功能比较满意,目前没有增加其他功能的需求