汇编源程序伪指令assume存在性问题

2024-11-28 16:58:35
推荐回答(2个)
回答1:

ASSUME是给编译器看的!这一点非常重要!不要认为对代码有实际作用,它只是给编译器看看,你还必须手动给DS、ES赋值,如果你不手动给DS、ES赋值,你的代码就会挂掉。你奇怪的很对,那它是不是多余的?确实是,但是编译器需要它啊,你不指定,编译器就会不给你检查段错误,或者给你乱检查段错误!这个伪指令实际是编译器计算变量在段内的偏移量用的,如果指定错误会导致生成的机器码中偏移量错误,程序会跑飞的。就知道了,其实它跟你代码赋值的MOV DS , AX /ES要配合使用,必须保证两者配合起来找到正确的段内的变量。说太多可能你不理解,你多试几个段就知道了,只能点拨这么多了。老老实实的,ASSUME写上,MOV DS , AX写上,两步一步都不可少,而且要把段写对。以现代编程思想来看,这个ASSUME的存在的确很low!而且是非常弱智的那种设计,编译器的工作干程序员鸟事啊!然而那个年代,编译器的工作就是干程序员鸟事,程序员什么都要关心的,甚至还要时不时拨下内存,清下灰和bug什么的。所以现在谁还玩汇编了?还是想吐槽一下,这TMD汇编语言设计的都什么玩艺,难怪x86汇编也就大学用用~不要沉迷于此,玩玩即可~不可作为养家糊口的东西,有那时间多研究先进的算法,不要太过于研究这些底层,世界那么大,值得你往前走走看

回答2:

你写出来 ASSUME 伪指令,是给(微软的)编译软件看的。

编译软件根据这条伪指令,进行一些处理,就完了。

程序运行时,DS、SS、ED 的内容具体是什么?
这需要你写 Intel 的指令来完成。