汇编语言程序设计基础知识
8086
INC AX ;加1指令。將字操作數AX中的數值加1
DEC BL ;減1指令。將字節操作數BL中的數值減1
PUSH AX ;進棧指令。將AX中的字壓入堆棧
JMP LAl ;無條件轉移指令。將程序轉移到標號為LAl的指令繼續執行
MOV AX,5 ;傳送指令。將操作數送入目的操作數AX中
ADD AX,BX ;加法指令。將AX和BX相加,結果再傳入AX中
CBW ;字節轉換為字指令
CLC ;進位標志CF清零
NOP ;不操作指令
HLT ;停機指令
標志位:
進位標志NC,即CF,CF= 0 則無進位
溢出標志NV,即OF,OF= 0 則不溢出
零標志NV,即ZF,ZF= 0 則結果不為零
符號標志PL,即SF,SF= 0則結果是正數
指令長度 :
指令的長度會影響存儲空間。在編寫程序時,如果有多種類型的指令可以完成相同的任務,那么選用較短的指令可有效地壓縮程序占用的存儲空間。
基礎知識
計算機基本原理
馮 諾依曼計算機的原理
計算機的基本工作原理是存儲程序和程序控制。
馮諾依曼計算機的基本特點:
(1)采用存儲程序方式。
(2)存儲器是按地址訪問的。
(3)指令由操作碼和地址碼構成。
(4)機器以運算器為中心。
馮 諾依曼計算機的基本結構
計算機由運算器、控制器、存儲器、輸入設備、輸出設備五大部件組成。
運算器和控制器合稱為中央處理器(CPU)。
各部分之間由系統總線相連。系統總線分為:**地址總線(A-BUS)、數據總線(D-BUS)、控制總線(C-BUS)。
1.中央處理器(CPU)
CPU主要由算數邏輯運算單元ALU、地址發生和控制單元、指令譯碼單元、數據存儲單元、總線驅動單元、時序控制單元等組成。
2.存儲器
存儲器分為內存和外存。內存又稱為主存,用于存儲計算機當前正在運行的程序、正在處理的原始數據、中間數據和最終結果,內存的各存儲單元可由CPU直接尋址。
3.總線和接口
計算機總線分為內部總線和外部總線。內部總線指的是CPU內部各個部件之間的連線。外部總線又稱為系統總線,是連接計算機主板上各個芯片以及各個接口部件的總線,系統總線分為地址總線、數據總線、控制總線。
外部設備和計算機之間必須有的中間緩沖部件又叫接口,接口分為并行接口和串行接口。
并行接口:同時并行地傳送多位數據。
串行接口:數據是一位一位傳輸的。
微型計算機系統
微型計算機系統概念
8086寄存器組
1.數據寄存器
AX通用寄存器,主要作為累加器用,所以它是算數運算的主要寄存器。
BX通用寄存器,還用作基址寄存器。
CX通用寄存器,還用作計數器。
DX通用寄存器,在做雙精度運算時還用來與AX一起存放一個雙字操作數(32位二進制數),其中DX存放高字(高16位),AX存放低字(低16位)
2.地址寄存器
地址寄存器包括指針和變址寄存器SI、DI、SP、BP四個16位寄存器,用來存放存儲器操作的偏移地址,也可以作為通用寄存器。嚴格來說,用來存放存儲器偏移地址的寄存器都應該歸類為地址寄存器,如BX基址寄存器、IP指令指針寄存器等。
SI源變址寄存器,用于指出存放源緩沖區的偏移地址。
DI目的變址寄存器,可用于存放目的緩沖區的偏移地址。
SP堆棧指針寄存器,用于指出堆棧區棧頂的偏移地址。
BP基址指針寄存器,用于指出堆棧區某個單元的偏移地址。
3.段寄存器
CS代碼段寄存器,用于指出存放程序的代碼段的段地址。
DS數據段寄存器,用于指出存放數據的數據段的段地址。
ES附加段寄存器,用于指出存放附加的數據段的段地址。
SS堆棧段寄存器,用于指出堆棧區的堆棧段的段地址。
4.控制寄存器
控制寄存器包括IP和FLAGS(又稱為PSW程序狀態字),用于控制程序的執行。
IP指令指針寄存器,用來存放代碼段中的偏移地址,指出當前正在執行指令的下一條指令所在單元的偏移地址。
FLAGS標志寄存器的某位代表CPU的一個標志,表示出CPU的某種執行狀態,8086的標志寄存器共有9個標志,分別為6個條件碼標志和3個控制標志。
條件碼標志如下:
CF進位標志,當指令執行結果的最高位向前有進位時,CF= 1,否則CF=0。
SF符號標志,當指令執行結果的最高位(符號位)為負時,SF=1,否則SF=0。
ZF零標志,當指令執行結果為0時,ZF=1,結果不為0時ZF=0。
OF溢出標志,當指令執行結果有溢出(超過了數的表示范圍)時,OF=1,否則OF=0。
AF輔助進位標志,當指令執行結果的第3位(半字節)向前有進位時,AF=1,否則AF=0。
PF奇偶標志,當指令執行結果中1的個數為偶數個時,PF=1,否則PF=0。
控制標志如下:
DF方向標志,執行串處理指令時,若設置DF=0,存儲單元的地址寄存器的值自動增加,若設置DF=1,存儲單元的地址寄存器的值自動減小。
IF中斷標志,設置IF=1,允許CPU響應可屏蔽中斷,IF = 0,則不影響。
TF陷阱標志,在DEBUG調試時,TF=1,采用單步執行方式,即進入陷阱;TF=0,正常執行程序。
注:邏輯地址不唯一,多個物理地址可對應同一物理單元上。
指令系統與尋址方式
指令系統
指令系統的定義
指令系統是計算機所能執行的各種代碼指令的集合。計算機體系不同,指令系統也不同,不可互換。
指令的分類
1.數據傳送指令
2.算術運算指令
3.邏輯運算指令
4.串處理指令
5.控制與轉移指令
6、處理機控制指令
指令的尋址方式
尋址方式
定義:尋找操作數的方法。
操作數可以分為:
數據操作數和轉移地址操作數
按照操作數類型不同,尋址方式也分為兩大了類:
與數據有關的尋址方式和與轉移地址有關的尋址方式
注:除了轉移指令、循環指令、子程序調用指令等與轉移地址有關之外,其他指令的尋址方式都與數據有關。
與數據有關的尋址方式劃分為三類:
立即尋址方式、寄存器尋址方式、儲存器尋址方式。
其中儲存器尋址方式包括:
1.直接尋址方式
2.寄存器間接尋址方式
3.寄存器相對尋址方式
4.基址變址尋址方式
5.相對基址變址尋址方式
立即尋址方式
所要找的操作數直接寫在指令中,這種操作數叫立即數
注:立即尋址只能用于源操作數子段,立即數的類型必須與目的操作數的類型一致,目的操作數是字節,立即數也必須是字節。
立即尋址方式的操作數就在指令中,而指令本身在代碼段中存放。
寄存器尋址方式
操作數在寄存器中,CPU在寄存器中得到操作數,不用訪問內存,這種尋址方式指令短、速度快,但是可用的資源少。
8位寄存器:AH、AL、BH、BL、CH、CL、DH、DL
16位寄存器:AX、BX、CX、DX、SI、DI、BP、SP
例:
MOV AX,4650H ;目的操作數寄存器尋址方式,源操作數是立即尋址方式
存儲器尋址方式
在編寫匯編程序時存儲器的地址是以邏輯地址形式表示的,因此這一類尋址方式在指令中要表示出有效地址EA。對于雙操作數指令而言,兩個操作數不允許同時用存儲器尋址方式,即不允許兩個操作數都是存儲單元。
1.直接尋址方式
操作數的有效地址EA直接寫在指令中,操作數的段地址為數據段,由DS指出。CPU根據EA和段地址DS計算出物理地址后,再訪問存儲器取出操作數的數值。
操作數的物理地址:(DS)*10H+EA
對于直接尋址方式而言,必須用前綴“DS:”指出該單元在數據段中。例如,DS:[2000H]代表一個數據段的存儲單元,其偏移地址為:2000H。
直接尋址方式適于處理單個變量。存儲單元的名字(偏移地址)為變量名,存儲單元的內容為變量值。
(1)存儲器讀操作
MOV指令可以實現CPU對存儲器的讀寫操作。若傳送指令的目的操作數是CPU的寄存器,源操作數是存儲單元,就完成了對存儲器的讀操作。至于讀出的是字還是字節,要看目的操作數的寄存器是字型還是字節型的。
(2)存儲器的寫操作
把MOV指令的目的操作數變為存儲單元,源操作數為CPU的寄存器。
(3)符號地址
為存儲單元定義一個名字,該名字就是符號地址。如果把存儲單元看成變量,該名字也是變量名。
采用符號地址時,如果用數據定義偽指令DB、DW等定義的存儲單元名字,其對應的段默認為數據段;但是若用EQU符號定義符號地址,則需要加上前綴“DS:”
匯編語言源程序在匯編是時,符號地址被轉換為實際的偏移地址。
例:
VALUE DW 5678H
MOV AX,VALUE ;VALUE是符號地址,也可以用中括號括起來
MOV AX,[VALUE];段地址默認為數據段DS
(4)段超越
在與內存有關的尋址方式中,操作數默認為數據段。如果操作數在其他段中存放,稱為段超越,需要在指令中用段超越前綴指出,即用操作數前加上段寄存器和冒號表示。
例:
VALUE EQU 1000H ;EQU符號定義偽指令,表示VALUE = 1000H
MOV AX,DS:[VALUE] ;存儲單元在數據段
MOV AX,ES:[VALUE] ;ES:段超越前綴,指出操作數在附加段
2.寄存器間接尋址方式
操作數的EA在基址寄存器BX、BP或變址寄存器SI、DI中,而操作數的段地址在數據段DS或堆棧段SS中。如果有效地址由BX、SI、DI指出,則默認對應于數據段,而用BP指出則對應于堆棧段 由于EA是間接從寄存器中的到的,所以稱為寄存器間接尋址。8086CPU只允許BX、BP、SI、DI這四個寄存器作為間址寄存器。
在這種尋址方式中,操作數同樣可以用段超越前綴。此尋址方式適于簡單的表格處理。
3.寄存器相對尋址方式
MOV AX,[BX+1234H]
操作數的EA是一個基址或變址寄存器的內容再加上8位或16位位移量之和。
由于有相對的位移量,所以成為寄存器相對尋址方式。此尋址方式常用于草表操作。可利用寄存器做首地址,用位移量做指針尋找表中特定的單元;或用位移量做表格的首地址,用寄存器做指針,來連續查表。
例:
MOV [BX+2635H],AX ;位移量也可以寫在中括號內
MOV[BX].2623H,AX ;位移量可用小點連接
4.基址變址尋址
操作數存放在內存中,指令形式如下:
MOV AX,[BX+SI]
操作數的EA為一個基址寄存器和一個變址寄存器的內容之和。該尋址方式可用于二維表的處理。
例:
MOV AH,ES:[SI+BX];源操作數ES:段超越前綴,指出操作數在附加段,操作數的EA在基址寄存器BX和變址寄存器SI中,為二者之和。
5.相對基址變址尋址方式
操作數存放在內存中。指令的形式如下:
MOV AX,[BX+SI+1234H]
操作數的EA為一個基址寄存器加一個變址寄存器再加一個位移量,三者之和。該尋址方式可用于二維表查表和棧處理。
例:
MOV AX,MASK[BX][SI]
或MOV AX,[MASK+BX+SI]
或MOV AX,[BX+SI].MASK
有效地址:
EA = MASK+(BX)+(SI)
物理地址:
(DS)*10H+EA
相對基址變址尋找方式可以方便地在二維表中查找某元素。例如可令MASK作為表首址,BX代表行SI代表列,即可查找表中元素。
一字節8bit
一字16bit
雙字32bit
匯編語言程序設計
總結
以上是生活随笔為你收集整理的汇编语言程序设计基础知识的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 阿里云linux主机安装qt报错:缺少l
- 下一篇: winform窗体