鱼C论坛

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

求解一个神秘的问题

[复制链接]
发表于 2011-8-16 11:04:09 | 显示全部楼层 |阅读模式

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

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

x
本帖最后由 sslas 于 2011-8-16 11:08 编辑
assume cs:code,ds:a,ss:b
code segment
    start:mov ax,a
          mov ds,ax

          mov ax,b
          mov ss,ax
          mov sp,10h

          mov bx,0
          mov cx,8
        s:push [bx]
          add bx,2
          loop s

mov ax,4c00H
int 21H

code ends

a segment
dw 1,2,3,4,5,6,7,8,9,0aH,0bH,0cH,0dH,0eH,0fH,0ffH
a ends

b segment
dw 0,0,0,0,0,0,0,0
b ends

end start
代码是将a 段前8字型数据push 到b段中  代码是正确的 可有一个小疑问如下
-r
AX=4C00  BX=0010  CX=0000  DX=0000  SP=0000  BP=0000  SI=0000  DI=0000
DS=13C3  ES=13B1  SS=13C5  CS=13C1  IP=001D   NV UP EI PL NZ AC PO NC
13C1:001D CD21          INT     21
-d 13c3:0
13C3:0000  01 00 02 00 03 00 04 00-05 00 06 00 07 00 08 00   ................
13C3:0010  09 00 0A 00 0B 00 0C 00-0D 00 0E 00 0F 00 FF 00   ................
13C3:0020  08 00 07 00 06 00 05 00-04 00 03 00 02 00 01 00   ................
13C3:0030  00 00 00 00 00 00 00 00-00 00 00 00 00 00 00 00   ................
13C3:0040  00 00 00 00 00 00 00 00-00 00 00 00 00 00 00 00   ................
13C3:0050  00 00 00 00 00 00 00 00-00 00 00 00 00 00 00 00   ................
13C3:0060  00 00 00 00 00 00 00 00-00 00 00 00 00 00 00 00   ................
13C3:0070  00 00 00 00 00 00 00 00-00 00 00 00 00 00 00 00   ................
-d 13c5:0
13C5:0000  08 00 07 00 06 00 05 00-04 00 03 00 02 00 01 00   ................
13C5:0010  00 00 00 00 00 00 00 00-00 00 00 00 00 00 00 00   ................
13C5:0020  00 00 00 00 00 00 00 00-00 00 00 00 00 00 00 00   ................
13C5:0030  00 00 00 00 00 00 00 00-00 00 00 00 00 00 00 00   ................
13C5:0040  00 00 00 00 00 00 00 00-00 00 00 00 00 00 00 00   ................
13C5:0050  00 00 00 00 00 00 00 00-00 00 00 00 00 00 00 00   ................
13C5:0060  00 00 00 00 00 00 00 00-00 00 00 00 00 00 00 00   ................
13C5:0070  00 00 00 00 00 00 00 00-00 00 00 00 00 00 00 00   ................

我定义cs ds ss都是相连的而且每个段都没有超过64kb 怎么在debug中 DS=13C3  SS=13C5 CS=13C1  
那既然CS=13C1  ds 怎么不是13c2 ss怎么不是13c3呢?
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
发表于 2011-8-16 22:53:36 | 显示全部楼层
谁规定段的长度一定是64Kb么
只要你另起一个段segment,段地址默认就改变了 (X+15)/16
b段比a段推后32个字节,ss就比ds增加 (32+15)/16=2
CS比DS增加同理,你可以算下CS段的机器码几个字节
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
发表于 2011-9-10 05:28:03 | 显示全部楼层
ds跟ss不一定会是差距1个段的.
更何况ds定义了16个word,即是32byte,换成段的差距就是2,
这里跟结果DS=13C3  SS=13C5 是吻合的

要注意的是,虽然说一个段的大小最大是64kb,但是这个64kb
是我们人类所见到的,CPU并没有这个认识,在CPU眼里,
段之间的差距(不考虑偏移地址)只有16byte
(每次差1,还要乘上16转成段地址就是10h=16byte.
例如说段地址3456h跟段地址3455h之间就差了16byte.)

cs为何比ds还要往前20h也是一样的道理,cs里面的指令有多少byte
会影响ds的位置,不是因为一个段最多有64kb所以ds一定在cs+1的地方.
(再次强调,回头看一下,64kb是人类看到的.电脑看不到.)

何况,仔细想想,要是CS=13C1  DS=13C2 ,那麽,CS段实际上能存多少指令?
只有16Byte!(因为CS实际位置为13C10H,DS为13C20H)
估计写6,7个指令就不能再写了.
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

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

GMT+8, 2024-11-19 04:41

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

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