鱼C论坛

 找回密码
 立即注册
查看: 2721|回复: 5

检测点6.1的第2个空 为什么是24H

[复制链接]
发表于 2012-2-23 22:06:32 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能^_^

您需要 登录 才可以下载或查看,没有账号?立即注册

x
(2)
assume cs:codesg
codesg segment
    dw 0123h,0456h,0789h,0abch,0defh,0fedh,0cbah,0987h
    dw 0,0,0,0,0,0,0,0,0,0
start:
    mov ax,cs     ;cs为所填第一空
    mov ss,ax
    mov sp,24h    ;此条指令为所填第二空
    mov ax,0
    mov ds,ax
    mov bx,0
    mov cx,8
s:
    push [bx]
    pop cs:[bx]    ;此条指令为所填第三空
    add bx,2
    loop s
   
    mov ax,4c00h
    int 21h
codesg ends
end start
本文来自:鱼C工作室<a href=http://www.fishc.com>  详细出处参考:http://www.fishc.com/a/kehouti/_huibianyuyan_/839.html



                               
登录/注册后可看大图
该贴已经同步到 KK学脚本的微博
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
 楼主| 发表于 2012-2-23 22:07:51 | 显示全部楼层
本帖最后由 KK学脚本 于 2012-2-23 22:21 编辑

有没点 容易懂的  看了小甲鱼的我还是不懂


因为前边已经定义了8个字型数据,所以我们的栈空间是从数据段后开始的,所以栈空间偏移地址为16到35,所以我们的栈顶指针指向1a(即栈底的下一个元素)。


解释一下这个到底是什么意思

所以栈空间偏移地址为16到35
到底是什么意思

想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
发表于 2012-2-23 23:42:06 | 显示全部楼层
codesg segment
     dw 0123h,0456h,0789h,0abch,0defh,0fedh,0cbah,0987h
     dw 0,0,0,0,0,0,0,0,0,0
首先,上述代码段中依次定义了18个字形数据,题目要求将后面的10个字形数据存储空间当作段来处理,所以栈顶偏移地址应为‘最后一个字型数据的地址+1’做为sp的值,即23h+1=24h。
重点要弄清楚前18个字型数据占用的内存空间为cs:00~cs:23h
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
发表于 2012-2-24 14:09:04 | 显示全部楼层
本帖最后由 莫名其妙 于 2012-2-24 15:20 编辑
KK学脚本 发表于 2012-2-23 22:07
有没点 容易懂的  看了小甲鱼的我还是不懂


dw 字形数据   1个字形数据用两个 字节数据组成  占16位
db 字节型数据 1个字节型数据 占8位

看图      这叫一个字 这叫一个字节   一个是由两个字节组成的
                      \   /  \  /
0B15:0000  CD 20 FF 9F 00 9A EE FE-1D F0 4F 03 79 05 8A 03

dw             0123h,0456h,0789h,0abch,0defh,0fedh,0cbah,0987h  当你将这一段8字形数据的数据存进内存以后这一段的偏移地址是多少?答案是从0到15   这个没问题吧
这正好是8个字形数据 拆成16个字节型数据存放在内存中(高八位在后低八位在前 )
然后 后面紧跟着就是dw 0,0,0,0,0,0,0,0,0,0    10个字形数据这一段数据进入内存以后 偏移地址是多少到多少? 16-35
这也是字型数据 也是24个字节型数据存放在内存中
0B15:0000  23 01 56 04 89 07 bc 0a - ef 0d ed 0f ba 0c 87 09      
      栈底  → 0  1   2    3   4   5   6  7   - 8  9  10 11 12 13 14 15  这一段偏移地址是0h--15h    
0B15:0010   00 00 00 00 00 00 00 00-00 00 00 00 00 00 00 00
                    16 17 18 19 20 21 22 23-24 25 26 27 28 29 30 31   
0B15:0020  00 00 00 00 xx xx xx xx-xx xx xx xx xx xx xx xx   这一段偏移地址是10h--23h                 这一段是数据存放的
                   32 33 34 35 36 37 38
              这个就是栈顶↑ ↑这里就是栈顶指针指向的地方            
执行push 操作 栈顶指针先-2 ,然后将数据存入栈内.push [bx]取DS段的数据按字型取  放入栈顶
执行pop操作  栈顶指针先+2然后取出数据存入指定位置或者寄存器,pop cs:[bx] 取出栈内数据放入 cs:[bx]中

mov ax,cs      
mov ss,ax
mov sp,24h      这个三段代码是将上面的所有数据全都放进栈里也就是这样确定一个栈的空间这个栈包含了35个字节
(十进制的35 按照16位计算下就是23H)
所以栈的指针sp 是指向栈顶的下一个单元 所以 sp要+1 也就是35+1=36  36的16进制是24H  



评分

参与人数 1荣誉 +5 鱼币 +5 贡献 +3 收起 理由
jianqiumy + 5 + 5 + 3 说得很仔细~~谢谢

查看全部评分

想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 1 反对 0

使用道具 举报

发表于 2012-9-12 05:32:31 | 显示全部楼层
{:7_169:}{:7_173:}{:7_178:}顶瓜瓜
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
发表于 2012-9-12 10:01:31 | 显示全部楼层
很简单的 要指向最后一个 0 的后面一个单元,前面一共18个dw 占据18*2=36个内存单元,换算成16进制=24h
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2024-10-8 04:34

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表