实验 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