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