鱼C论坛

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

[已解决]奇怪的事情

[复制链接]
发表于 2017-7-20 13:30:25 | 显示全部楼层 |阅读模式

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

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

x
本帖最后由 f393 于 2017-7-20 17:05 编辑

问题10.5中,第二小题。题目是:“下列程序执行后,ax和bx中的数值为多少?”
给的代码:
assume cs:code

data segment

        dw 8 dup (0)      ;定义8个0

data ends

code segment

 start: mov ax,data
       mov ss,ax           ;定义data段为栈段
       mov sp,16          ;将栈顶指针指向ss:16

       mov word ptr ss:[0],offset s       ;将标号s的偏移地址(IP)放入内存地址ss:0处(字形数据)
       mov ss:[2],cs                  ;将(cs)放入内存地址ss:2处(字形数据)
       call dword ptr ss:[0]           ;跳转到((ss)*10+2):((ss)*10+0)       [(cs):(标号s的偏移地址)]

          nop        ;无意义

s:    mov ax,offset s
      sub ax,ss:[0CH]      ;(ax)=标号s的偏移地址      (ax)=(ax)-((ss)*10+CH)
      mov bx,cs
      sub bx,ss:[0EH]      ;(bx)=(cs)      (bx)=(bx)-((ss)*10+EH)

      mov ax,4C00H
      int 21H                   ;程序返回

code ends

 end start
按照我的推论来说,两次的入栈都没有影响到ss:cH和ss:eH,那么ax就等于标号s的偏移地址,bx等于cs的值。
然而……
最佳答案
2017-7-20 14:24:47
call语句会入栈 ss:[0CH]和ss:[0EH]是call语句入栈的数据

问题:第3步栈内被写入

问题:第3步栈内被写入

第一步:栈内正常

第一步:栈内正常
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

 楼主| 发表于 2017-7-20 13:36:51 | 显示全部楼层
为什么呢?
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2017-7-20 14:24:47 | 显示全部楼层    本楼为最佳答案   
call语句会入栈 ss:[0CH]和ss:[0EH]是call语句入栈的数据
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2017-7-20 14:33:01 | 显示全部楼层
那么,为什么会写入那么多数据
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2017-7-20 14:56:28 | 显示全部楼层
不清楚
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2017-7-20 17:04:36 | 显示全部楼层
em……
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

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

本版积分规则

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

GMT+8, 2024-11-20 04:48

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

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