汇编实验——03

实验三 存储器分段的理解
一、实验目的
熟悉程序框架;理解存储器分段的本质及不同段之间的关系。
二、实验题

  1. 将下面的程序编译链接,用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段中的数据为多少?将截图附在下面。
    image

Datas段中的内容不变。
⑵CPU执行程序,程序返回前,CS = 0772H、SS = 0771H、DS = 0770H。
image

⑶设程序加载后,CODES段的段地址为X,则DATAS段的段地址为X-2,STACKS段的段地址为X-1。将截图附在下面。
image
image
image

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段中的数据为多少?将截图附在下面。
image

Datas的输出内容在红框中。
⑵CPU执行程序,程序返回前,CS =0772H 、SS =0771H 、DS =0770H 。
image

⑶设程序加载后,CODES段的段地址为X,则DATAS段的段地址为X-2,STACKS段的段地址为X-1。将截图附在下面。
image
image

image

⑷对于如下定义的段:
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段中的数据为多少?
image
⑵CPU执行程序,程序返回前,CS =0770H、SS = 0774H、DS = 0773H。
image

⑶设程序加载后,CODES段的段地址为X,则DATAS段的段地址为X+3,STACKS段的段地址为X+4。将截图附在下面。
4.如果把1、2、3题中的最后一条伪指令“END START”改为“END”(也就是说不指明程序入口),则哪个程序能正确执行?
答:第三条程序还可以正常执行,因为如果不指明程序指令的开始入口,前两个是数据段,只有从第三条开始是指令代码,但是第三个将代码段定义在开头,两个数据段定义在后面,所以可以正常执行。
三、实验题

  1. 完成下面的程序,利用栈,将程序中定义的数据逆序存放。
    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

image

image

通过观察实验结果知,程序正常运行返回后,数据完成逆序存放。
四、实验报告
要求: 1.每步操作过程及所用指令;2.用截图方式反应指令执行前后的相关寄存器或存储单元内容的变化,并对所得结果进行分析。


__EOF__

本文作者DeepBrainBoy
本文链接https://www.cnblogs.com/tccjx/p/16190407.html
关于博主:评论和私信会在第一时间回复。或者直接私信我。
版权声明:本博客所有文章除特别声明外,均采用 BY-NC-SA 许可协议。转载请注明出处!
声援博主:如果您觉得文章对您有帮助,可以点击文章右下角推荐一下。您的鼓励是博主的最大动力!
posted @   TCcjx  阅读(426)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· TypeScript + Deepseek 打造卜卦网站:技术与玄学的结合
· 阿里巴巴 QwQ-32B真的超越了 DeepSeek R-1吗?
· 如何调用 DeepSeek 的自然语言处理 API 接口并集成到在线客服系统
· 【译】Visual Studio 中新的强大生产力特性
· 2025年我用 Compose 写了一个 Todo App
点击右上角即可分享
微信分享提示