簡介
針對按機型而異的助記符的弊病,微處理機的通用助記符系統提出了一種更方便地實現微機軟體共享,更有利於彙編語言程式設計教學以及混合多微機系統的開發和套用的通用彙編系統(General Assembly System,簡稱GAS)及其實現方法。
GAS包含四個方面的內容,即通用助記符(GM)的概念和定義,通用助記符指令系統(General Mnemonic Instruction Set,簡稱GMIS);通用彙編語言(General Assem-bly Language,簡稱GAL),通用彙編程式(General Assembler,簡稱GA)和通用反彙編程式(General Disassembler,簡稱GDA)。
通用助記符指令系統實際上就是若干不同微機的指令系統的功能性並集。因此,每一具體機種的指令系統以子集形式存在予其中(原理上,通用助記符系統可任意擴充以至包含全部市售的微機指令系統)。用此系統的助記符編寫的程式可經過通用彙編程式轉移戒若干微處理器的機器碼,從而在這些機器上運行。
GAS包含M6800,6502,8080,8085和Z80五種機器的指令系統,但由於這幾種機器相當普遍,幾乎占據了整個八位微處理器的套用領域,所以這樣的GAS。實際上是“通用的矽。當然,隨著有更強生命力的新機器的出現,GAS本身還應當進一步擴展。
特點
通用彙編系統具有下述幾個重要特點;
(1)通用助記符採用一般ASCIl碼鍵盤所具備的標準字元,它以簡潔而直觀的形式代表各種指令,使指令的操作對象,定址方式及其功能一目了然,易於掌握,便於記憶。
(2)統一了多種機器共有操作的助記符形式,而各機的一些獨特的指令操作則豐富了系統的總的功能。
(3)構造丁一種通用彙編程式和通用反彙編程式,能實現程式語言形式的各種靈活轉換,從而便於研究、比較不同機器的性能。
不難看出,利用通用彙編系統的這些優點,我們就能很方便地提高系統性能。
①提高一般程式設計師經驗和編程技術的利用率。按機型而異的助記符,使我們無法方便地把針對某一機種的已有程式改為另一機種的彙編語言程式,任何一種改變都得童編、重調程式。這在軟體費用相對於硬體費用直線上升的今天,簡直是無法容忍的。使用了GAS,則就可藉助於GDA把某一機器上現有的目的程式轉化為GAL編寫的源程式,再通過GA彙編為能直接在另一種機器上運行的目的程式。這不但可省去對程式的改寫、黃調等步驟,而且能使一個只懂一種彙編語言的用戶,卻可利用好多種機器上的彙編語言程式,並使其轉化到他所能理解的那種彙編語言形式。
②提高微機軟體教學功效。迄今為止的微機教科書通常都向學生介紹幾種典型微機的指令系統。由於指令條目繁多,其助記符各自不同,很易使初學者望而生畏,或在注意了指令系統的細節特徵時卻忽視了它們的根本特性和原理。有了GAS,則就大大方便了形象化教學,而且在學習指令系統時,還可很容易地實現個別的分析比較和總體的概括綜合。在學習彙編語言程式設計時,則可徹底擺脫對某一類機種的依附,不受特定指令系統的羈絆,有乖Il子對程式設計理論的學習和編程技巧的掌握。
⑧提高程式的可讀性和降低編程時的出錯率。通用助記符編寫的程式雖不及高級語富,但卻比較一般助記符更接近於人表述問題的方式,所以編製程序文本時可減輕注釋工作量,且易於閱讀理解,還可避免許多因使用指令量大而引起的技術性細小錯誤。
④提高不同機種的混合多微機系統的功能和降低開銷。多微機系統對實時回響速度、信息傳輸控制、內部機問耦合都有較高的要求,面向過程的高級算法語言是力所不及的。然而若系統內各機只能接受自己那一種彙編語言,則系統就不能很好地作為整體來發揮作用,麗且還得為每個機器配上一套彙編程式,浪費了系統資源,也增加了開銷,在系統中首先要掌握用的應當是各機最重要的和最普遍有效的特徵。GAS則恰到好處地解決了這個問題,弩轉箭一套通用彙編模組,當接受到系統給予的不同彙編數據基後,其就能把輸入的程式彙編成相應的機器代碼段,送到這一機器上運行。顯然,系統將因而大大增強功能和提高效率。
通用助記符(GM)
GAS為達到其通用地“助記"功能而定義下列基本符號。 -’
暫存器
r或s表示任一八位暫存器或累加器。rr或ss表示任一十六位暫存器或八位暫存器對。
賦值號
“:"表示將其右端指定的或計算得到的結果送入其左端指出的存貯位。“:”可與各種運算符號組合使甩。 “:="表示筒單賦值;而“t=t"則表示符號左端和右端規定的暫存器或存貯單元的內容相互交換。
數據和地址
用數字“12"表示單位元組十六進制數據, “1234”則表示雙位元組十六進制數據。在數字前寫上“M”則表示此數據為地址值。對某位元組存貯單元中的位序,則在單元(地址)號後加上“·S”(表示第S位),S可取0,1,..7中的任一數值。
狀態標誌
共有五種狀態標誌符號,即N(負數),Z(零),P(奇/偶),K(進位),V(,溢出)。
操作助記符
操作名稱 | 助記符 | 操作名稱 | 助記符 |
加 | + | 異或 | # |
減 | - | 算術左移 | .2 |
帶進位加 | ++ | 算術右移 | /2 |
帶借位減 | --- | 不帶進位環移 | @ |
與 | & | 帶進位環移 | K:@ |
非 | U | 邏輯右移 | -> |
成組環移 | AsM:4 | 中斷返回 | RI |
轉移 | J | 等待中斷 | WI |
轉子程式 | JS | 軟體中斷 | SI |
子程式返回 | RET | 空操作 | NULL |
停機 | HALT |
各種定址方式的表示
下面介紹的是幾種在微機中常見的定址方法。
立即定址
在這種方式下, 指令中的數字就是運算元。用 "12” (單位元組數 )和“1234”(雙位元組數)代表
直接( 或擴充)定址
指令中的數字為運算元的實際地址。M表示單位元組操作地址,MM則表示對 (1234)、(1235)這兩個相鄰單元內容的雙位元組操作地址
O頁定址
實際上屬於直接定址的一種特例,即其訪問地址限於存貯器0 0 00 —0 0 FF 單元範圍內。表示為MZ12 ,其意義等價於M。
變址定址
利用了變址暫存器 ,指令中只需指出偏移量和用的是哪個變址暫存器,M12X 和M12Y 就表示地址單元(IX)+0012和(IY)+0012。
相對定址
即利用程式計數器內容作為基址值 ,指令中只指出相對偏移量。定址範圍為(PC)-128到(PC)+127。
暫存器直接定址
指令中指出一個暫存器(對 ),而運算元則已事先放在暫存器中了 。助記符中表示形式就是“r”或者“rr”。
暫存器間接定址
在暫存器對中存放的是運算元的地址
堆疊定址
運算元存放在棧頂