汇编语言实验5.docx
《汇编语言实验5.docx》由会员分享,可在线阅读,更多相关《汇编语言实验5.docx(10页珍藏版)》请在冰豆网上搜索。
![汇编语言实验5.docx](https://file1.bdocx.com/fileroot1/2023-1/29/fe83c2d0-7b87-4afc-bd1c-085a07912ff2/fe83c2d0-7b87-4afc-bd1c-085a07912ff21.gif)
汇编语言实验5
计算机科学系实验报告(首页)
一、实验目的:
掌握具有代码段、数据段、堆栈段等多个段程序的编写和调试
二、实验内容、程序清单及运行结果
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
(1)CPU执行程序,程序返回前,data段中的数据为多少?
执行程序后,data段中的数据不变,为原始数据。
(2)CPU执行程序,程序返回前,cs=0772H,ss=0771H,ds=0770H.
(3)程序加载后,code段地址设为X,则data段地址为(x-2),stack段的段地址为(X-1).
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段有16个字节空间,前两个字数据不变,其余为0。
(2)CPU执行程序,程序返回前,cs=0772H,ss=07771H,ds=0771H。
(3)程序加载后,code段地址设为X,则data段地址为(x-2),stack段的段地址为(X-1)。
(4)对于如下定义的段:
namesegment
......
nameends
如果段中数据位N个字节,程序加载后,该段实际占据空间为[N/16]Byte。
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段中的数据为多少?
data段数据未变。
(2)CPU执行程序,程序返回前,cs=0070H,ss=0074H,ds=0073H。
(3)程序加载后,code段地址设为X,则data段地址为(x+3),stack段的段地址为(X+4)。
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:
movax,a
movds,ax
movax,b
movss,ax
movax,c
moves,ax
movbx,0
movcx,8
s:
moval,ds:
[bx]
addal,ss:
[bx]
moves:
[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:
movax,a
movds,ax
movax,b
movss,ax
movsp,10h
movbx,0
movcx,8
s:
pushds:
[bx]
addbx,2
loops
movax,4c00h
int21h
codeends
endstart
三、实验结论、实验体会
将程序中的数据、代码、栈放入不同的段,可以是编写的程序更加有逻辑性,他人容易看懂,也更好用地debug进行调试,跟踪程序的执行过程。