关于dword ptr 指令的意思
生活随笔
收集整理的這篇文章主要介紹了
关于dword ptr 指令的意思
小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.
csdn上抄的一位同學的文章,完整的如下: 代碼 也懶得寫自己的話了,直接引用王雙匯編8.5章,相信有一點點基礎(chǔ)的都能看懂
8.5?指令要處理的數(shù)據(jù)有多長?
8086CPU的指令,可以處理兩種尺寸的數(shù)據(jù),byte和word。所以在機器指令中要指明,指令進行的是字操作還是字節(jié)操作。對于這個問題,匯編語言中用一下方法處理。
(1)通過寄存器名指明要處理的數(shù)據(jù)的尺寸。
例如:
下面的指令中,寄存器指明了指令進行的是字操作是字操作:
mov?ax,1
mov?bx,ds:[0]
mov?ds,ax
mov?ds:[0],ax
inc?ax
add?ax,1000
下面的指令中,寄存器指明了指令進行的是字節(jié)操作:
mov?al,1
mov?al,bl
mov?al,ds:[0]
mov?ds:[0],al
inc?al
add?al,100
(2)在沒有寄存器名存在的情況下,用操作符?X?ptr?指明內(nèi)存單元的長度,X在匯編指令中可以為word或byte。
例如:
下面的指令中,用word?ptr?指明了指令訪問的內(nèi)存單元是一個字單元:
mov?word?ptr?ds:[0],1
inc?word?ptr?[bx]
inc?word?ptr?ds:[0]
add?word?ptr?[bx],2
下面的指令中,用byte?ptr?指明了指令訪問的內(nèi)存單元是一個字單元:
mov?byte?ptr?ds:[0],1
inc?byte?ptr?[bx]
inc?byte?ptr?ds:[0]
add?byte?ptr?[bx],2
??在沒有寄存器參與的內(nèi)存單元訪問指令中,用word?prt?或byte?ptr?顯性地指明所要訪問的內(nèi)存單元的長度是很必要的。否則,CPU無法得知所要訪問的單元,還是字節(jié)單元。假如我們用Debug查看內(nèi)存的結(jié)果如下:
2000:1000?FF?FF?FF?FF?FF?FF?......
那么指令:
mov?ax,2000H
mov?ds,ax
mov?byte?ptr?[1000H],1
將使內(nèi)存中的內(nèi)容變?yōu)?#xff1a;
2000:?1000?01?FF?FF?FF?FF?FF?......
而指令:
mov?ax,2000H
mov?ds,ax
mov?word?ptr?[1000H],1
將使內(nèi)存中的內(nèi)容變?yōu)?#xff1a;
2000:1000?01?00?FF?FF?FF?FF?......
??這是因為?mov?byte?ptr?[1000H],1訪問的是地址為?ds:1000H?的字節(jié)單元,修改的是ds:1000H?單元的內(nèi)容;而mov?word?ptr?[1000H],1?訪問的是地址為?ds:1000H?的字單元,修改的是?ds:1000H?和?ds:1001H?兩個單元的內(nèi)容。
(3)?其他方法
??有些指令默認了訪問的是字單元還是字節(jié)單元,比如:push?[1000H]?就不用指明訪問的是字單元還是字節(jié)單元,因為push指令只進行字操作。?
本文來自CSDN博客,轉(zhuǎn)載請標明出處:http://blog.csdn.net/GaryZhang29/archive/2008/05/13/2439504.aspx
8.5?指令要處理的數(shù)據(jù)有多長?
8086CPU的指令,可以處理兩種尺寸的數(shù)據(jù),byte和word。所以在機器指令中要指明,指令進行的是字操作還是字節(jié)操作。對于這個問題,匯編語言中用一下方法處理。
(1)通過寄存器名指明要處理的數(shù)據(jù)的尺寸。
例如:
下面的指令中,寄存器指明了指令進行的是字操作是字操作:
mov?ax,1
mov?bx,ds:[0]
mov?ds,ax
mov?ds:[0],ax
inc?ax
add?ax,1000
下面的指令中,寄存器指明了指令進行的是字節(jié)操作:
mov?al,1
mov?al,bl
mov?al,ds:[0]
mov?ds:[0],al
inc?al
add?al,100
(2)在沒有寄存器名存在的情況下,用操作符?X?ptr?指明內(nèi)存單元的長度,X在匯編指令中可以為word或byte。
例如:
下面的指令中,用word?ptr?指明了指令訪問的內(nèi)存單元是一個字單元:
mov?word?ptr?ds:[0],1
inc?word?ptr?[bx]
inc?word?ptr?ds:[0]
add?word?ptr?[bx],2
下面的指令中,用byte?ptr?指明了指令訪問的內(nèi)存單元是一個字單元:
mov?byte?ptr?ds:[0],1
inc?byte?ptr?[bx]
inc?byte?ptr?ds:[0]
add?byte?ptr?[bx],2
??在沒有寄存器參與的內(nèi)存單元訪問指令中,用word?prt?或byte?ptr?顯性地指明所要訪問的內(nèi)存單元的長度是很必要的。否則,CPU無法得知所要訪問的單元,還是字節(jié)單元。假如我們用Debug查看內(nèi)存的結(jié)果如下:
2000:1000?FF?FF?FF?FF?FF?FF?......
那么指令:
mov?ax,2000H
mov?ds,ax
mov?byte?ptr?[1000H],1
將使內(nèi)存中的內(nèi)容變?yōu)?#xff1a;
2000:?1000?01?FF?FF?FF?FF?FF?......
而指令:
mov?ax,2000H
mov?ds,ax
mov?word?ptr?[1000H],1
將使內(nèi)存中的內(nèi)容變?yōu)?#xff1a;
2000:1000?01?00?FF?FF?FF?FF?......
??這是因為?mov?byte?ptr?[1000H],1訪問的是地址為?ds:1000H?的字節(jié)單元,修改的是ds:1000H?單元的內(nèi)容;而mov?word?ptr?[1000H],1?訪問的是地址為?ds:1000H?的字單元,修改的是?ds:1000H?和?ds:1001H?兩個單元的內(nèi)容。
(3)?其他方法
??有些指令默認了訪問的是字單元還是字節(jié)單元,比如:push?[1000H]?就不用指明訪問的是字單元還是字節(jié)單元,因為push指令只進行字操作。?
本文來自CSDN博客,轉(zhuǎn)載請標明出處:http://blog.csdn.net/GaryZhang29/archive/2008/05/13/2439504.aspx
?
轉(zhuǎn)載于:https://www.cnblogs.com/feiyucq/archive/2010/04/21/1716838.html
總結(jié)
以上是生活随笔為你收集整理的关于dword ptr 指令的意思的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 创造与魔法攻略蓝马
- 下一篇: 技术人员职业生涯的红色警报