实验

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

计软院 专业 年级 2017 级 4 班次  胡毳  姓名 201713081702 学号

一、实验目的

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段中。

代码如下:运行结果如下:

四:实验总结:

1、mov ax,data 的含义是将名称为data的段的段地址送入ax。

2、执行g指令时,应该运行到该指令的前一条。

3、dw的含义是定义字型数据。

对于操作还不是很熟练,以后还是要多多练习。

 

posted @ 2018-12-02 22:03  胡毳  阅读(176)  评论(0)    收藏  举报