汇编实验——03
实验三 存储器分段的理解
一、实验目的
熟悉程序框架;理解存储器分段的本质及不同段之间的关系。
二、实验题
- 将下面的程序编译链接,用debug跟踪,然后回答问题。
ASSUME CS:CODES,DS:DATAS,SS:STACKS
DATAS SEGMENT
DW 0123H, 0456H, 0789H, 0ABCH, 0DEFH, 0FEDH, 0CBAH, 0987H
DATAS ENDS
STACKS SEGMENT
DW 1,1,1,1,1,1,1,1
STACKS ENDS
CODES SEGMENT
START:
MOV AX,STACKS
MOV SS,AX
MOV SP,16
MOV AX,DATAS
MOV DS,AX
PUSH DS:[0]
PUSH DS:[2]
POP DS:[2]
POP DS:[0]
MOV AH,4CH
INT 21H
CODES ENDS
END START
⑴CPU执行程序,程序返回前,DATAS段中的数据为多少?将截图附在下面。
Datas段中的内容不变。
⑵CPU执行程序,程序返回前,CS = 0772H、SS = 0771H、DS = 0770H。
⑶设程序加载后,CODES段的段地址为X,则DATAS段的段地址为X-2,STACKS段的段地址为X-1。将截图附在下面。
2.将下面的程序编译链接,用debug跟踪,然后回答问题。
ASSUME CS:CODE, DS:DATA, SS:STACK
DATA SEGMENT
DW 0123H, 0456H
DATA ENDS
STACK SEGMENT
DW 1,1
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:[0]
POP DS:[2]
MOV AX, 4C00H
INT 21H
CODE ENDS
END START
⑴CPU执行程序,程序返回前,DATAS段中的数据为多少?将截图附在下面。
Datas的输出内容在红框中。
⑵CPU执行程序,程序返回前,CS =0772H 、SS =0771H 、DS =0770H 。
⑶设程序加载后,CODES段的段地址为X,则DATAS段的段地址为X-2,STACKS段的段地址为X-1。将截图附在下面。
⑷对于如下定义的段:
NAME SEGMENT
……
NAME ENDS
如果段中的数据占N个字节,则程序加载后,该实际占有的空间为 。
观察以上实验结果可知,当我们数据小于等于16字节时,系统分配的内存为16字节,当我们输入的数据大于十六字节的时候,系统分配的内存为(x/16+1)*16
(这里的除法是整除,不是浮点数除法)
3. 将下面的程序编译链接,用debug跟踪,然后回答问题。
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:[0]
POP DS:[2]
MOV AX, 4C00H
INT 21H
CODE ENDS
DATA SEGMENT
DW 0123H, 0456H
DATA ENDS
STACK SEGMENT
DW 1,1
STACK ENDS
END START
⑴CPU执行程序,程序返回前,DATAS段中的数据为多少?
⑵CPU执行程序,程序返回前,CS =0770H、SS = 0774H、DS = 0773H。
⑶设程序加载后,CODES段的段地址为X,则DATAS段的段地址为X+3,STACKS段的段地址为X+4。将截图附在下面。
4.如果把1、2、3题中的最后一条伪指令“END START”改为“END”(也就是说不指明程序入口),则哪个程序能正确执行?
答:第三条程序还可以正常执行,因为如果不指明程序指令的开始入口,前两个是数据段,只有从第三条开始是指令代码,但是第三个将代码段定义在开头,两个数据段定义在后面,所以可以正常执行。
三、实验题
- 完成下面的程序,利用栈,将程序中定义的数据逆序存放。
ASSUME CS:CODES,DS:DATAS,SS:STACKS
CODESG SEGMENT
DW 0123H, 0456H,0789H,0ABCH,0DEFH,0FEDH,0CBAH,0987H
DW 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
CODESG ENDS
assume cs:code,ds:a,ss:b
a segment
DW 0123H, 0456H,0789H,0ABCH,0DEFH,0FEDH,0CBAH,0987H
a ends
b segment
DW 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
b ends
code segment
start: mov ax,a
mov ds,ax
mov ax,b
mov bx,0
mov ss,ax
mov sp,16
mov cx,8
s: push [bx]
add bx,2
loop s
mov bx,0
mov cx,8
t: pop [bx]
add bx,2
loop t
mov ax,4c00h
int 21h
code ends
end start
通过观察实验结果知,程序正常运行返回后,数据完成逆序存放。
四、实验报告
要求: 1.每步操作过程及所用指令;2.用截图方式反应指令执行前后的相关寄存器或存储单元内容的变化,并对所得结果进行分析。
本文来自博客园,作者:TCcjx,转载请注明原文链接:https://www.cnblogs.com/tccjx/p/16190407.html