百韵网 >>  正文

汇编语言中伪指令assume有什么实际意义吗 汇编伪指令 assume 具体作用是什么

来源:www.baiyundou.net   日期:较早时间
assume 的作用是关联段名与段寄存器。

如果你在数据段中定义了变量名,比如:

x db 0 1

而你在代码中,需要直接使用这个变量名,比如:

mov al, x 1

那么,汇编程序在汇编时,就会报告错误。

因为,mov指令中遇到 x 这个变量名时,汇编程序不知道它要用哪个段寄存器作为段地址。

所以:

若要用变量名直接访问,或使用语句标号(比如你例子中的标号 start)就必须要在assume伪指令中将这些变量或标号所在段的段名,与段寄存器名关联,否则会出错。

如果你不使用段中的变量名,可以不关联这个段的段名与寄存器。

如果你访问变量时,都指定了段跨越前缀,关联也不是必须的。比如你可以用 mov al, ds:x访问变量 x 。

assume,不需要讨论。
高版本的 MASM,已经不用这句了。

汇编伪指令 assume 具体作用是什么~

要用assume把段跟段寄存器对应起来的原因是原来的DOS找到的空闲内存的地址不是固定的,无法找到一个地址在任何时候都是空闲的。于是DOS需要可以重定位的程序,而当时的定位方式就是设置段寄存器的值使该程序能在可分配(空闲)的内存中可用。那就需要知道某个段被重定位时候需要修改哪个段寄存器的值才能正确执行。assume提供这种段和重定位代码时需要对应修改的寄存器的关系给编译器,编译器再这个信息写到二进制文件中去。比如DOS下的exe程序记录在文件头中。

assume cs:code,ds:data
就是告诉汇编器打算将code段的段地址放在cs里,也就是将以code为段名的段当做代码段
将data段的段地址放在ds里,也就是将以data为段名的段当做数据段
(仅是打算、声明而以,在汇编器对源程序汇编时用的)

真正在代码段才会将数据段(data)的段地址送入ds(程序执行时做的)

相关要点总结:

19259957297:汇编语言中伪指令assume有什么实际意义吗
琴鹏答:assume 的作用是关联段名与段寄存器。如果你在数据段中定义了变量名,比如:x db 0 1 而你在代码中,需要直接使用这个变量名,比如:mov al, x 1 那么,汇编程序在汇编时,就会报告错误。因为,mov指令中遇到 x 这个变量名时,汇编程序不知道它要用哪个段寄存器作为段地址。所以:若要用变量名直接...

19259957297:汇编伪指令 assume 具体作用是什么
琴鹏答:assume提供这种段和重定位代码时需要对应修改的寄存器的关系给编译器,编译器再这个信息写到二进制文件中去。比如DOS下的exe程序记录在文件头中。

19259957297:汇编语言关于assume的用法
琴鹏答:assume伪指令用于向汇编程序说明所定义的逻辑段属于何种类型的逻辑段。说明的方法是将逻辑段的段名和对应的段寄存器关联起来。但除了CS寄存器外,其他逻辑段的地址需要程序员自己装入寄存器中。(来自清华版教材)具体为什么,我理解如下:dseg segment data db '1'dseg endscseg segment assume cs:...

19259957297:这个有什么用,,。。。新手求解,汇编第一句assume。。。这伪指令我感觉...
琴鹏答:assume 语句是断言,完全可以不要,就是假定条件成立,则执行这些语句 对程序正常运行没有作用,但在调试阶段,不同的断言,可以给出不同错误信息,便于发现错误

19259957297:请教8086汇编语言中ASSUME伪指令的作用!
琴鹏答:先回答你的第一个问题,书上是你那样说的,至于你的第一个疑问是因为ASSUME伪指令只是让数据段寄存器DS与你的数据存储地址,代码段寄存器CS和你的代码段所存储的地址一一对应起来,但是如果你不人为把你的数据段存储地址DSEG传给DS的话,系统是无法获得DSEG的具体物理地址的。对于第二疑问,因为CS:IP是...

19259957297:汇编,ASSUME指令的问题
琴鹏答:ASSUME伪指令:1:告诉汇编程序,各个段分别分配给了哪一个段寄存器。但它只是一条伪指令,并不会把段地址装入寄存器。--- 2:一个源程序至少有一个ASSUME伪指令,指出CS对应的代码段。但绝不是对段寄存器装填,DS、SS、ES的具体指必须通过MOV等指令来装填。--- 3:代码段、堆栈段:没有单独语句...

19259957297:汇编语言中assume cs:code,ds:data 是什么意思?
琴鹏答:是条伪指令,一般放在代码段的第一条位置,段分配语句仅仅是建立段寄存器和段名之间关系,不具有赋值功能。比如创建了几个段,如何知道它是代码段,它是数据段,通过这条语句就可以知道,因为段名是可以任意取的,可以把code取成代码段,也可以是其他名字,通过这条语句就可以把他们的关系建立起来。

19259957297:汇编语言里 assume cs:code ,ds:data ,es:extra 是什么意思?
琴鹏答:assume: 段寄存器关联说明伪指令。所谓关联,只某一段寄存器使用某一指定的段空间。cs:code ,ds:data ,es:extra: 代码段寄存器cs与code关联;数据段寄存器ds与data关联;附加段寄存器es与extra关联。

19259957297:汇编源程序伪指令assume存在性问题
琴鹏答:ASSUME是给编译器看的!这一点非常重要!不要认为对代码有实际作用,它只是给编译器看看,你还必须手动给DS、ES赋值,如果你不手动给DS、ES赋值,你的代码就会挂掉。你奇怪的很对,那它是不是多余的?确实是,但是编译器需要它啊,你不指定,编译器就会不给你检查段错误,或者给你乱检查段错误!这个...

19259957297:...ax,data mov ds,ax两句,不是有assume定义过段了吗
琴鹏答:assume是伪指令,所谓的伪指令是形成上很类似于指令,但不属于CPU指令集,而是由汇编编译软件第一次扫描时,将伪指令转化为相应的指令。换句话来说,伪指令是属于汇编编译软件的,在编译时第一次扫描,会转成相应的指令集或是由编译软件执行某些操作。即使是这样,伪指令也是最终操作了,这里应该好好...

(编辑:本站网友)
相关推荐
关于我们 | 客户服务 | 服务条款 | 联系我们 | 免责声明 | 网站地图
@ 百韵网