顯示具有 ASM 標籤的文章。 顯示所有文章
顯示具有 ASM 標籤的文章。 顯示所有文章

2015年1月30日 星期五

ASM 基本指令介紹


作者:勇ㄅㄟㄅㄟ
來源:http://ibf.tw/uUHfw
備註:如果作者不希望被轉帖到此處,請告知,小弟會馬上刪帖。
-------------------------------------------------------------------------------------



一般指令
SymbolDescription
MOV x,y assign y 的值給 x
ADD x,y 將 x, y 的值相加,並將結果存至 x
SUB x,y 將 x, y 的值相減,並將結果存至 x
CMP x,y 比較 x, y 的值,其運算與 SUB 類似,但其運算後的值不儲存,只會影響 flags 的值
DEC x 將 x 的值減 1
INC x 將 x 的值加 1
NEG x 將 x 的值做 2's complement
LEA x,y 將 y 的地址給 x
JMP x 無條件、無範圍限制地跳到 x( destination label ) 的地方
JCXZ x 若 CX 的值為 0,則跳到 x( destination label ) 的地方
LOOP x 用 CX 計數(指能用CX)的 for loop,每次遇到此指令,CX 的值都將自動被減 1,若 CX 不等於 0,則會跳到 x( destination label ) 的地方
x EQU y 在程式中,遇到 x 出現的地方都替換為 y,如:LF EQU 0Dh,就是將 LF 替換為 0Dh
XCHG x,y 交換 x 與 y 的值

Assembly 筆記 - Ch3 組合語言基礎

作者:alog
來源:http://ibf.tw/xqzCv
備註:如果作者不希望被轉帖到此處,請告知,小弟會馬上刪帖。
-------------------------------------------------------------------------------------

●內建資料型態
型態使用
BYTE8-bit無號整數
SBYTE8-bit有號整數
WORD16-bit無號整數
SWORD16-bit有號整數
DWORD32-bit無號整數
SDWORD32-bit有號整數
FWORD48-bit整數
QWORD64-bit整數
TBYTE80-bit整數
REAL432-bit (4 byte) IEEE短實數
REAL864-bit (8 byte) IEEE長實數
REAL1080-bit (10 byte) IEEE延伸實數
less ...

Assembly 筆記 - Ch4 資料轉移、定址與算術

作者:alog
來源:http://ibf.tw/xqzCv
備註:如果作者不希望被轉帖到此處,請告知,小弟會馬上刪帖。
-------------------------------------------------------------------------------------

資料轉移指令 ( Data Transfer Instructions )     * mov 指令
          mov 目的 , 來源       
         ◆ 兩個運算元要一樣的大小
         ◆ 兩個運算元不能是記憶體單元
         ◆ CS , EIP 及 IP 不能是目的運算元
         ◆ 一個立即值不能移至區段暫存器
         ◆ 區段暫存器只能在 real-mode下執行
    * movzx 指令 (複製較小值到較大值,整數的補零) 
         movzx r32 , r/m8         movzx r32 , r/m16
         movzx r16 , r/m8    ; 8bit來源運算元補零擴展到16bit目的運算元
         ◆ 只能用在無號整數    * movsx 指令 (複製較小值到較大值,符號擴展) 
         movzx r32 , r/m8
         movzx r32 , r/m16
         movzx r16 , r/m8  ; 低八位元複製後,取出來源最高位元,複製到目的運算元高八位元
         ◆ 只能用在有號整數

Assembly 筆記 - Ch5 程序

作者:alog
來源:http://ibf.tw/xqzCv
備註:如果作者不希望被轉帖到此處,請告知,小弟會馬上刪帖。
-------------------------------------------------------------------------------------

Library     * Clrscr : 清除螢幕
          call  Clrscr

     * Crlf : 換行
           call  Crlf

     * Delay : 暫停程式的執行狀態
           mov    eax , 1000     ; 1秒
           call     Delay;
  
     * DumpMem : 將一段範圍內的記憶體內容以16進位的格式寫入到標準輸出上
    array  DWORD 1,2,3,4,5,6,7,8,9,0Ah,0Bh   
          mov   esi  , OFFSET array             ; 起始位置
          mov   ecx , LENGTHOF array      ; 元數個數
          mov   ebx , TYPE array                ;  單位大小
          call    DumpMem          

Assembly 筆記 - Ch6 條件處理


作者:alog
來源:http://ibf.tw/xqzCv
備註:如果作者不希望被轉帖到此處,請告知,小弟會馬上刪帖。
-------------------------------------------------------------------------------------

布林和比較指令 ( Boolean and Comparsion Instructions )
     * CPU旗標
          ◆ 運算的結果為零,則設定 zero flag
          ◆ 運算結果所產生的目的運算元結果太大或太小(容器不夠裝),carry flag 會被設定
          ◆ Sign flag是目的運算元高位元的複製,被設定表示為負,被清除為正
          ◆ 指令產生無效的有號結果(al=+127, al+1爆 , al = -128 , al-1爆),over flag會被設定
          ◆ 運算結果造成目的運算元低位元裡其值為 1 的位元為偶數時,parity flag會被設定

    * AND指令 : 兩運算元中每對相對應位元間的 and布林運算,結果存放目的運算元
                              AND  目的運算元 , 來源運算元
                              AND   reg , reg
                              AND   reg , mem
                              AND   reg , imm
                              AND   mem , reg
                              AND   mem , imm
        ◆FLAGS : 總是清除 over及carry flag , 根據目的運算元的值修改 sign、zero、parity flags
        ◆常用來清除選定的位元並保持其它未被選擇位元不變
                            0  0  1  1  1  0  1  1
             AND        0  0  0  0  1  1  1  1
                         ----------------------------  
                           0   0  0  0  1  0  1  1             ; 高四位元被清除,較低四位元保持不變
        ◆將字元轉換成大寫字母
                   01100001 = 61h('a')
           and   11011111 = DFh           ;  將字元與11011111作 and 運算轉成大寫
           -----------------------------------
                   01000001 = 41h('A')