程序段前缀不是256字节?怪事!求救ing

Lencho007 2006-05-31 08:11:39
程序段前缀不是256字节?
个人初学汇编,在调试程序过程中发现的问题,
请高手指点迷津,不胜感激!
源程序如下:

;把十进制数转换成对应的ASCII码并输出。
data segment
src db 1,4,2,3,5
db '$'
data ends

stack segment para stack 'stack'
db 200 dup (0)
stack ends

code segment
assume cs:code, ds:data, ss:stack
start: mov ax, data
mov ds, ax
mov cx, 5
mov si, 0
@loop: mov al, src[si]
add al, 30h
mov src[si], al
inc si
loop @loop
mov ah, 9
lea dx, src
int 21h
mov ax, 4c00h
int 21h
code ends
end start

Debug结果:

C:\masm615>debug btod.exe
-r
AX=0000 BX=0000 CX=0108 DX=0000 SP=00C8 BP=0000 SI=0000 DI=0000
DS=13AD ES=13AD SS=13C1 CS=13BE IP=0000 NV UP EI PL NZ NA PO NC
13BE:0000 B8BD13 MOV AX,13BD
-q

DS:0 = 13AD:0
CS:IP = 13BE:0 这里CS为什么不是13BD???

Help me!!!!!!!!!!!!!!!
...全文
225 8 打赏 收藏 转发到动态 举报
写回复
用AI写文章
8 条回复
切换为时间正序
请发表友善的回复…
发表回复
Lencho007 2006-06-07
  • 打赏
  • 举报
回复
多谢zara(Kyrie eleison)!
你有邮箱吗?
我想请教你很多问题!
zara 2006-06-04
  • 打赏
  • 举报
回复
哦, 楼主可以把 data 和 stack 段放到 code 之后再来比较 CS 和 DS
djkhym 2006-06-04
  • 打赏
  • 举报
回复
我说句,通过CS与DS的比较差异来说明PSP是否是100h有点不可思议,因为EXE运行时,一开始DS,ES指向PSP,同时CS在加载时是依据文件头中的信息进行重定位的,这个定位有很大的灵活性;你要看自己的PSP是否是100H,最好将自己的文件变成COM文件,你会发现运行处的前100H刚好是PSP
zara 2006-06-04
  • 打赏
  • 举报
回复
你的这个程序载入内存时, 在内存中依次是 PSP, data 数据段, stack 堆栈段, code 代码段. DS 是 13AD, 指向 PSP. 要核实 PSP 的大小, 就是检查 data 数据段址和 PSP 段址是非相处 10h. 程序的第一条指令是 mov ax, data 就是将 data 数据段的段址赋予 ax 寄存器. 在上面的 r 命令后可以看到 13BE:0000 0000 B8BD13 MOV AX,13BD 所以, data 数据段的段址就是 13BD. 13BD - 13AD = 10h, 因此 PSP 的大小是 10h 节, 即 100h 字节
Lencho007 2006-06-03
  • 打赏
  • 举报
回复
还是不大明白!
zara 2006-05-31
  • 打赏
  • 举报
回复
data 数据段在代码段之前啊, 看第一条指令对 DS 赋 data 段值是什么, 13BD, 这个不就说明了 PSP 为 100h 字节么
yaoyisky 2006-05-31
  • 打赏
  • 举报
回复
CS只是SEG 地址
yaoyisky 2006-05-31
  • 打赏
  • 举报
回复
这儿的CS值 是由OS 分配的

21,458

社区成员

发帖
与我相关
我的任务
社区描述
汇编语言(Assembly Language)是任何一种用于电子计算机、微处理器、微控制器或其他可编程器件的低级语言,亦称为符号语言。
社区管理员
  • 汇编语言
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧