鱼C论坛

 找回密码
 立即注册
查看: 3547|回复: 2

关于监测点10.5第一题的个人理解,第二题不明白的问题。

[复制链接]
发表于 2011-7-6 10:16:05 | 显示全部楼层 |阅读模式

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

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

x
本帖最后由 xxasy 于 2011-7-7 08:23 编辑

  1. 0:  |   start: mov ax, stack         
  2. 3:  |          mov ss,ax              
  3. 5:  |          mov sp,16      
  4.   8:  |          mov ds,ax
  5. A:   |          mov ax,0
  6. D:   |          call WORD ptr ds:[0eh];
  7. 11:  |        inc ax
  8. 12:  |        inc ax
  9. 13:  |        inc ax
  10. 14:  |       mov ax,4c00h
  11.              int 21h
  12. codesg ends
  13. end start


复制代码
这里要注意,call word ptr ds:[0E]首先执行的是将ip入栈,也就是将11入栈。然后执行jmp 内存地址ds:[oE]处的数据11.这里可以画一个栈图。能看到ip在0E处的数据为11.
用u命令跟踪,ip=11处是第一个inc ax。于是连续执行3个inc ax。因为前面ax被清零。所以执行完后,ax的值为3.我是这样理解的。




  1. assume cs:code

  2.   data segment//作为栈
  3.   dw 8 dup (0)   
  4.   data ends

  5. code segment
  6.   start:mov ax,data   
  7.   mov ss,ax   //设置栈
  8.   mov sp,16   //设置栈指针
  9.   mov word ptr ss:[0],offset s //将栈的【0】位置赋值为 offset s, 也就是段s的起始位置
  10.   mov ss:[2],cs //将栈的【2】位置赋值为 cs
  11.   call dword ptr ss:[0]   //有了上面两句,程序通过call就跳转到s执行了,并且,CS,IP入栈
  12.   nop   //这里nop占用一个指令位置
  13.   s:mov ax,offset s   
  14.   sub ax,ss:[0ch]   //ss:[0ch]就是IP,也就是nop的位置,显然ax-ip==1,ax为1
  15.   mov bx,cs   
  16.   sub bx,ss:[0eh]  //ss:[0eh]就是cs ,cs-cs=0,bx为0
  17. code ends   
  18. end start
复制代码
10.5第二题,有一点我很不解,希望老师能解答。就是设置栈,
mov word ptr ss:[0],offset s
mov ss:[2],cs
已经赋值了0和2处的值,再执行call,会不会把0和2处的值压下去,放在c到f处?然后再call入栈cs,ip。这两个数值是不是就到了8到d处?求解释、

小甲鱼最新课程 -> https://ilovefishc.com
发表于 2011-7-6 16:39:53 | 显示全部楼层
M7AT{]G5UEVG{9Q)1~I04.jpg
小甲鱼最新课程 -> https://ilovefishc.com
发表于 2011-7-6 16:40:36 | 显示全部楼层
不会发生,如图所示。
小甲鱼最新课程 -> https://ilovefishc.com
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

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

GMT+8, 2025-7-1 06:49

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

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