实验五报告

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

计软院 专业 年级 2017 级 4 班次  任心怡  姓名 20171308152 学号

一、实验目的

1. 理解和掌握将数据、代码、栈放入不同段的程序的编写和调试

2. 理解具有多个段的汇编源程序对应的目标程序执行时,内存分配方式

二、实验准备

1. 结合第 6 章教材和课件,复习第 6 章内容

2. 复习第 3 章「栈」的知识

三、实验内容

教材 133 实验 5

(1)ex5_1

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

编译链接后运行代码:

程序返回前,data段中的数据截图如下:

(2)ex5_2

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

(3)ex5_3

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

操作步骤同上得到实验结果截图如下:

 

(4)如果将(1)、(2)、(3)题中的最后一条伪指令“end start"改成“end”(也就是说,不指名程序的入口),则哪个程序仍然可以正确执行?请说明原因

   (3)的代码可以正确执行。如果去掉start,dw定义的字节就会被当做代码来执行,而(3)中使用的data段来实现的,所以可以实现。

(5)编写code段中代码,将a段和b段中的数据依次相加,将结果送到c段。

经过编辑链接,运行代码验证结果,截图如下:

验证可以实现。

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

代码如下:

 

 

运行结果如下:

 

 四:实验总结

在g指令来进行反汇编的时候一定要注意是运行到该条指令的前一条。

用u指令时,要看cx的值,当然不是cx是多少就写到多少,具体的值要看具体的题目。在实验一中,因为dw的定义已经占用了一部分代码,所以要去掉这部分这样。

还有就是要多练习,在写代码是将数据段,栈段,代码段分开写。

 

posted @ 2018-12-02 20:35  给你比个略略略  阅读(157)  评论(0编辑  收藏  举报