汇编语言直接偏移量操作数
變量名加上一個位移就形成了一個直接 – 偏移量操作數(shù)。這樣可以訪問那些沒有顯式標(biāo)記的內(nèi)存位置。假設(shè)現(xiàn)有一個字節(jié)數(shù)組 arrayB:
?
arrayB BYTE 10h,20h,30h,40h,50h
用該數(shù)組作為 MOV 指令的源操作數(shù),則自動傳送數(shù)組的第一個字節(jié):
mov al,arrayB????????? ;AL = 10h
通過在 arrayB 偏移量上加 1 就可以訪問該數(shù)組的第二個字節(jié):
mov al,[arrayB+1]? ? ? ? ? ? ;AL = 20h
如果加 2 就可以訪問該數(shù)組的第三個字節(jié):
mov al, [arrayB+2]? ? ? ? ? ?;AL = 30h
形如 arrayB+1 一樣的表達(dá)式通過在變量偏移量上加常數(shù)來形成所謂的有效地址。有效地址外面的括號表明,通過解析這個表達(dá)式就可以得到該內(nèi)存地址指示的內(nèi)容。匯編器并不要求在地址表達(dá)式之外加括號,但為了清晰明了,建議使用括號。
MASM 沒有內(nèi)置的有效地址范圍檢查。在下面的例子中,假設(shè)數(shù)組 arrayB 有 5 個字節(jié),而指令訪問的是該數(shù)組范圍之外的一個內(nèi)存字節(jié)。其結(jié)果是一種難以發(fā)現(xiàn)的邏輯錯誤,因此,在檢查數(shù)組引用時要非常小心:
mov al, [arrayB+20]?????????????? ; AL = ??
字和雙字?jǐn)?shù)組
在 16 位的字?jǐn)?shù)組中,每個數(shù)組元素的偏移量比前一個多 2 個字節(jié)。這就是為什么在下面的例子中,數(shù)組 ArrayW 加 2 才能指向該數(shù)組的第二個元素:
.data arrayW WORD 100h,200h,300h .code mov ax, arrayW ;AX = 100h mov ax,[arrayW+2] ;AX = 200h同樣,如果是雙字?jǐn)?shù)組,則第一個元素偏移量加 4 才能指向第二個元素:
.data arrayD DWORD l0000h,20000h .code mov eax, arrayD4.1?操作數(shù)類型
4.2?MOV指令
4.3?MOVZX和MOVSX指令
4.4?LAHF和SAHF指令
4.5?XCHG指令
4.6?直接偏移量操作數(shù)
4.7?匯編語言數(shù)據(jù)傳送示例
4.8?加法和減法詳解
4.9?OFFSET運(yùn)算符
4.10?ALIGN偽指令
4.11?PTR運(yùn)算符
4.12?TYPE運(yùn)算符
4.13?LENGTHOF運(yùn)算符
4.14?LABEL偽指令
4.15?間接尋址
4.16?JMP和LOOP指令
4.17?64位MOV指令
4.18?64位加法和減法
總結(jié)
以上是生活随笔為你收集整理的汇编语言直接偏移量操作数的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: xp变量 java_winxp系统设置j
- 下一篇: ffmpeg抓取rtsp流并保存_详细解