鱼C论坛

 找回密码
 立即注册
查看: 3520|回复: 7

监测点10.4不明白啊

[复制链接]
发表于 2011-10-2 20:36:38 | 显示全部楼层 |阅读模式

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

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

x
本帖最后由 todhacker 于 2011-10-2 20:47 编辑

assume cs:code
code segment
start:
  mov ax,6
  call ax
  inc ax
  mov bp,sp
  add ax,[bp]
  
  mov ax,4c00h
  int 21h
code ends
end start

算出ax是000B,,,BP是FFFE。。。怎么算出AX的
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
发表于 2011-10-2 21:14:10 | 显示全部楼层
本帖最后由 老头子学汇编 于 2011-10-3 02:37 编辑
  1. 内存地址     机器码       汇编指令
  2. 1000:0000    B80600      mov     ax,0006     
  3. 1000:0003    FFD0        call    ax
  4. 1000:0005    40          inc     ax
  5. 1000:0006    89E5        mov     bp,sp
  6. 1000:0008    034600      add     ax,[bp]
  7. --------------------------------------------
  8. mov ax,0006     ;这个不用说你也知道的!
  9. call ax         ;将下一条指令的IP=0005压入栈,此时栈顶应该是sp=FFFE ,
  10.                   因为AX=0006,然后跳转(位移)到1000:0006,

  11.                                  
  12. inc ax          ;因为上一条指令CALL AX,已经跳转到1000:0006,
  13.                  这一步没有执行
  14.                                  
  15. mov bp,sp       ;sp=FFFE放入bp

  16. add ax,[bp]     ; ax+[bp],结果存放在AX中:0006+0005=000b
  17.                                   ax=0006
  18.                                   [bp]的内容就=0005,因为CALL AX把0005压入栈了!
  19.                                   [bp] 在前面没有规定段寄存器,它默认的段地址是SS的
  20.                                   比如(es[bp],ds[bp])它的段地址就是ES和DS
复制代码
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
发表于 2011-10-2 21:16:45 | 显示全部楼层
如果看不明白,请体谅下!
因我的表达能力,有限!

想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
发表于 2012-7-31 23:59:23 | 显示全部楼层

call ax         ;将下一条指令的IP=0005压入栈,此时栈顶应该是sp=FFFE ,

                因为AX=0006,然后跳转(位移)到1000:0006,
这里跳到1000:0006 是因为 ax=0006? 如果ax=ffff,那不是直接跳到1000:ffff?
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
发表于 2020-2-24 22:59:59 | 显示全部楼层
丶Haw 发表于 2012-7-31 23:59
call ax         ;将下一条指令的IP=0005压入栈,此时栈顶应该是sp=FFFE ,

                因为AX=00 ...

call 16位reg
执行过程是这样描述的
(sp)=(sp)-2
((ss)*16+(sp))=(ip)
(ip)=(16位reg)
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2023-7-21 19:00:11 | 显示全部楼层
bp是啥,我都不知道
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2023-7-21 19:09:36 | 显示全部楼层
mov bp,sp       ;sp=FFFE放入bp
add ax,[bp]     ; ax+[bp], 结果存放在AX中:0006+0005=000b
========================================
那么ss:[bp] 结果是啥 搞不明白呢







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

使用道具 举报

发表于 2023-7-29 10:58:26 | 显示全部楼层
没有指明栈是默认最大栈吗
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

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

GMT+8, 2024-5-17 11:02

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

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