查看單個文章
舊 2005-12-14, 03:00 PM   #6 (permalink)
mini
管理版主
 
mini 的頭像
榮譽勳章
UID - 4144
在線等級: 級別:96 | 在線時長:9698小時 | 升級還需:99小時級別:96 | 在線時長:9698小時 | 升級還需:99小時級別:96 | 在線時長:9698小時 | 升級還需:99小時級別:96 | 在線時長:9698小時 | 升級還需:99小時級別:96 | 在線時長:9698小時 | 升級還需:99小時級別:96 | 在線時長:9698小時 | 升級還需:99小時
註冊日期: 2002-12-07
文章: 13264
精華: 0
現金: 26269 金幣
資產: 3024079 金幣
預設

那些是暫存器名稱

mov EAX,DWORD PTR [x1]

mov 是複製指令
EAX 是32位元 累加暫存器 全名,可容納一個DWORD資料
語法:
   31~16  15~08 07~00 bit
|--------------------------------|
|              |  AH  |  AL  | <===整個稱為 EAX
|--------------------------------|
DWORD PTR 一個雙字組(32bit)指標,指向後面變數的 記憶體位址
[x1] 表示 x1的記憶體位址
所以 DWORD PTR [x1] 表示指向x1
因為只能存放DWORD長度的資料
所以DWORD PTR [x1] 等於 90008400h
所以:
mov EAX,DWORD PTR [x1]
表示把 90008400h 放到 EAX 裡
(DWORD PTR [x1+4] 表示指向x1 再加4byte的位址,等於 A02B0001h)


至於
Q: 為什麼要用到EAX EBX ECX EDX 這麼多的暫存器?
A: 因為需要嘛~ ^^||

比如
loop 迴圈指令會用到 計數暫存器 ECX
執行到 loop 時 ECX=ECX-1
直到 ECX=0 即執行 loop 的下一條指令 (跳脫loop迴圈)
比如
語法:
;計算1加到100 (1+2+3+...+100)
start:
 xor   ax , ax   ; ax清除為0
 mov bx , ax   ; bx = 0,bx也清為零
 mov cx , 100 ; 設定迴圈次數=100
C_ADD:
 inc   bx        ; bx=bx+1
 add  ax , bx  ; ax=ax+bx
 loop C_ADD  ; cx=cx-1且重複count至cx=0
  :                ; loop結束時ax等於 (1加到100的值)
movzx 指令 (複製較小值到較大值)
比如
要將 bl 內容複製到 EAX 裡
bl 只有一個byte長度
EAX 有4個byte長度
此時就用
movzx EAX,bl

這裡有一些教學
http://140.111.104.1/kocp/mpu/m4/m4index.htm
mini 目前線上  
送花文章: 2001, 收花文章: 7962 篇, 收花: 26757 次
回覆時引用此帖