| 一般指令 | |
|---|---|
| Symbol | Description |
| 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 的值 |
| 回頂端 | |
| Signed Jumps | ||
|---|---|---|
| Symbol | Description | Condition for Jumps |
| JG / JNLE | jump if greater than, jump if not less than or equal to | ZF = 0 and SF = OF |
| JGE / JNL | jump if greater than or equal to, jump if not less than or equal to | SF = OF |
| JL / JNGE | jump if less than, jump if not greater than or equal | SF <> OF |
| JLE / JNG | jump if less than or equal, jump if not greater than | ZF = 1 or SF <> OF |
| Unsigned Signed Jumps | ||
| Symbol | Description | Condition for Jumps |
| JA / JNBE | jump if above, jump if not below or equal | ZF = 0 and CF = 0 |
| JAE / JNB | jump if above or equal, jump if not below | CF = 0 |
| JB / JNAE | jump if below, jump if not above or equal | CF = 1 |
| JBE / JNA | jump if equal, jump if not above | CF = 1 or ZF = 1 |
| Single-Flag Jumps | ||
| Symbol | Description | Condition for Jumps |
| JE / JZ | jump if equal, jump if equal to zero | ZF = 1 |
| JNE / JNZ | jump if not equal, jump if not zero | ZF = 0 |
| JC | jump if carry | CF = 1 |
| JNC | jump if no carry | CF = 0 |
| JO | jump if overflow | OF = 1 |
| JNO | jump if no overflow | OF = 0 |
| JS | jump if sign negative | SF = 1 |
| JNS | jump if nonnegative sign | SF = 0 |
| JP / JPE | jump if parity even | PF = 1 |
| JNP / JPO | jump if parity odd | PF = 0 |
| 回頂端 | ||
| Logic, Shift, and Rotate Instructions | |
|---|---|
| Symbol | Description |
| NOT x | 對 x 做 1's complement(原本的 0 會變成 1,1 會變成 0) |
| AND x,y | 讓 x 與 y 做 AND 邏輯運算,並把結果存在 x |
| OR x,y | 讓 x 與 y 做 OR 邏輯運算,並把結果存在 x |
| XOR x,y | 讓 x 與 y 做 OR 邏輯運算,並把結果存在 x |
| SHL x,y | 將 x 往左 shift y bits(x 被推到最左邊超出範圍的位數放入 CF,不足的右邊位數補 0) |
| SAL x,y | 功能與 SHL 完全相同,但此指令通常被用在 數學運算 的情況下(如: x * 2y) |
| SHR x,y | 將 x 往右 shift y bits(x 被推到最右邊超出範圍的位數放入 CF,不足的左邊位數補 0) |
| SAR x,y | 功能與 SHR 相似(x 被推到最右邊超出範圍的位數放入 CF,不足的左邊位數補入原本 msb 的 bit 值),此指令通常被用在 數學運算 的情況下(如: x / 2y) |
| ROL x,y | 將 x 往左 shift y bits(x 被推到最左邊超出範圍的位數放入 CF、以及放入 x 的 lsb) |
| ROR x,y | 將 x 往右 shift y bits(x 被推到最右邊超出範圍的位數放入 CF、以及放入 x 的 msb) |
| RCL x,y | 將 x 往左 shift y bits(x 被推到最左邊超出範圍的位數放入 CF,CF 的值放入 x 的 lsb) |
| RCR x,y | 將 x 往右 shift y bits(x 被推到最右邊超出範圍的位數放入 CF、CF 的值放入 x 的 msb) |
| P.S. 關於 shift 與 rotate 的指令,若是欲將 y 設為變數,則只能使用 CL,不可使用其他變數或是 register | |
| 回頂端 | |
| Stack & procdure instructions | |
|---|---|
| Symbol | Description |
| PUSH x | 將 x ( x 必須為 word ) push 進 stack 中(SP 會先加 1,再將 x 加入 stack 中) |
| PUSHF | 將 FLAGS push 進 stack 中 |
| POP x | 從 stack 中 pop 出一個 word 放入 x(SP 會先 pop,再減 1) |
| PUSHF | 從 stack 中 pop 出一個 word 放入 FLAGS 中 |
| CALL | 呼叫 procedure |
| RET x | 從 procedure 中跳出,若有給 參數 x,則在 RET 之後,會將 SP 往下加 x bytes |
| 回頂端 | |
| Multiplication and Division Instructions | |
|---|---|
| Symbol | Description |
| MUL x | 若 x 的資料型態是 byte,將 x 與 AL 相乘,將結果儲存於 AX 若 x 的資料型態是 word,將 x 與 AX 相乘,將結果儲存於 DX 與 AX 此指令通常用來運算 unsigned multiplication |
| IMUL x | 若 x 的資料型態是 byte,將 x 與 AL 相乘,將結果儲存於 AX 若 x 的資料型態是 word,將 x 與 AX 相乘,將結果儲存於 DX 與 AX 此指令通常用來運算 signed multiplication |
| DIV x | 若 x 的資料型態是 byte,將 x 除以 AX(AX 為被除數),將餘數儲存於 AH、將商儲存於 AL 中 若 x 的資料型態是 word,將 x 除以 DX:AX(DX:AX 合起來看為被除數),將餘數儲存於 DX、將商儲存於 AX 中 此指令通常用來運算 unsigned division |
| IDIV x | 若 x 的資料型態是 byte,將 x 除以 AX(AX 為被除數),將餘數儲存於 AH、將商儲存於 AL 中 若 x 的資料型態是 word,將 x 除以 DX:AX(DX:AX 合起來看為被除數),將餘數儲存於 DX、將商儲存於 AX 中 此指令通常用來運算 signed division |
| CWD | 當使用 IDIV 時,使用此指令可以將未使用的被除數左半部的 bits 全數填入被除數右半部的 signed bit(此指令適用於 word 的除法) |
| CBW | 當使用 IDIV 時,使用此指令可以將未使用的被除數左半部的 bits 全數填入被除數右半部的 signed bit(此指令適用於 byte 的除法) |
| 回頂端 | |
| String operations 相關指令 | |
|---|---|
| Symbol | Description |
| CLD | 把 DF 設定為 0 |
| STD | 把 DF 設定為 1 |
| REP MOVSB/MOVSW | 若 CX 還不是 0 時,就一直重複做 MOVSB 或是 MOVSW 的動作,每做一次 CX 自動減 1 |
| REPNE SCASB/SCASW | 若 CX 還不是 0 時,或是還沒找到與存放於 AL 或 AX 相同的資料時,就一直重複做 SCASB 或是 SCASW 的動作,每做一次 CX 自動減 1 |
| REPE CMPSB/CMPSW | 若 CX 還不是 0 時,或是還沒找到與 destination arry 中不相同的資料時,就一直重複做 CMPSB 或是 CMPSW 的動作,每做一次 CX 自動減 1 |
| String operations | |||
|---|---|---|---|
| 以下 string operations 若 DF 被設定為 「0」,每執行完一次指令,有使用到 DI 或 SI 的, DI 或 SI 將會自動「加 1 or 2」 若 DF 被設定為 「1」,每執行完一次指令,有使用到 DI 或 SI 的, DI 或 SI 將會自動「減 1 or 2」 (若是使用 xxxSB,每次調整 1,若是使用 xxxSW,則次調整 2) |
|||
| Symbol | Source | Destination | Description |
| MOVSB / MOVSW | DS : SI | ES : DI | move one byte from source to destination |
| STOSB / STOSW | AL / AX | ES : DI | move AL/AX to the destination at ES:DI |
| LODSB / LODSW | DS : SI | AL / AX | move one byte from source at DS:SI into AL/AX |
| SCASB / SCASW | AL / AX | ES : DI | subtracts the string byte at ES:DI from AL/AX |
| CMPSB / CMPSW | DS : SI | ES : DI |
the byte/word at DS : SI - the byte/word at ES:DI |
文章標籤
全站熱搜

留言功能已依作者設定調整顯示方式