第3章 指令系統
摘要 指令系統是計算機0所能執行的全部指令的集合,它描述了計算機內部的全部控制信息和“邏輯判斷”能力,是學習匯編語言程序設計的基礎。本章首先介紹80486微處理器指令系統的數據類型、尋址方式、指令格式,然后詳細介紹80486微處理器的指令系統,包括基本指令和擴展指令,重點應掌握各條指令的格式、功能、操作及對標志位的影響。
3.1 80486微處理器的數據類型和指令格式
首先介紹以下三個基本概念。
① 指令:指示計算機執行某種操作的命令,由一串二進制數碼組成。
② 指令系統:計算機所能執行的全部指令的集合,即CPU所能識別的全部指令。
③ 程序:為實現特定目標或解決特定問題而用計算機語言編寫的指令序列的集合,由計算機能識別的、按一定順序排列的基本操作命令組成。
3.1.1 數據類型
80486微處理器在其內部整數執行部件和浮點運算部件的支持下,可以處理以下6種類型的數據。
1.無符號二進制數
無符號二進制數包括如下內容。
① 字節:無符號8位二進制數。
② 字:兩個相鄰字節組成的無符號16位二進制數。
③ 雙字:4個相鄰字節組成的無符號32位二進制數。
2.有符號二進制定點整數
這類數有正、負之分,均以補碼表示,有8位數(字節)、16位數(字)、32位數(雙字)、64位數(四字)4種。80486微處理器支持8位、16位和32位有符號整數。其最高位為符號位。
3.浮點數(實數)
80486微處理器中的浮點數由符號位、有效數字(尾數)和階碼三個字段組成。浮點數由FPU支持,分為單精度(32位)、雙精度(64位)和擴展精度(80位)三種。
單精度浮點數包括1位符號,8位階碼,24位有效數字(顯示23位,隱含1位)。
雙精度浮點數包括1位符號,11位階碼,53位有效數字(顯示52位,隱含1位)。
擴展精度浮點數包括1位符號,15位階碼,64位有效數字(隱含1位,同時小數點“.”也被隱含)。
4.BCD碼
BCD碼分為壓縮BCD碼和非壓縮BCD碼兩種。
壓縮BCD碼的每個字節包含兩個十進制數,非壓縮BCD碼的每個字節只包含一個十進制數。
CPU支持8位壓縮BCD碼和非壓縮BCD碼,FPU只支持壓縮BCD碼,且最大長度為80位(10字節,20個BCD碼)。
5.串數據
CPU支持串數據。
位串:一串連續的二進制數據。
字節串:一串連續的字節數據。
字串:一串連續的字數據。
雙字串:一串連續的雙字數據。
32位微處理器,可處理的串數據最長可達(232-1)字節。
6.ASCII碼數據
ASCII碼數據包括ASCII碼字符串和ASCII碼兩種。
3.1.2 指令格式
80486匯編語言指令由4部分組成,格式如下:
[標號:] [前綴] 助記符 [操作數] [;注釋]
其中,方括號表示的部分為任選部分,在具體指令中可有可無。
1.標號(label)
標號即指令語句的標識符,也可以理解為給該指令所在地址取的名字,或稱為符號地址。它可以省略,是可供選擇的項。標號可由字母(包括英文26個大小寫字母)、數字(0~9)及一些特殊符號組成。但是,第一個字符只能是字母,且字符總數不得超過31個(一般為1~8個字符)。在標號的字符中間可插入空格或連接符,標號和后面的助記符之間必須用冒號分隔開。一般來說,跳轉指令的目標語句或子程序的首語句必須設置標號。
2.前綴及助記符(prefixes and mnemonic)
助記符是一些與指令操作類型和功能意義相近的英文縮寫,用來指示指令語句的操作類型和功能,也稱為操作碼。所有的指令語句都必須有操作碼,不可缺少。在一些特殊指令中,有時需要在助記符前面加前綴,它和助記符配合使用,從而實現某些附加操作。
3.操作數(operand)
操作數,即參與操作的數據。不同的指令對操作數的要求也各不相同,有的不帶任何操作數,有的要求帶一個或兩個操作數。若指令中有兩個操作數,中間必須用逗號分隔開,并且稱逗號左邊的操作數為目標操作數,右邊的操作數為源操作數(還有的指令帶三個操作數)。操作數與助記符之間必須以空格分隔。
4.注釋(description)
注釋是對有關指令語句及程序功能的標注和說明,用于增加程序的可讀性。注釋不影響程序的執行(匯編時不產生目標代碼),也并非所有的語句都要加注釋,可以省略。程序中可采用英文注釋,也可用中文注釋。注釋與操作數之間用分號分隔,分號作為注釋的開始。