实验4汇编实验.docx

上传人:b****4 文档编号:26903669 上传时间:2023-06-23 格式:DOCX 页数:13 大小:140.87KB
下载 相关 举报
实验4汇编实验.docx_第1页
第1页 / 共13页
实验4汇编实验.docx_第2页
第2页 / 共13页
实验4汇编实验.docx_第3页
第3页 / 共13页
实验4汇编实验.docx_第4页
第4页 / 共13页
实验4汇编实验.docx_第5页
第5页 / 共13页
点击查看更多>>
下载资源
资源描述

实验4汇编实验.docx

《实验4汇编实验.docx》由会员分享,可在线阅读,更多相关《实验4汇编实验.docx(13页珍藏版)》请在冰豆网上搜索。

实验4汇编实验.docx

实验4汇编实验

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

学期:

2017至2018第2学期2018年4月4日

课程名称:

汇编语言专业:

信息与计算科学班级:

2015级_5班

实验编号:

4实验项目:

编写、调试具有多个段的程序

指导教师:

冉茂华

姓名:

黄玉含学号:

2015060512实验成绩:

 

1、将下面的程序编译、连接,用Debug加载、跟踪,然后回答问题。

assumecs:

code,ds:

data,ss:

stack

datasegment

dw0123h,0456h,0789h,0abch,0defh,0fedh,0cbah,0987h

dataends

stacksegment

dw0,0,0,0,0,0,0,0

stackends

codesegment

start:

movax,stack

movss,ax

movsp,16

movax,data

movds,ax

pushds:

[0]

pushds:

[2]

popds:

[2]

popds:

[0]

movax,4c00h

int21h

codeends

endstart

执行结果如下:

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

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

还未执行时的数据:

执行程序后的数据:

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

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

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

分析:

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

2、将下面的程序编译、连接,用Debug加载、跟踪,然后回答问题。

assumecs:

code,ds:

data,ss:

stack

datasegment

dw0123h,0456h

dataends

stacksegment

dw0,0

stackends

codesegment

start:

movax,stack

movss,ax

movsp,16

movax,data

movds,ax

pushds:

[0]

pushds:

[2]

popds:

[2]

popds:

[0]

movax,4c00h

int21h

codeends

endstart

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

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

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

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

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

namesegment

......

nameends

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

分析:

段在程序加载后实际占据的空间以16为单位。

3、将下面的程序编译、连接,用Debug加载、跟踪,然后回答问题。

assumecs:

code,ds:

data,ss:

stack

codesegment

start:

movax,stack

movss,ax

movsp,16

movax,data

movds,ax

pushds:

[0]

pushds:

[2]

popds:

[2]

popds:

[0]

movax,4c00h

int21h

codeends

datasegment

dw0123h,0456h

dataends

stacksegment

dw0,0

stackends

endstart

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

01230456

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

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

分析:

程序按顺序执行。

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

请说明原因。

答:

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

分析:

如果不指名start入口地址,并且使用end替换endstart,程序仍可以执行。

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

5、程序如下,编写code段中的代码,将a段和b段中的数据依次相加,将结果存在c段中。

assumecs:

code

asegment

db1,2,3,4,5,6,7,8

aends

bsegment

db1,2,3,4,5,6,7,8

bends

csegment

db0,0,0,0,0,0,0,0

cends

codesegment

start:

?

codeends

endstart

答:

代码如下:

assumecs:

code

asegment

db1,2,3,4,5,6,7,8

aends

bsegment

db1,2,3,4,5,6,7,8

bends

csegment

db0,0,0,0,0,0,0,0

cends

codesegment

start:

movax,c

movds,ax

movcx,8

movbx,0

movax,a

moves,ax

movax,b

movss,ax

s:

moval,es:

[bx]

addal,ss:

[bx]

mov[bx],al

incbx

loops

movax,4c00h

int21h

codeends

endstart

6、编写code段中的代码,用push指令将a段中的前8个字型数据逆序存放到b段中。

assumecs:

code

asegment

dw1,2,3,4,5,6,7,8,9,0ah,0bh,0ch,0dh,0eh,0fh,0ffh

aends

bsegment

dw0,0,0,0,0,0,0,0

bends

codesegment

start:

?

codeends

endstart

代码如下:

assumecs:

code

asegment

dw1,2,3,4,5,6,7,8,9,0ah,0bh,0ch,0dh,0eh,0fh,0ffh

aends

bsegment

dw0,0,0,0,0,0,0,0

bends

codesegment

start:

movax,a

movds,ax

movax,b

movss,ax

movsp,10h

movcx,8

movbx,0

s:

push[bx]

addbx,2

loops

movax,4c00h

int21h

codeends

endstart

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 经管营销 > 公共行政管理

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1