检测点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,
怎么知道SP的值???
http://bbs.fishc.com/xwb/images/bgimg/icon_logo.png 该贴已经同步到 KK学脚本的微博 本帖最后由 莫名其妙 于 2012-3-5 19:54 编辑
这里你不需要知道sp具体是多少 ! 为什么
这里不是让你计算sp 的 是为了让你知道 call 指令 执行的意思是什么
内存地址 机器码 汇编指令
1000:0 b8 06 00 mov ax,6 ; ax=6,ip指向1000:3
1000:3 ff d0 call ax ;pushipjmp 16位寄存器为ip的地方 ip指向1000:6 因为是call 16位寄存器 此时内保
存的是下一条指令的ip地址也就 是push进去的是0005
1000:5 40 inc ax;这条指令暂时跳过
1000 :6 mov bp,sp;跳到这里执行这里不管sp是多少 因为用不上 看下面
add ax, ;这里 ds: +ax ds: 内保存的是什么 ?
因为bp等与sp所以 sp指向的内存单元内保存的是什么?
保存的是刚才call 命令时push进来的 下一段代码的地址 也就是ip=0005
所以 这里 调用的跟sp的大小没关 这里只是调用sp指向内存单元的数据 0005
:D:D:D懂了 莫名其妙 发表于 2012-3-5 19:41 static/image/common/back.gif
这里你不需要知道sp具体是多少 ! 为什么
这里不是让你计算sp 的 是为了让你知道 call 指令 执行的意思是 ...
高手. 一语惊醒梦中人 莫名其妙 发表于 2012-3-5 19:41 static/image/common/back.gif
这里你不需要知道sp具体是多少 ! 为什么
这里不是让你计算sp 的 是为了让你知道 call 指令 执行的意思是 ...
你写错了吧 兄弟【bp】默认的段地址是SS 不是DS 是栈段 而不是数据段的 而你写的是ds:纯属误导人啊 我说我看了半天 都不理解 爱人等于爱自 发表于 2012-7-16 12:14
你写错了吧 兄弟【bp】默认的段地址是SS 不是DS 是栈段 而不是数据段的 而你写的是ds:纯属误导人啊 我说我 ...
哥,你自己都说了。。bp默认是ss为段地址。那么,加了段前缀,ds:,是强制使bp的段地址为ds。 敉沧 发表于 2012-7-16 12:53 static/image/common/back.gif
哥,你自己都说了。。bp默认是ss为段地址。那么,加了段前缀,ds:,是强制使bp的段地址为ds。
那有一点我不明白了哦 call ax 执行2步 第一步是将call下一条指令压入栈 那就是将 005压入栈段 而不是数据段,你强制使bp的段地址为DS段 试问DS段和栈段的段地址是一样的吗?也就是说 DS:bp和ss:bp指向的内容都是刚才的偏移地址005吗? 你怎么知道DS:bp存储的内容也是005呢? push命令执行的是压入栈中哦 如果DS和ss指向的地址不是同一个地址的话 那DS:bp指向的位置就是错误的哦 不知道我说的对不对 请赐教! 学习学习再学习 本帖最后由 远山 于 2016-4-25 10:41 编辑
爱人等于爱自 发表于 2012-7-18 10:44
那有一点我不明白了哦 call ax 执行2步 第一步是将call下一条指令压入栈 那就是将 005压入栈段 而不是数 ...
我觉得你说的对,确实不能用ds段,2楼的前辈应该是笔误写成了ds:sp{:10_277:} 了解了{:10_254:}
页:
[1]