本書只重點介紹整數指令,對浮點數指令和操作系統型指令不作敘述,有需要的讀者可查閱有關資料。
整數指令按功能分為以下七種類型。
數據傳送類指令;
算術運算類指令;
邏輯運算類指令;
串操作類指令;
控制轉移類指令;
處理器控制類指令;
高級和保護控制類指令。
本書約定標記:寄存器(Reg)、存儲器(Mem)、段寄存器(Seg)、累加器(Acc)、立即數(Imm)、I/O端口(Port),源操作數 (源)、目標操作數(目標)。狀態標志:進位(CF)、符號(SF)、零(ZF)、溢出(OF)、輔助進位(AF)、奇偶(PF)。指令的操作數可以是8 位、16位或32位,尋址寬度可以是16位或32位。各類指令以表格形式給出,僅對程序設計中常用的指令加以解釋。
3.4.1 數據傳送類指令
數據傳送指令將數據、地址或立即數(稱源操作數)傳送到寄存器或存儲單元中(稱目標操作數),完成寄存器與寄存器,寄存器與存儲單元,I/O端口和累加器之間的字節、字和雙字的傳送,傳送指令大多都不影響標志位。
3.4.2 算術運算類指令
算術運算類指令有加、減、乘、除等,可進行8位、16位和32位的運算。參加運算的操作數可以是二進制數和十進制數(BCD碼);這些數可以是無符號 數,也可以是帶符號數。算術運算指令的主要特點是執行結果影響標志寄存器的狀態標志位OF、SF、ZF、AF、PF、CF。
3.4.3 控制轉移類指令
在微機系統中,指令執行的順序由CS和IP(EIP)決定。CS存放當前代碼段的段基址,IP(EIP)存放指令的偏移地址。在正常順序執行時,要執行 的指令已經由總線接口部件BIU,按CS和IP(EIP)的內容從存儲單元中取出存入指令隊列中;CPU執行一條指令后,按指令隊列中的指令順序,執行下 一條指令。但實際上經常會遇到改變程序執行流程的情況,程序轉移指令就是用改變CS和IP(EIP)的內容,使程序執行的順序發生變化。當程序需要發生轉 移時,存放在指令隊列中的指令將被清除,BIU根據改變后的CS和IP(EIP)重新確定指令的地址,并按此地址將指令從存儲單元中取出,重新送入指令隊 列,并送到CPU去執行。
指令系統中有以下四類控制轉移指令:
無條件轉移指令;
條件轉移指令;
循環控制指令;
中斷指令。
3.4.4 處理機控制指令
處理機控制指令完成簡單的控制功能。
由表中可看到,在指令系統中允許用指令操作的標志位有CF、DF和IF三位。其中DF用于串運算中決定地址變化的方向,DF0時串運算為地址增量方向執 行,DF1串運算為地址減量方向執行。IF用于可屏蔽中斷,當IF0時表示禁止可屏蔽中斷(關中斷),IF1時表示允許可屏蔽中斷(開中斷)。
除上述指令外,32位微機增加了位操作的指令,包括位測試指令和位掃描指令兩類,從而增加指令的功能,下面加以介紹。
功能:撤銷前面ENTER指令的動作。當退出子程序時,應撤銷堆棧框架的設定。
在C語言中,不允許函數的嵌套調用,故C語言的編譯程序中只采用ENTER M,0的格式。Pascal語言則允許子程序和函數的多層嵌套調用,故可采用ENTER M, N的格式。有關操作系統型指令和浮點運算指令本書不再敘述,需要時可查閱有關手冊。