汇编中DS问题

是这样我申请DS段空间但在跟踪程序的时候比如DS操作系统默认是13e2但是为什么他要在13f2中开始执行数据段我是这样写的assumecs:mycodeds:mydata... 是这样我申请DS 段空间 但在跟踪程序的时候
比如DS操作系统 默认是 13e2 但是为什么他 要在13f2中开始 执行数据段
我是这样写的

assume cs:mycode ds:mydata ss:mystack es:myextra

mydata segment
db 0,0
mydata ends

....
....
....

mycode segment

start:
mov ax,mydata
mov ds,ax 我的问题就是 如果我不执行这句在前面读取偏移地址
系统会按照之前的DS 对应的地址读取数值
还是我申请的DS 对应的地址读取数值
其他寄存器也是相同原理 但是奇怪的是 堆栈的寄存器却和我 申请的DS地址相同
我知道一个段是<=64k 惟独这个地方我是白思不得其解

问题二 为什么不从 系统第一的段中我有一点点理解 psp 需要去补习这些知识
还有我 有必要去 深入理解下DOS 吗
问题二 写的模糊了

为什么操作系统不从 默认的DS 中开始 读取数据
这好象和什么 psp有关系 我只是知道 ds在程序开始后256个字节执行cs:ip 难道和这个有关系 但我还是没明白
展开
 我来答
力波鸿0i
推荐于2016-02-09 · TA获得超过1259个赞
知道小有建树答主
回答量:461
采纳率:100%
帮助的人:361万
展开全部
1。“我的问题就是 如果我不执行这句,在前面读取偏移地址,系统会按照之前的DS对应的地址读取数值,还是我申请的DS对应的地址读取数值”
答案当然是如果你不执行mov ds,ax就按系统分配的DS去读数据,
因为你汇编程序里assume ds:mydata中,assume是一个伪指令,而且在英文里是 假设 的意思,实际assume并不把mydata的地址给DS,必须手动给
2。“堆栈的寄存器却和我 申请的DS地址相同”
这很正常,因为寄存器存的地址相当于门牌号,它只管指示哪个房子可以访问,并不管哪个其他地方存了相同的地址…
3。“为什么不从 系统第一的段中我有一点点理解”
问题理解不能-_-///
4。“为什么操作系统不从 默认的DS 中开始 读取数据”
系统有系统的数据区,应用程序运行在系统上有应用程序的数据区,不能干扰系统数据啊……
而且如果你不在纯DOS下运行程序,基本上每次运行同一程序,系统分配的默认DS是固定的,因为保护模式下的分段机制造成的…
5。“ ds在程序开始后256个字节执行cs:ip 难道和这个有关系”
汇编程序编译连接后成为exe就是可执行文件了,里面放的是数据和机器码,你可以去看一看PE文件结构,其中MZ区是说DOS Stub的…话说这东西你会了就可以破解软件注册码了…
6。“有必要去 深入理解下DOS”
有兴趣什么都可以……dos是单任务系统,运行在实模式下,还是比较简单的,运行程序只要保护现场再加个call或jmp far就搞定了,windows和linux要复杂,在保护模式下运行…
adavgl
2011-01-14 · TA获得超过765个赞
知道小有建树答主
回答量:753
采纳率:0%
帮助的人:603万
展开全部
立即数不能直接MOV到段地址,是由CPU内部结构决定的…data为符号地址,编译时会以偏移量形式(这里偏移量为0)存储,进而运行时载入内存代码段,然后进入指令缓冲器进行解码,而段寄存器组和指令缓冲器都没有直接连线,因而必须有通用寄存器中转…
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式