汇编assume 伪指令

这几天在看王爽大大的 汇编语言。对于assume伪指令却很是不懂。


   比如已经定义了assume cs:code,ds:data

但用debug观察的时候,发现ds段寄存器却没有相关联的数据。


必须在cs中写明: mov ax,data   

                                mov ds,ax

    然后才能发现ds中有正确的数据。


于是疑惑,assume不是已经关联了ds嘛?

上网求助 = =、 然后找到答案。


编写程序,是写给编译软件的。由编译软件,编译成机器码,再去控制CPU。但是,编译软件,对assume语句,并不生成机器码。

所以,必须有mov ax,data,mov ds,ax,CPU才能受控。

---assume语句,是伪指令,仅仅是写给编译软件的。编译软件,并不把它生成机器码。


assume对除了CS以外的其它段寄存器,仅仅只是关联了段名,以便在访问段内变量时程序可以知道用哪个段寄存器,并没有在程序加载时将段地址装入段寄存器。

   所以,将段地址装入段寄存器的工作,必须由用户在程序中自己编写代码,并在程序开始运行时执行代码完成装入工作。
仅仅对CS段寄存器,会在关联段名的同时,在程序加载时自动将段地址装入段寄存器。

 

----补充:前天知道了答案后,我以为assume ds:data 之类的指没有什么用,只是给程序员看的。

    但今天发现不是这样的。 如果你在data中用了标号的话,则assume ds:data不能省略。

比如:

data segment
a db 1,2,3,4,5,6,7,8
b dw 0
data ends

a,b的后面没有“ :”。 如果你想在cs段中用数据标号访问数据,则必须在开头加上assume ds:data,否则会报错 

Arror A2068:Can not address with segment register

不过就算在开头加上了assume ds:data,代码段中也不能少了mov ax,data,mov ds,ax。





  • 10
    点赞
  • 20
    收藏
    觉得还不错? 一键收藏
  • 2
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值