lab1汇编语言与DOS系统实验报告

合集下载
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 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软件的基本功能比较满意,目前没有增加其他功能的需求

相关文档
最新文档