組合語言中PTR的含義

2021-06-06 16:13:00 字數 1890 閱讀 9615

組合語言中ptr的含義

mov ax,bx ;是把bx暫存器「裡」的值賦予ax,由於二者都是word型,所以沒有必要加「word」   

mov ax,word ptr [bx];是把記憶體位址等於「bx暫存器的值」的地方所存放的資料,賦予ax。由於只是給出乙個記憶體位址,不知道希望賦予ax的,是byte還是word,所以需要用word明確指出!

ptr是顯示申明(還是宣告?)   

所以,當兩個運算元的寬度不一樣時,就要用到, 

這裡的寬度是指bit說簡單點就是 16位的還是8位的! 

cpu內部的暫存器,是16位的,(老了吧?) 

而記憶體的單位定址是8位的,所以他們的寬度不一樣 

就需要顯示宣告ptr,   

當你用dw和dt、db等時,就需要他來顯示宣告了,

指令要處理的資料有多長?

8086cpu的指令,可以處理兩種尺寸的資料,byte和word。所以在機器指令中要指明,指令進行的是字操作還是位元組操作。對於這個問題,組合語言中用一下方法處理。

(1)通過暫存器名指明要處理的資料的尺寸。

例如:下面的指令中,暫存器指明了指令進行的是字操作是字操作:

mov ax,1

mov bx,ds:[0]

mov ds,ax

mov ds:[0],ax

inc ax

add ax,1000

下面的指令中,暫存器指明了指令進行的是位元組操作:

mov al,1

mov al,bl

mov al,ds:[0]

mov ds:[0],al

inc al

add al,100

(2)在沒有暫存器名存在的情況下,用操作符 x ptr 指明記憶體單元的長度,x在彙編指令中可以為word或byte。

例如:下面的指令中,用word ptr 指明了指令訪問的記憶體單元是乙個字單元:

mov word ptr ds:[0],1

inc word ptr [bx]

inc word ptr ds:[0]

add word ptr [bx],2

下面的指令中,用byte ptr 指明了指令訪問的記憶體單元是乙個字單元:

mov byte ptr ds:[0],1

inc byte ptr [bx]

inc byte ptr ds:[0]

add byte ptr [bx],2

在沒有暫存器參與的記憶體單元訪問指令中,用word prt 或byte ptr 顯性地指明所要訪問的記憶體單元的長度是很必要的。否則,cpu無法得知所要訪問的單元,還是位元組單元。假如我們用debug檢視記憶體的結果如下:

2000:1000 ff ff ff ff ff ff ......

那麼指令:

mov ax,2000h

mov ds,ax

mov byte ptr [1000h],1

將使記憶體中的內容變為:

2000: 1000 01 ff ff ff ff ff ......

而指令:

mov ax,2000h

mov ds,ax

mov word ptr [1000h],1

將使記憶體中的內容變為:

2000:1000 01 00 ff ff ff ff ......

這是因為 mov byte ptr [1000h],1訪問的是位址為 ds:1000h 的位元組單元,修改的是ds:1000h 單元的內容;而mov word ptr [1000h],1 訪問的是位址為 ds:1000h 的字單元,修改的是 ds:1000h 和 ds:1001h 兩個單元的內容。

(3) 其他方法

有些指令預設了訪問的是字單元還是位元組單元,比如:push [1000h] 就不用指明訪問的是字單元還是位元組單元,因為push指令只進行字操作。

組合語言中PTR的含義及作用

組合語言中ptr的含義及作用 mov ax,bx 是把bx暫存器 裡 的值賦予ax,由於二者都是word型,所以沒有必要加 word mov ax,word ptr bx 是把記憶體位址等於 bx暫存器的值 的地方所存放的資料,賦予ax。由於只是給出乙個記憶體位址,不知道希望賦予ax的,是byte還...

組合語言中PTR的含義及作用

mov ax,bx 是把bx 暫存器 裡 的值賦予 ax,由於二者都是 word 型,所以沒有必要加 word mov ax,word ptr bx 是把記憶體位址等於 bx暫存器的值 的地方所存放的資料,賦予 ax。由於只是給出乙個記憶體位址,不知道希望賦予 ax的,是 byte 還是word 所...

組合語言中的常數

1,數值常數 二進位制數 10110100b 八進位制數146q,5430 十進位制數146d,543 十六進製制數 1a2fh,0ff00h 實數12.48e 2,1a3c0000r 彙編時,則有匯程式設計序將所有的數值常數都轉換成二進位制標示的目標 凡是以字母a f開頭的十六進製制數,唏噓在前面...