戚凤 发表于 2011-9-21 03:43:52

代码move ax,data mov ds,ax的意义

疑惑在于assume定义过各段的含义了,为什么在代码段内还要再写一遍数据段地址呢,代码段的地址不是自动加载到cs的吗

tsembrace 发表于 2011-9-21 09:12:25

assume语句是伪指令,CPU看不懂的,也无法执行的。他的作用只是告诉编译器有这样的“假设”,然后再通过指令让CPU实现这样的假设。

戚凤 发表于 2011-9-22 00:45:11

tsembrace 发表于 2011-9-21 09:12 static/image/common/back.gif
assume语句是伪指令,CPU看不懂的,也无法执行的。他的作用只是告诉编译器有这样的“假设”,然后再通过指令 ...

编译器的作用不就是完成这种假设吗?cs不用赋值啊,是不是涉及到程序的运作原理啊,可以详细解释么。

tsembrace 发表于 2011-9-22 09:46:56

戚凤 发表于 2011-9-22 00:45 static/image/common/back.gif
编译器的作用不就是完成这种假设吗?cs不用赋值啊,是不是涉及到程序的运作原理啊,可以详细解释么。

”编译器的作用不就是完成这种假设吗?“
没错,编译器在编译伪指令‘assume ds:data,ss:stack'时候完成对ds和ss的假设。
“cs不用赋值啊”
这需要你理解程序怎么样才可以获得执行权,简单的说,操作系统shell程序在加载该程序后,便设置了cs:ip,不需要你在程序代码里手动设置的。这是cs和ds,ss其他段地址设置的区别。

戚凤 发表于 2011-9-23 02:11:53

tsembrace 发表于 2011-9-22 09:46 static/image/common/back.gif
”编译器的作用不就是完成这种假设吗?“
没错,编译器在编译伪指令‘assume ds:data,ss:stack'时候完成 ...

十分感谢你的细心回答,谢谢。

菩提 发表于 2013-1-13 18:11:28

我也谢谢,我也想通了。
页: [1]
查看完整版本: 代码move ax,data mov ds,ax的意义