⑴ 什麼是立即數定址
立即數定址是匯編語言中的一種定址方式,在面向不同形式的處理器中,會有不同的編寫方式。
立即定址方式只能用於源操作數欄位,不能用於目的操作數欄位,經常用於給寄存器賦初值。
例:MOV AX,251 ;將十進制數251送入寄存器AX,「251」是立即數。
MOV AL,『5』 ;將5的ASCII碼送入寄存器AL,『5』是立即數。
MOV AL,E8H ;將8位立即數E8H送入寄存器AL。
MOV AX,2346H ;將16位立即數2346H送入寄存器AX。
(1)立即數定址物理地址演算法擴展閱讀
在程序運行時,程序直接調用該操作數,而不需要到其他地址單元中去取相應的操作數,上述的寫在指令中的操作數也稱作立即數。
在MCS-51單片機匯編語言編程中,該定址方式是將「#」號放在立即數前面,以表示該定址方式為立即定址,如將操作數寫為#52H。
例: MOV A ,#52H
上述例子中「MOV」為操作碼,「A」為第一操作數,其意義為累加寄存器,「#52H」為第二操作數,其意義就是立即數。通過該條程序指令可將十六進制數52H直接放入累加器中,當然也可以將立即數表示為二進制數或十進制數,如#00B。
在8086系列微型處理器匯編語言編程中,該定址方式不用將「#」放在立即數前面。
⑵ mov 指令的一個小問題
mov [1234],1234 這么寫當然有問題,mov操作不支持這種定址格式1234當然可以作為立即數使用,沒問題,但是定址方式不對。 mov定址,必須藉助寄存器。定址方式如下:由邏輯地址得到其物理地址(PA—Physical Address)的計算方法如下:
物理地址PA=段地址×16 + 偏移量
1.立即定址方式 MOV AH, 80H
操作數作為指令的一部分而直接寫在指令中,這種操作數稱為立即數,這種定址方式也就稱為立即數定址方式。
2.寄存器定址方式
指令所要的操作數已存儲在某寄存器中,或把目標操作數存入寄存器。把在指令中指出所使用寄存器(即:寄存器的助憶符)的定址方式稱為寄存器定址方式。
A.源操作數是寄存器定址方式 MOV VARB, BH
B.目的操作數是寄存器定址方式 MOV EBX, 12345678H
C.源和目的操作數都是寄存器定址方式 MOV EAX, EBX
3.直接定址方式 MOVAX, [1234H]
指令所要的操作數存放在內存中,在指令中直接給出該操作數的有效地址,這種定址方式為直接定址方式。
4.寄存器間接定址方式
操作數在存儲器中,操作數的有效地址用SI、DI、BX和BP等四個寄存器之一來指定,稱這種定址方式為寄存器間接定址方式。
MOV BX,[DI]
5.寄存器相對定址方式
操作數在存儲器中,其有效地址是一個基址寄存器(BX、BP)或變址寄存器(SI、DI)的內容和指令中的8位/16位偏移量之和。
MOV BX, [SI+100H]
6.基址加變址定址方式
操作數在存儲器中,其有效地址是一個基址寄存器(BX、BP)和一個變址寄存器(SI、DI)的內容之和。
MOV BX, [BX+SI]
7.相對基址加變址定址方式
操作數在存儲器中,其有效地址是一個基址寄存器(BX、BP)的值、一個變址寄存器(SI、DI)的值和指令中的8位/16位偏移量之和。
MOV AX, [BX+SI+200H]