鱼C论坛

 找回密码
 立即注册
查看: 2168|回复: 15

10-5

[复制链接]
发表于 2014-9-5 12:28:37 | 显示全部楼层 |阅读模式

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

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

x
本帖最后由 别走别忘 于 2014-9-6 18:21 编辑

检测点10.5
(1)
下面的程序执行后,ax中的数值为多少?
注:不能用单步中断测试程序,中断涉及堆栈操作,不能带便CPU的真实执行结果。
assume cs:code
stack segment
dw 8 dup (0)
stack ends
code segment
start: mov ax,stack
mov ss,ax
mov sp,16
mov ds,ax
mov ax,0
call word ptr ds:[0EH]
inc ax
inc ax
inc ax
mov ax,4c00h
int 21h
code ends
endstart
我没有单步测试
   CALL指令DS:[0EH]是先PUSH 11 再JMP DS:[0EH],这个0EH转10进制就是14 那对应偏移地址14的指令是  mov ax,4c00h,AX为什么不得4C00H ,而是AX=3?

      


2.jpg
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

 楼主| 发表于 2014-9-5 12:45:47 | 显示全部楼层
本帖最后由 别走别忘 于 2014-9-5 13:00 编辑

我才发现DS【】我给用成CS:IP了吧 ,DS:[0EH]如何等于CS:[11] ?  能看出mov ss,ax
mov sp,16
mov ds,ax
mov ax,0
这里DS=SS 那就是SS:SP=DS:IP,问题这里SS:SP指想SS:11 问题怎么就跟OEH相等了?
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2014-9-5 19:51:58 | 显示全部楼层
别走别忘 发表于 2014-9-5 12:45
我才发现DS【】我给用成CS:IP了吧 ,DS:[0EH]如何等于CS:[11] ?  能看出mov ss,ax
mov sp,16
mov ds,ax

数据段跟栈段重叠了啊,push ip 后sp指向0eH(这是此时栈顶呀),既然数据段跟栈段重叠那么ds:[0e]=ss:[0e]=ss:[sp]=11H。仔细看下堆栈吧。。书得好好看呐
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2014-9-5 21:07:05 | 显示全部楼层
小靚同学Leon 发表于 2014-9-5 19:51
数据段跟栈段重叠了啊,push ip 后sp指向0eH(这是此时栈顶呀),既然数据段跟栈段重叠那么ds:[0e]=ss:[0 ...

好听你的!
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2014-9-6 17:38:59 | 显示全部楼层
小靚同学Leon 发表于 2014-9-5 19:51
数据段跟栈段重叠了啊,push ip 后sp指向0eH(这是此时栈顶呀),既然数据段跟栈段重叠那么ds:[0e]=ss:[0 ...

我重看了下栈那几节,我又看了下题,为什么这里当前IP 就是PUSH IP 和SP 就是两个分开算了,而前面那个10.4 里下面的程序执行后,ax中的数值为多少?
内存地址 机器码 汇编指令
1000:0 b8 06 00 mov ax,6
1000:2 ff d0 call ax
1000:5 40 inc ax
1000:6 mov bp,sp
add ax,[bp]
解:ax=11
这里为什么SP就是IP是同一个值 呢?这里SP当一个数值而不是一个地址来执行,而这个10.5里就得分得算SP 和 IP 而且这个10.5里11H 只能当一个偏移地址指向去执行INC AX 。为什么有时IP,SP 当数值用有时又只能当指向。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2014-9-7 16:59:27 | 显示全部楼层
别走别忘 发表于 2014-9-6 17:38
我重看了下栈那几节,我又看了下题,为什么这里当前IP 就是PUSH IP 和SP 就是两个分开算了,而前面那个10 ...

sp就是栈指针,指向栈内存地址。ip就是程序指令指针。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2014-9-7 17:02:14 | 显示全部楼层
小靚同学Leon 发表于 2014-9-7 16:59
sp就是栈指针,指向栈内存地址。ip就是程序指令指针。

那4里为啥IP和SP相等了。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2014-9-7 17:05:19 | 显示全部楼层
push ip了啊,ip进栈了啊,此时ip的值不就是sp所向的值么?
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2014-9-7 17:08:47 | 显示全部楼层
5里也入栈了,就因为有栈顶设置 SP=16 就得要另算SP吗
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2014-9-7 17:10:59 | 显示全部楼层
5里11H 不是值了又是指向了,4里入栈就当值了?还是因为【BP】加了双引号才让变成一个数值不是指向了
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2014-9-7 17:11:43 | 显示全部楼层
小靚同学Leon 发表于 2014-9-7 17:05
push ip了啊,ip进栈了啊,此时ip的值不就是sp所向的值么?

忘记祝你中秋节快乐了!谢谢你一直回答我问题。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2014-9-7 18:23:07 | 显示全部楼层
别走别忘 发表于 2014-9-7 17:11
忘记祝你中秋节快乐了!谢谢你一直回答我问题。

不客气。同乐。你追问的问题我不懂你的想法。或许你有深意我不知道你在说什么,但是这个问题我一开始的回答你好好看,没那么难懂。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2014-9-7 20:48:21 | 显示全部楼层
我是没想通为什么IP有的题目里和SP是一个数,有的题里IP和SP不是一个数。比如我说的10章里检测题里4和5题,我就想说这个意思。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2014-9-8 07:01:41 | 显示全部楼层
本帖最后由 别走别忘 于 2014-9-8 07:39 编辑

我知道哪里错了,10-4里不是SP=IP SP一直是=SP-2,这个10-4里是算不出SP指向哪针,但可以知道【SP]栈里放的是IP值5 ,【bp]指的内存单元里的值和【sp]全是5,4我错到SP和【SP]分不清
再看5理解错误是没理解JMP 含义, JMP 内存单元 是段内转移不会改变CS 只改变IP  执行JMP 内存单元 后CS还是旧的CS ,ds:[0e]=11H ,所以新的IP=11H   这样指令的地址找到就是旧CS:(新IP),JMP 指令目的就是找到要执行指令的新物理地址CS :IP。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2014-9-8 21:18:43 | 显示全部楼层
帮楼主顶一下,顺便赚点鱼币
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2014-9-9 08:47:06 | 显示全部楼层
还有这样赚鱼币的?成了灌水了!
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

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

本版积分规则

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

GMT+8, 2024-10-7 02:27

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

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