为何需要 自己主动将 datasg赋值给ds 而cs则不用??
assume cs:codesg,ds:datasgdatasg segment
db 8 dup(2)
datasg ends
codesg segment
Start:
mov ax,datasg
mov ds,datasg
codesg ends
end Start
请问各位一个小问题
为何 程序一开始执行时 ds的值不是等於 datasg
而是必須要
mov ax,datasg
mov ds,datasg
這樣子才行
但是 同樣在assume那裡假設過的 codesg
程序一开始执行时,cs就是等於codesg了
不必再做赋值的动作
为何??
因为程序执行的入口是start啊,程序编译时cs:ip会指向它。code段才是机器硬指令,其他段都是编译器翻译的 you_shou 发表于 2015-6-21 22:28
因为程序执行的入口是start啊,程序编译时cs:ip会指向它。code段才是机器硬指令,其他段都是编译器翻译的
那请问一下
assume的功用是啥么啊??
我看书本里面,有時有打出
datasg segment
datasg ends
但在assume卻沒假設 ds:datasg
但还是依然能执行
所以我想问一说 assume的功用那底是啥??
酒鬼 发表于 2015-6-22 08:58
那请问一下
assume的功用是啥么啊??
网上找的:编写汇编语言的程序,要用编译软件来编译。
assume,就是通知编译软件的,说明段寄存器和定义段的关系。
编译软件,比较弱智,你随便瞎写一个对应关系,它都辨别不出来真假。
程序正确与否,全靠 MOV...这种针对 CPU 的指令,和 ASSUME 基本无关。
就不用琢磨它了。 assume cs:codesg,ds:datasg是给编译器看的
mov才是汇编指令,才是给cpu看得
页:
[1]