[理解语句]代码段寄存器赋值问题
时间:2010-11-21
来源:互联网
代码段寄存器不能由程序员在源程序中对其赋值,其值是由操作系统在装入它进入系统运行时自动赋值的。
这句话是怎么理解的?
我们不是可以通过mov来实现寄存器的赋值吗?
那除了代码段寄存器不可以由程序员在源程序中赋值外,数据段可以吗,堆栈段可以吗?
这句话是怎么理解的?
我们不是可以通过mov来实现寄存器的赋值吗?
那除了代码段寄存器不可以由程序员在源程序中赋值外,数据段可以吗,堆栈段可以吗?
作者: kartik 发布时间: 2010-11-21
Assembly code
因为程序员不知道那一块内存是freedom的……在没有OS之前,指令被程序员手工编译后总是从地址0开始存放,操作系统管理内存后情况就变的复杂了,程序不能从0开始存放,这意味着程序的地址绑定从编译时延迟到了加载时。
Assembly code
你可能想问MOV DS,AX,它确实给DS赋值了。没错,但是DATA段已经是操作系统确定的地址并存放在AX。
也许此时你也知道可用DATA段地址是10B3H,你想把它立即MOV DS,10B3H赋值给DS。但这是Intel的限制,他们考虑的可能是空间换时间的这样:MOV AX,DATA MOV DS,AX,DATA.直接修改DS太耗时了。
代码段寄存器不能由程序员在源程序中对其赋值,其值是由操作系统在装入它进入系统运行时自动赋值的。
因为程序员不知道那一块内存是freedom的……在没有OS之前,指令被程序员手工编译后总是从地址0开始存放,操作系统管理内存后情况就变的复杂了,程序不能从0开始存放,这意味着程序的地址绑定从编译时延迟到了加载时。
Assembly code
我们不是可以通过mov来实现寄存器的赋值吗?
那除了代码段寄存器不可以由程序员在源程序中赋值外,数据段可以吗,堆栈段可以吗?
你可能想问MOV DS,AX,它确实给DS赋值了。没错,但是DATA段已经是操作系统确定的地址并存放在AX。
也许此时你也知道可用DATA段地址是10B3H,你想把它立即MOV DS,10B3H赋值给DS。但这是Intel的限制,他们考虑的可能是空间换时间的这样:MOV AX,DATA MOV DS,AX,DATA.直接修改DS太耗时了。
作者: chuleedaemon 发布时间: 2010-11-21
相关阅读 更多
热门阅读
-
office 2019专业增强版最新2021版激活秘钥/序列号/激活码推荐 附激活工具
阅读:74
-
如何安装mysql8.0
阅读:31
-
Word快速设置标题样式步骤详解
阅读:28
-
20+道必知必会的Vue面试题(附答案解析)
阅读:37
-
HTML如何制作表单
阅读:22
-
百词斩可以改天数吗?当然可以,4个步骤轻松修改天数!
阅读:31
-
ET文件格式和XLS格式文件之间如何转化?
阅读:24
-
react和vue的区别及优缺点是什么
阅读:121
-
支付宝人脸识别如何关闭?
阅读:21
-
腾讯微云怎么修改照片或视频备份路径?
阅读:28