彙編語言源程式
![](https://img.laitimes.com/img/__Qf2AjLwojIjJCLyojI0JCLicmbw5ScL5UWklWYmd3RtN0TWlzLcJDMvwVNw8CXyIDMy8CX0VmbukGbvxmLyM3Lc9CX6MHc0RHaiojIsJye.png)
- 彙編語言源程式:用助記符編寫
- 彙程式設計式:源程式的編譯程式
程式執行過程
語句類型和格式
語句類型
- 指令性語句:CPU執行的語句,能夠生成目标代碼
- 訓示性語句:CPU不執行,由彙程式設計式(編譯器)執行的語句,不生成目标代碼
語句格式
指令性語句:
[ 标 号 : ] [ 前 綴 ] 助 記 符 [ 操 作 數 ] , [ 操 作 數 ] [ ; 注 釋 ] [标号:]\quad[字首]\quad助記符\quad[操作數],[操作數]\quad[;注釋] [标号:][字首]助記符[操作數],[操作數][;注釋]
- 串操作指令的助記符前面可以加字首,字首不是指令,它表示一種循環重複執行的概念,和助記符連在一起可構成循環體
- 無條件重複字首
- 條件重複字首
- 标号代表指令的符号位址
- 标号後要有冒号
訓示性語句:
[ 名 字 ] 僞 指 令 助 記 符 操 作 數 [ , 操 作 數 , ⋅ ⋅ ⋅ ] [ ; 注 釋 ] [名字]\quad僞指令助記符\quad操作數[,操作數,···]\quad[;注釋] [名字]僞指令助記符操作數[,操作數,⋅⋅⋅][;注釋]
- 名字是變量的符号位址,其後不加冒号
語句中的操作數
- 寄存器
- 存儲器單元
- 常量
- 變量或标号
- 表達式
- 算術運算:加減乘除、取模
- 邏輯運算:與或非異或
- 關系運算
- 取值運算和屬性運算
- 其他運算
- LENGTHOF運算符:計算數組中元素的個數
- TYPE運算符傳回變量單個元素的大小,這個大小是以位元組為機關計算
僞指令
- 僞指令:由彙程式設計式(編譯器)執行的“指令系統”
- 作用: 幫助計算機了解指令性語句
- 定義變量;
- 配置設定存儲區
- 定義邏輯段;
- 訓示程式開始和結束;
- 定義過程
資料定義僞指令
- 用于定義資料區中變量的類型及其所占記憶體空間的大小
- 格式:
- 資料定義僞指令助記符:
- DB(Define Byte):定義的變量為位元組型
- 每一個操作數占一個位元組單元
- DW(Define Word):定義的變量為字類型
- 每一個操作數占一個字單元
- DD(Define Double Word):定義的變量為雙字型
- DQ(Define Quadword):定義的變量為四字型
- DT(Define Tenbytes):定義的變量為十位元組型
- DB(Define Byte):定義的變量為位元組型
定義字元串必須用DB僞指令助記符
【例】資料定義僞指令定義的變量在記憶體中的分布
- 重複操作僞指令助記符:用于配置設定存儲區
- "?"的作用:
【例】變量在記憶體中的存儲配置設定
符号定義僞指令
- 作用類似C語言中的宏
段定義僞指令
- 用來定義一個邏輯段
- 邏輯段的段名就是段基位址(一個數)
【例】段定義僞指令
設定段寄存器僞指令
- 用段寄存器辨別邏輯段是什麼段
- 資料段
- 附加段
- 堆棧段
- 代碼段
結束僞指令
- 标号通常是第一條指令性語句前的标号
源程式基本結構
【例】一個完整源程式結構
- 段寄存器初始化後次系統才會配置設定前面定義的記憶體空間
過程定義僞指令
- 用來定義一個子程式
- 過程名是子程式第一條指令性語句在記憶體的符号位址
- 若為近過程,
可省略NEAR
- 過程體的最後一條指令必須是
RET
【例】過程定義及調用
- 子程式用到的寄存器,為了不影響調用程式的寄存器原來的值,需要在執行子程式之前,将調用程式原來寄存器的值儲存到堆棧,在執行子程式結束後,将調用程式原來寄存器的值從堆棧恢複(先進後出)
宏指令僞指令
[外鍊圖檔轉存失敗,源站可能有防盜鍊機制,建議将圖檔儲存下來直接上傳(img-CR6z0uVD-1651766032141)(https://s2.loli.net/2022/05/02/QhF7z6YD1K9X5Re.png)]
- 與子程式的不同:不能通過編譯連結,成為一個獨立的程式,隻能是源程式的一部分,不能被其他源程式調用
【例】宏定義與宏調用
- 該宏的作用:X+Y賦給Z
調整偏移量僞指令
[外鍊圖檔轉存失敗,源站可能有防盜鍊機制,建議将圖檔儲存下來直接上傳(img-gvtBRtBk-1651766032143)(https://s2.loli.net/2022/05/02/p5djRnJcomIx2UC.png)]
流程控制僞指令
.REPEAT 僞指令執行循環體,然後測試 .UNTIL 僞指令後面的運作時條件:
.REPEAT
statements
.UNTIL condition
.WHILE 僞指令在執行循環體之前測試條件:
.WHILE condition
statements
.ENDW