程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> 更多編程語言 >> 匯編語言 >> 匯編語言中“[]”的用法

匯編語言中“[]”的用法

編輯:匯編語言

"[]"的用法在"常見問題"已經有所說明,引用如下:

1、push dword ptr [024c1100] 壓棧024c1100值的雙字
2、cmp eax,[ebp+14] eax-ebp+14的有效值,不保留值,主要看標志位
3、cmp byte ptr [eax],46 字節型eax-46,看標志位
4、lea eax,[edx-02] 把edx-02的有效值(一個地址值)給eax
5、mov ecx,[edx+08] edx+8值作為地址,此地址所指向的值給ecx

我再補充幾例我遇到的情況,參考了一些資料,以及我個人的理解.
-------------------------------------------------------------------------------
mov指令中用到"[]"

1--mov [edi], eax ----把eax的值(dword)賦給位於內存地址edi處的值
2--mov [bp-02], dx ---把dx的值(word)賦給位於內存地址bp-02處的值
3--mov esi,[BP+14] ---把位於內存地址BP+14的dword大小的值移入esi寄存器
4--mov eax, dword ptr [ebp-04]---把位於內存地址ebp-04的dword大小的值移入eax寄存器
5--mov eax, dword ptr[0000003Ah]--把位於內存地址3A的dword大小的值放入eax寄存器
6--mov cl, byte ptr [34h]--把位於內存地址34的byte大小的值放入cl寄存器
7--mov dx, word ptr [3Eh]--把位於內存地址3E的word大小的值放入dx寄存器
8--mov eax,[00403045h] --從內存地址403045讀取一個32位的值
9--mov al, byte ptr [eax+ecx]--把位於內存地址eax+ecx的byte大小的值放入al寄存器

綜括號"[]"用來從括號間的內存地址處取值,沒有括號就只是這個值,寄存器和內存地址也可以.

10--mov cx,[eax]--把位於內存地址eax的word大小的值移入cx寄存器
在mov cx, [eax]中,處理器會先查看eax裝有什麼值(=內存地址),然後在那個內存地址中有什麼值,並把這個word(16位,因為目標-cx-是個16位寄存器)移入cx。
-------------------------------------------------------------------------------
cmp指令中用到"[]"

1--cmp dword ptr [ebp-04], 00000007--把位於內存地址ebp-04的dword大小的值與00000007比較
2--cmp byte ptr [si], 00 --把位於內存地址si的byte大小的值與00比較

-------------------------------------------------------------------------------
lea指令中用到"[]"

1--lea di, [bp-22] ----把bp-22的有效值(=內存地址)給di
-------------------------------------------------------------------------------
test指令中用到"[]"

1--test byte ptr [bx+08FD]
--將位於內存地址bx+08FD處的byte大小的值邏輯與,判斷運算結果是否為00

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved