实验4汇编实验

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

数学与软件科学学院实验报告

学期:2017至 2018第 2 学期 2018年4月4日课程名称: 汇编语言专业:信息与计算科学班级: 2015级_5班实验编号:4实验项目:编写、调试具有多个段的程序

指导教师:冉茂华

姓名:黄玉含学号:2015060512实验成绩:

1、将下面的程序编译、连接,用Debug加载、跟踪,然后回答问题。assume cs: code, ds:data, ss:stack

data segment

dw 0123h,0456h,0789h,0abch,0defh,0fedh,0cbah,0987h

data ends

stack segment

dw 0,0,0,0,0,0,0,0

stack ends

code segment

start:

mov ax,stack

mov ss,ax

mov sp,16

mov ax,data

mov ds,ax

push ds:[0]

push ds:[2]

pop ds:[2]

pop ds:[0]

mov ax,4c00h

int 21h

code ends

end start

执行结果如下:

○1说明了cs=___076c_____,ss=____076b______,ds=_______076a_________

(1)、CPU执行程序,程序返回前,data段中的数据是多少?

还未执行时的数据:

执行程序后的数据:

○2不变,因为程序加载进去段内容就已经固定。

(2)、CPU执行程序,程序返回前,cs=___076c_____,ss=____076b______,ds=_______076a_________。

(3)、设程序加载后,code段的段地址为X,则data段的段地址为___X-2_____,stack段的段地址为____x-1______。

分析:程序段的段地址总是16的倍数且程序在内存中顺序加载。

2、将下面的程序编译、连接,用Debug加载、跟踪,然后回答问题。assume cs: code, ds:data, ss:stack

data segment

dw 0123h,0456h

data ends

stack segment

dw 0,0

stack ends

code segment

start:

mov ax,stack

mov ss,ax

mov sp,16

mov ax,data

mov ds,ax

push ds:[0]

push ds:[2]

pop ds:[2]

pop ds:[0]

mov ax,4c00h

int 21h

code ends

end start

(1)、CPU执行程序,程序返回前,data段中的数据是多少?

○1返回前的data段中内容为0123h,0456h,说明在编译链接时data段已经加载进内存。

(2)、CPU执行程序,程序返回前,cs=____076c____,ss=___076B_______,ds=_________076a_______。

(3)、设程序加载后,code段的段地址为X,则data段的段地址为___x-2_____,stack段的段地址为___x-1_______。

(4)、对于如下定义的段:

name segment

......

name ends

如果段中的数据占N个字节,则程序加载后,该段实际占有的空间为((N-1)/16+1)*16。分析:段在程序加载后实际占据的空间以16为单位。

3、将下面的程序编译、连接,用Debug加载、跟踪,然后回答问题。assume cs: code, ds:data, ss:stack

code segment

start:

mov ax,stack

mov ss,ax

mov sp,16

mov ax,data

mov ds,ax

push ds:[0]

push ds:[2]

pop ds:[2]

pop ds:[0]

mov ax,4c00h

int 21h

code ends

data segment

dw 0123h,0456h

data ends

stack segment

dw 0,0

stack ends

end start

(1)、CPU执行程序,程序返回前,data段中的数据是多少?01 23 04 56

(2)、CPU执行程序,程序返回前,cs=___076a_____,ss=_____076e_____,ds=_____076d___________。

(3)、设程序加载后,code段的段地址为X,则data段的段地址为__x+3______,stack段的

段地址为___x+4_______。

分析:程序按顺序执行。

4、如果将1、2、3题中的的最后一条伪指令“end start”改为“end”,则哪个程序仍然可以正确的执行?请说明原因。

答:第3题的程序,因为程序顺序执行。

分析:如果不指名start入口地址,并且使用end替换end start,程序仍可以执行。因为如果不指名入口,程序则从加载进内存的第一个单元起开始执行,但因为程序中有部分是作为数据使用的,如果不指名入口,cpu会将数据当作汇编指令执行,所以一般要指明入口地址。

相关文档
最新文档