日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問(wèn) 生活随笔!

生活随笔

當(dāng)前位置: 首頁(yè) > 编程资源 > 编程问答 >内容正文

编程问答

汇编语言PTR运算符:重写操作数的大小类型

發(fā)布時(shí)間:2025/3/15 编程问答 28 豆豆
生活随笔 收集整理的這篇文章主要介紹了 汇编语言PTR运算符:重写操作数的大小类型 小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

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)題。

如果覺(jué)得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。