举例说明在汇编语言中,[]的用法
生活随笔
收集整理的這篇文章主要介紹了
举例说明在汇编语言中,[]的用法
小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.
"[]"的用法在"常見問題"已經(jīng)有所說明,引用如下:
1、push dword ptr [024c1100]???壓棧024c1100值的雙字
2、cmp eax,[ebp+14]????????????eax-ebp+14的有效值,不保留值,主要看標(biāo)志位
3、cmp byte ptr [eax],46???????字節(jié)型eax-46,看標(biāo)志位
4、lea eax,[edx-02]????????????把edx-02的有效值(一個地址值)給eax
5、mov ecx,[edx+08]????????????edx+8值作為地址,此地址所指向的值給ecx
我再補充幾例我遇到的情況,參考了一些資料,以及我個人的理解.
-------------------------------------------------------------------------------
mov指令中用到"[]"
1--mov [edi], eax ----把eax的值(dword)賦給位于內(nèi)存地址edi處的值
2--mov [bp-02], dx ---把dx的值(word)賦給位于內(nèi)存地址bp-02處的值
3--mov esi,[BP+14]??---把位于內(nèi)存地址BP+14的dword大小的值移入esi寄存器
4--mov eax, dword ptr [ebp-04]---把位于內(nèi)存地址ebp-04的dword大小的值移入eax寄存器
5--mov eax, dword ptr[0000003Ah]--把位于內(nèi)存地址3A的dword大小的值放入eax寄存器
6--mov cl, byte ptr [34h]--把位于內(nèi)存地址34的byte大小的值放入cl寄存器
7--mov dx, word ptr [3Eh]--把位于內(nèi)存地址3E的word大小的值放入dx寄存器
8--mov eax,[00403045h] --從內(nèi)存地址403045讀取一個32位的值
9--mov al, byte ptr [eax+ecx]--把位于內(nèi)存地址eax+ecx的byte大小的值放入al寄存器
綜括號"[]"用來從括號間的內(nèi)存地址處取值,沒有括號就只是這個值,寄存器和內(nèi)存地址也可以.
10--mov cx,[eax]--把位于內(nèi)存地址eax的word大小的值移入cx寄存器
在mov cx, [eax]中,處理器會先查看eax裝有什么值(=內(nèi)存地址),然后在那個內(nèi)存地址中有什么值,并把這個word(16位,因為目標(biāo)-cx-是個16位寄存器)移入cx。
-------------------------------------------------------------------------------
cmp指令中用到"[]"
1--cmp dword ptr [ebp-04], 00000007--把位于內(nèi)存地址ebp-04的dword大小的值與00000007比較
2--cmp byte ptr [si], 00??--把位于內(nèi)存地址si的byte大小的值與00比較
-------------------------------------------------------------------------------
lea指令中用到"[]"
1--lea di, [bp-22] ----把bp-22的有效值(=內(nèi)存地址)給di
-------------------------------------------------------------------------------
test指令中用到"[]"
1--test byte ptr [bx+08FD]
--將位于內(nèi)存地址bx+08FD處的byte大小的值邏輯與,判斷運算結(jié)果是否為00
理解上難免有偏差,請指正!
1、push dword ptr [024c1100]???壓棧024c1100值的雙字
2、cmp eax,[ebp+14]????????????eax-ebp+14的有效值,不保留值,主要看標(biāo)志位
3、cmp byte ptr [eax],46???????字節(jié)型eax-46,看標(biāo)志位
4、lea eax,[edx-02]????????????把edx-02的有效值(一個地址值)給eax
5、mov ecx,[edx+08]????????????edx+8值作為地址,此地址所指向的值給ecx
我再補充幾例我遇到的情況,參考了一些資料,以及我個人的理解.
-------------------------------------------------------------------------------
mov指令中用到"[]"
1--mov [edi], eax ----把eax的值(dword)賦給位于內(nèi)存地址edi處的值
2--mov [bp-02], dx ---把dx的值(word)賦給位于內(nèi)存地址bp-02處的值
3--mov esi,[BP+14]??---把位于內(nèi)存地址BP+14的dword大小的值移入esi寄存器
4--mov eax, dword ptr [ebp-04]---把位于內(nèi)存地址ebp-04的dword大小的值移入eax寄存器
5--mov eax, dword ptr[0000003Ah]--把位于內(nèi)存地址3A的dword大小的值放入eax寄存器
6--mov cl, byte ptr [34h]--把位于內(nèi)存地址34的byte大小的值放入cl寄存器
7--mov dx, word ptr [3Eh]--把位于內(nèi)存地址3E的word大小的值放入dx寄存器
8--mov eax,[00403045h] --從內(nèi)存地址403045讀取一個32位的值
9--mov al, byte ptr [eax+ecx]--把位于內(nèi)存地址eax+ecx的byte大小的值放入al寄存器
綜括號"[]"用來從括號間的內(nèi)存地址處取值,沒有括號就只是這個值,寄存器和內(nèi)存地址也可以.
10--mov cx,[eax]--把位于內(nèi)存地址eax的word大小的值移入cx寄存器
在mov cx, [eax]中,處理器會先查看eax裝有什么值(=內(nèi)存地址),然后在那個內(nèi)存地址中有什么值,并把這個word(16位,因為目標(biāo)-cx-是個16位寄存器)移入cx。
-------------------------------------------------------------------------------
cmp指令中用到"[]"
1--cmp dword ptr [ebp-04], 00000007--把位于內(nèi)存地址ebp-04的dword大小的值與00000007比較
2--cmp byte ptr [si], 00??--把位于內(nèi)存地址si的byte大小的值與00比較
-------------------------------------------------------------------------------
lea指令中用到"[]"
1--lea di, [bp-22] ----把bp-22的有效值(=內(nèi)存地址)給di
-------------------------------------------------------------------------------
test指令中用到"[]"
1--test byte ptr [bx+08FD]
--將位于內(nèi)存地址bx+08FD處的byte大小的值邏輯與,判斷運算結(jié)果是否為00
理解上難免有偏差,請指正!
總結(jié)
以上是生活随笔為你收集整理的举例说明在汇编语言中,[]的用法的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: oracle数据库link格式,Orac
- 下一篇: php ajax 弹窗修改,更改PHP