如果不assume ds:xxx,那么ds默认等于cs么?
时间:2010-12-29
来源:互联网
如果我的代码里面只有
assume cs:code
没有
mov ax,data
mov ds,ax
这样的代码。
也没有assume ds:data
那么ds的默认值就是等于cs? 也就是默认是生成一个com程序?(只有一个段)?
谢谢指点!
assume cs:code
没有
mov ax,data
mov ds,ax
这样的代码。
也没有assume ds:data
那么ds的默认值就是等于cs? 也就是默认是生成一个com程序?(只有一个段)?
谢谢指点!
作者: s4yeah 发布时间: 2010-12-29
不是这个意思。assume 语句对段寄存器的指定,主要是用来让汇编程序在需要的时候添加适当的段前缀指令的;其它方面倒没什么,更不会影响到段寄存器内容的设定或程序的模式。
作者: zara 发布时间: 2010-12-29
assume ds:data
是编译过程需要的,只负责告诉编译工具,data segment中的变量的段地址都是ds,所以编译到一些变量名时,就变成默认段地址的直接寻址,如[0000]等,如果换成assume es:data,则会编译成es:[0000].
mov ax,data
mov ds,ax
是执行过程中需要的,如果不是.com格式或没有用exe2bin把它变成.com格式,则允许这个程序时,DOS将它装入到内存,ds并没有取你定义的任何一个段的实际段地址,而是指向PSP(程序段前缀)。所以要有这2句让ds真正指向你的data段。
是编译过程需要的,只负责告诉编译工具,data segment中的变量的段地址都是ds,所以编译到一些变量名时,就变成默认段地址的直接寻址,如[0000]等,如果换成assume es:data,则会编译成es:[0000].
mov ax,data
mov ds,ax
是执行过程中需要的,如果不是.com格式或没有用exe2bin把它变成.com格式,则允许这个程序时,DOS将它装入到内存,ds并没有取你定义的任何一个段的实际段地址,而是指向PSP(程序段前缀)。所以要有这2句让ds真正指向你的data段。
作者: shzhfu 发布时间: 2010-12-29
http://tieba.baidu.com/f?kz=164349500
看下
看下
作者: znxllyuan 发布时间: 2010-12-29
其实只要cs段用assume就可以了,数据段不用也可以,只要在代码段中把某个段赋给ds就可以了,比如:
data segment
dd 12345678h
data ends
code segment
assume cs:code
start:
mov ax,data
mov ds,ax
mov ax,4c00h
int 21h
code ends
end start
data segment
dd 12345678h
data ends
code segment
assume cs:code
start:
mov ax,data
mov ds,ax
mov ax,4c00h
int 21h
code ends
end start
作者: leetow2003 发布时间: 2010-12-29
相关阅读 更多
热门阅读
-
office 2019专业增强版最新2021版激活秘钥/序列号/激活码推荐 附激活工具
阅读:74
-
如何安装mysql8.0
阅读:31
-
Word快速设置标题样式步骤详解
阅读:28
-
20+道必知必会的Vue面试题(附答案解析)
阅读:37
-
HTML如何制作表单
阅读:22
-
百词斩可以改天数吗?当然可以,4个步骤轻松修改天数!
阅读:31
-
ET文件格式和XLS格式文件之间如何转化?
阅读:24
-
react和vue的区别及优缺点是什么
阅读:121
-
支付宝人脸识别如何关闭?
阅读:21
-
腾讯微云怎么修改照片或视频备份路径?
阅读:28