有两个问题没弄清(在线急等)
1.关于分段:书中说将内存空间分成若干段,每个段的段地址的低4位全部为0,而在段定义的伪指令中的定位类型属性却说段可以从不同的物理地址位置开始,请明示。 2.关于内存寻址:直接寻址方式mov ax,value,书中说value是一个地址标号,有的教材这样举例:
value dw 1234h
mov ax,value等价于:mov ax,[1234h];这好像应该不对吧
那么直接寻址中的这个value应该怎样定义呢?请明示。
问题点数:0、回复次数:8Top
1 楼vcshcn(黑天的猩猩)回复于 2003-11-03 10:43:31 得分 0
mov ax, value = mov ax, 1234hTop
2 楼GR(终于重新开始用MFC,捡起来好累)回复于 2003-11-03 10:58:51 得分 0
基地址是由高16位定义的。20位地址低四位是加上去的偏移,所以段的基地址可以从不同的物理地址开始。第二个问题。你debug一下看一下就知道了,http://expert.csdn.net/Expert/topic/2097/2097765.xml?temp=.3284723
这个是我以前的出的洋相。就是这个问题弄的。Top
3 楼SoRoMan(因为所以,所以因为)回复于 2003-11-03 10:59:01 得分 0
低4位全部为0的分段應該是默認分配方式。可以自己更該,至少386以上是這樣。
value dw 1234h
mov ax,value這裡的value表示存儲器操作數的地址,就是mov ax,[addr],這個addr可不是1234h,也就是mov ax,1234h。
可以定義一個符號常量。value equ 1234h,mov ax,[value]=mov ax,[1234h],有點多此一舉了赫赫。Top
4 楼handsomeway()回复于 2003-11-03 11:11:57 得分 0
to gr:这是我的理解不知是否正确:我认为清华课本上给出的那种表示方法XXXXXXXXXXXXXXXX0000是理论上的或者说逻辑上的分段方法与规则,并不是计算机里真正运行时的地址分配方法。Top
5 楼DoItFreely(Freely)回复于 2003-11-03 11:24:44 得分 0
对于变量名上的mov就是指针操作
var dw 0
mov eax,var => mov eax,[var]
对于标签名上的mov跟变量名相同
label var (dword ptr)
var1 dw 0
mov eax, var => mov eax, var1 => mov eax,[var1]
如果是取变量的地址,应该是用lea指令
lea eax,var
Top
6 楼GR(终于重新开始用MFC,捡起来好累)回复于 2003-11-03 11:31:56 得分 0
8086上的20位线性地址就是物理地址了。Top
7 楼bluedreammer(瀟瀟鳥)回复于 2003-11-03 14:57:41 得分 0
實方式下,段的首地址必然是0000結束的,虛擬方式下,段的概念發生了變化,段的基地址可以自由指定,自然段定義的時候可以從任意地方開始了.Top
8 楼WYC2300(无一从)回复于 2003-11-03 22:23:41 得分 0
应该是一样的啊Top




