![]() |
|
|||||||
| 論壇說明 |
|
歡迎您來到『史萊姆論壇』 ^___^ 您目前正以訪客的身份瀏覽本論壇,訪客所擁有的權限將受到限制,您可以瀏覽本論壇大部份的版區與文章,但您將無法參與任何討論或是使用私人訊息與其他會員交流。若您希望擁有完整的使用權限,請註冊成為我們的一份子,註冊的程序十分簡單、快速,而且最重要的是--註冊是完全免費的! 請點擊這裡:『註冊成為我們的一份子!』 |
|
|
主題工具 | 顯示模式 |
|
|
#6 (permalink) |
|
管理版主
![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() |
那些是暫存器名稱
mov EAX,DWORD PTR [x1] mov 是複製指令 EAX 是32位元 累加暫存器 全名,可容納一個DWORD資料 語法:
31~16 15~08 07~00 bit |--------------------------------| | | AH | AL | <===整個稱為 EAX |--------------------------------| [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的值) 比如 要將 bl 內容複製到 EAX 裡 bl 只有一個byte長度 EAX 有4個byte長度 此時就用 movzx EAX,bl 這裡有一些教學 http://140.111.104.1/kocp/mpu/m4/m4index.htm |
|
|
送花文章: 2061,
|