汇编语言PTR运算符:重写操作数的大小类型
PTR 運(yùn)算符可以用來(lái)重寫(xiě)一個(gè)已經(jīng)被聲明過(guò)的操作數(shù)的大小類型。只要試圖用不同于匯編器設(shè)定的大小屬性來(lái)訪問(wèn)操作數(shù),那么這個(gè)運(yùn)算符就是必需的。
?
例如,假設(shè)想要將一個(gè)雙字變量 myDouble 的低 16 位傳送給 AXO 由于操作數(shù)大小不匹配,因此,匯編器不會(huì)允許這種操作:
.data myDouble DWORD 12345678h .code mov ax,myDouble但是,使用 WORD PTR 運(yùn)算符就能將低位字(5678h)送入 AX:
mov ax,WORD PTR myDouble為什么送入 AX 的不是 1234h ?因?yàn)?#xff0c;x86 處理器采用的是小端存儲(chǔ)格式,即低位字節(jié)存放于變量的起始地址。如下圖所示,用三種方式表示 myDouble 的內(nèi)存布局:第一列是一個(gè)雙字,第二列是兩個(gè)字(5678h、1234h),第三列是四個(gè)字節(jié)(78h、56h、34h、12h)。
不論該變量是如何定義的,都可以用三種方法中的任何一種來(lái)訪問(wèn)內(nèi)存。比如,如果 myDouble 的偏移量為 0000,則以這個(gè)偏移量為首地址存放的 16 位值是 5678h。同時(shí)也可以檢索到 1234h,其字地址為 myDouble+2,指令如下:
mov ax,WORD PTR [myDouble+2] ; 1234h同樣,用 BYTE PTR 運(yùn)算符能夠把 myDouble 的單個(gè)字節(jié)傳送到 BL:
mov b1,BYTE PTR myDouble ; 78h注意,PTR 必須與一個(gè)標(biāo)準(zhǔn)匯編數(shù)據(jù)類型一起使用,這些類型包括:BYTE、SEYTE、WORD、SWORD、DWORD、SDWORD、FWORD、QWORD 或 TBYTE。
將較小的值送入較大的目的操作數(shù)
程序可能需要將兩個(gè)較小的值送入一個(gè)較大的目的操作數(shù)。如下例所示,第一個(gè)字復(fù)制到 EAX 的低半部分,第二個(gè)字復(fù)制到高半部分。而 DWORD PTR 運(yùn)算符能實(shí)現(xiàn)這種操作:
.data wordList WORD 5678h,1234h .code mov eax, DWORD PTR wordList ; EAX = 12345匯編語(yǔ)言過(guò)程
5.1?匯編語(yǔ)言堆棧簡(jiǎn)介
5.2?匯編語(yǔ)言運(yùn)行時(shí)堆棧
5.3?PUSH和POP指令
5.4?PROC和ENDP偽指令
5.5?CALL和RET指令
5.6?過(guò)程調(diào)用嵌套
5.7?示例:整數(shù)數(shù)組求和
5.8?USES運(yùn)算符
5.9?鏈接庫(kù)簡(jiǎn)介
5.10?Irvine32鏈接庫(kù)
5.11?Irvine32鏈接庫(kù)過(guò)程詳細(xì)說(shuō)明
5.12?Irvine64鏈接庫(kù)
總結(jié)
以上是生活随笔為你收集整理的汇编语言PTR运算符:重写操作数的大小类型的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。
- 上一篇: 牛客网刷题错题记录
- 下一篇: html5简介、选项输入框、表单元素分组