2.3 匯編語言指令
- 指令(instruction)是一種語句,它在程序匯編編譯時變得可執行。
- 匯編器將指令翻譯為機器語言字節,並且在運行時由 CPU 加載和執行。
指令組成
一條指令有四個組成部分:
- 標號(可選)
- 指令助記符(必需)
- 操作數(通常是必需的)
- 注釋(可選)
標號(label)
- 標號(label)是一種標識符,是指令和數據的位置標記。
- 標號位於指令、變量的前端,表示指令的地址,表示變量的地址。
標號的兩種類型
- 數據標號
- 代碼標號
數據標號
- 數據標號標識變量的位置,它提供了一種方便的手段在代碼中引用該變量。
count DWORD 100 ;定義了一個名為 count 的變量
代碼標號
- 標記轉移的目的地。
- 下面的 JMP 指令創建一個循環:將程序控制傳遞給標號 target 標識的位置:
target: mov ax,bx
......
jmp target
指令助記符
- 是標記一條指令的短單詞(有助於記憶的符號)
| 助記符 | 說明 | 助記符 | 說明 |
|---|---|---|---|
| MOV | 傳送(分配)數值 | MUL | 相乘 |
| ADD | 相加 | JMP | 跳轉到一個新位置 |
| SUB | 相減 | CALL | 調用一個子程序 |
操作數
- 操作數是指令輸入輸出的數值。
- 操作數的個數范圍是 0〜3 個,每個操作數可以是寄存器、內存操作數、整數表達式和輸入輸岀端口。
- 生成內存操作數有不同的方法
- 比如,使用變量名、帶方括號的寄存器等。變量名暗示了變量地址,並指示計算機使用給定地址的內存內容。下表列出了一些操作數示例:
操作數有固有順序。
當指令有多個操作數時,通常第一個操作數被稱為目的操作數,第二個操作數被稱為源操作數(source operand)。
| 示例 | 操作數類型 | 示例 | 操作數類型 |
|---|---|---|---|
| 96 | 整數常量 | eax | 寄存器 |
| 2+4 | 整數表達式 | count | 內存 |
現在來考慮一些包含不同個數操作數的匯編語言指令示例。
比如,STC 指令沒有操作數:
stc ; STC 進位標志位置 1
INC 指令有一個操作數:
inc eax ;EAX 加 1
MOV 指令有兩個操作數:
mov count, ebx ;將 EBX 傳送給變量 count
一般情況下,目的操作數的內容由指令修改。比如,在 mov 指令中,數據就是從源操作數復制到目的操作數。
IMUL 指令有三個操作數,第一個是目的操作數,第二個和第三個是進行乘法的源操作數:
imul eax,ebx,5 ;在上例中,EBX 與 5 相乘,結果存放在 EAX 寄存器中。
注釋
注釋有兩種指定方法:
- 單行注釋,用分號
; - 塊注釋,用 COMMENT 偽指令和一個用戶定義的符號開始,直到相同的用戶定義符號出現為止。
塊注釋
示例如下:
COMMENT !
This line is a comment.
This line is also a comment.
!
其他符號也可以使用,只要該符號不出現在注釋行中:
COMMENT &
This line is a comment.
This line is also a comment.
&
