汇编语言 实验二

本文通过一系列汇编语言实验,详细解析了寄存器操作、栈空间使用及中断机制。实验揭示了栈顶内存单元存储SS、IP、CS值的现象,并解释其原因。同时,介绍了如何设置段寄存器SS和SP来初始化栈空间。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

· 在进行实验之前,有个小知识点: 中断机制 : Debug的T命令在执行修改寄存器SS的指令时, 下一条指令也紧接着被执行。

 

实验任务(1):

  敲下如下代码

-e 0021:0 31 32 33 34 35 36 37
mov ax, 0021
mov ds, ax

mov ax, 2200
mov ss, ax

mov sp, 0100

mov ax, [0]          ;ax = 3130
mov ax, [2]          ;ax = 6462
mov bx, [4]          ;bx = 3534
add  bx, [6]          ; bx = 6C6A

push ax                 ;sp = 00FE; 修改的内存单元的地址是  2200:00FE 内容为 6462
push bx                 ;sp = 00FC;修改的内存单元的地址是  2200:00FC 内容为 6C6A
pop ax                  ; sp = 00FE; ax = 6C6A
pop bx                  ; sp = 0100; bx = 6462

push [4]                ;sp = 00FE;修改的内存单元的地址是 2200:00FE 内容为 3534
push [6]                ;sp = 00FC;修改的内存单元的地址是 2200:00FC 内容为 3736

 

填空与实验结果一致。

————————————————————————————————————————————

实验任务(2):

1. 我们发现 2000:0~2000:f 的单元值是有变化的

   那么是什么原因呢?

   实事证明,我并没有悟性,通过百度得到,靠近栈顶的内存单元中存储的是SS, IP, CS中的值,通过对比就可以发现它们的位置,那么还有一些别的数据呢,代表什么意思?

2. 前3行的功能是:将段寄存器ss的值设置为段地址 2000, 将段寄存器sp的值设置为偏移地址 10 . 也就是安排 2000:0000 - 2000:000F为栈空间, 初始化栈顶为 2000:10

 

总结和体会: 所知尚浅,还须多读书,多敲代码,多“鼓捣”,多沉心静气。

转载于:https://www.cnblogs.com/sunguanglin/p/9863240.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值