关于伪指令assume
时间:2010-12-19
来源:互联网
code segment
mov ax,1
add ax,ax
mov ax,4c00h
int 21h
code ends
end
不加前面的assume cs:code也行
但如果这样写:
code segment
start: mov ax,1
add ax,ax
mov ax,4c00h
int 21h
code ends
end start
就不行,请问高人是为什么呢?
作者: mic47 发布时间: 2010-12-19
第二个程序既然已经告知程序的运行入口,那么CPU就有义务对CS、IP进行相关设置。那么它设置的依据是什么呢?就是伪指令assume cs:code。你既然让它设置程序入口,又不告诉人家怎么做?不出错才怪!
需要特别注意的是:assume指令中,只有代码段寄存器CS由cpu自动设置,其他如DS,SS只是一个默认使用的约定,而其实际值为多少,CPU是不管的,所以一定要根据程序需要手动的将其设置为相关段的地址。
作者: zybzyb1987 发布时间: 2010-12-19
作者: masmaster 发布时间: 2010-12-19
作者: znxllyuan 发布时间: 2010-12-19
第一个程序没有通知程序的运行入口地址,也就是没有start,所以载人程序后,CPU就不用对CS、IP进行设置。
第二个程序既然已经告知程序的运行入口,那么CPU就有义务对CS、IP进行相关设置。那么它设置的依据是什么呢?就是伪指令assume cs:code。你既然让它设置程序入口,又不告诉人家怎么做?不出错才怪!
需要特别注意的是:assume指令中,只有代码段寄存器CS由cpu自动设置,其……
补充:
变量、标号和过程等,在编译时都要换成其地址,包括偏移地址和段地址,但在引用时,有些情况下段地址可以省略,如ds:[偏移地址]中的ds等。那么编译工具要不要把段地址省略,它就看assume把这个段关联给哪个段寄存器了。
所以第一个出现没有变量和标号等,不涉及判断段地址的问题;而第二个程序出现了标号,就要看这个标号关联到哪个段寄存器。
作者: shzhfu 发布时间: 2010-12-19
引用 1 楼 zybzyb1987 的回复:
第一个程序没有通知程序的运行入口地址,也就是没有start,所以载人程序后,CPU就不用对CS、IP进行设置。
第二个程序既然已经告知程序的运行入口,那么CPU就有义务对CS、IP进行相关设置。那么它设置的依据是什么呢?就是伪指令assume cs:code。你既然让它设置程序入口,又不告诉人家怎么做?不出错才怪!
需要特别注意的是:assume……
支持牧人大叔~
作者: znxllyuan 发布时间: 2010-12-19
作者: lxy15329 发布时间: 2010-12-19
热门阅读
-
office 2019专业增强版最新2021版激活秘钥/序列号/激活码推荐 附激活工具
阅读:74
-
如何安装mysql8.0
阅读:31
-
Word快速设置标题样式步骤详解
阅读:28
-
20+道必知必会的Vue面试题(附答案解析)
阅读:37
-
HTML如何制作表单
阅读:22
-
百词斩可以改天数吗?当然可以,4个步骤轻松修改天数!
阅读:31
-
ET文件格式和XLS格式文件之间如何转化?
阅读:24
-
react和vue的区别及优缺点是什么
阅读:121
-
支付宝人脸识别如何关闭?
阅读:21
-
腾讯微云怎么修改照片或视频备份路径?
阅读:28