鱼C论坛

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

求解一个神秘的问题

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

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

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

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

  5.           mov ax,b
  6.           mov ss,ax
  7.           mov sp,10h

  8.           mov bx,0
  9.           mov cx,8
  10.         s:push [bx]
  11.           add bx,2
  12.           loop s

  13. mov ax,4c00H
  14. int 21H

  15. code ends

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

  19. b segment
  20. dw 0,0,0,0,0,0,0,0
  21. b ends

  22. end start
复制代码
代码是将a 段前8字型数据push 到b段中  代码是正确的 可有一个小疑问如下
  1. -r
  2. AX=4C00  BX=0010  CX=0000  DX=0000  SP=0000  BP=0000  SI=0000  DI=0000
  3. DS=13C3  ES=13B1  SS=13C5  CS=13C1  IP=001D   NV UP EI PL NZ AC PO NC
  4. 13C1:001D CD21          INT     21
  5. -d 13c3:0
  6. 13C3:0000  01 00 02 00 03 00 04 00-05 00 06 00 07 00 08 00   ................
  7. 13C3:0010  09 00 0A 00 0B 00 0C 00-0D 00 0E 00 0F 00 FF 00   ................
  8. 13C3:0020  08 00 07 00 06 00 05 00-04 00 03 00 02 00 01 00   ................
  9. 13C3:0030  00 00 00 00 00 00 00 00-00 00 00 00 00 00 00 00   ................
  10. 13C3:0040  00 00 00 00 00 00 00 00-00 00 00 00 00 00 00 00   ................
  11. 13C3:0050  00 00 00 00 00 00 00 00-00 00 00 00 00 00 00 00   ................
  12. 13C3:0060  00 00 00 00 00 00 00 00-00 00 00 00 00 00 00 00   ................
  13. 13C3:0070  00 00 00 00 00 00 00 00-00 00 00 00 00 00 00 00   ................
  14. -d 13c5:0
  15. 13C5:0000  08 00 07 00 06 00 05 00-04 00 03 00 02 00 01 00   ................
  16. 13C5:0010  00 00 00 00 00 00 00 00-00 00 00 00 00 00 00 00   ................
  17. 13C5:0020  00 00 00 00 00 00 00 00-00 00 00 00 00 00 00 00   ................
  18. 13C5:0030  00 00 00 00 00 00 00 00-00 00 00 00 00 00 00 00   ................
  19. 13C5:0040  00 00 00 00 00 00 00 00-00 00 00 00 00 00 00 00   ................
  20. 13C5:0050  00 00 00 00 00 00 00 00-00 00 00 00 00 00 00 00   ................
  21. 13C5:0060  00 00 00 00 00 00 00 00-00 00 00 00 00 00 00 00   ................
  22. 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呢?
小甲鱼最新课程 -> https://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段的机器码几个字节
小甲鱼最新课程 -> https://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个指令就不能再写了.
小甲鱼最新课程 -> https://ilovefishc.com
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

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

GMT+8, 2025-7-12 14:09

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

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