
汇编中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 难道和这个有关系 但我还是没明白 展开
比如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 难道和这个有关系 但我还是没明白 展开
2个回答
展开全部
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要复杂,在保护模式下运行…
答案当然是如果你不执行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要复杂,在保护模式下运行…
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询
广告 您可能关注的内容 |