实验

mac2022-06-30  7

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

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

一、实验目的

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

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

二、实验准备

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

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

三、实验内容

教材 133 实验 5

(1)ex5_1

assume cs:code, ds:data, ss:stackdata segment dw 0123h, 0456h, 0789h, 0abch, 0defh, 0fedh, 0cbah, 0987hdata ends

stack segment dw 0, 0, 0, 0, 0, 0, 0, 0stack ends

code segmentstart: 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 endsend start

编译链接后运行代码:

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

 

(2)ex5_2

assume cs:code, ds:data, ss:stackdata segment dw 0123h, 0456hdata ends

stack segment dw 0, 0stack ends

code segmentstart: 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 endsend start

 

 

(3)ex5_3

assume cs:code, ds:data, ss:stack

code segmentstart: 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 endsdata segment dw 0123h, 0456hdata ends

stack segment dw 0,0stack endsend 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的含义是定义字型数据。

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

 

转载于:https://www.cnblogs.com/20171308170-hc/p/10055666.html

相关资源:一个简单的cisco交换机路由路模拟工具RouteSim
最新回复(0)