AX(累加器) BX(基址寄存器) CX(計數器) DX(數據寄存器) ;可以分8位使用。 指針及變址寄存器: SP(堆棧指針寄存器) BP(基址指針寄存器) SI(源變址寄存器) DI(目的變址寄存器) IP(指令指針寄存器):用來存放下一條要執行指令在內存中代碼段中的偏移地址。 主存儲器 - 主存的基本存儲單位是位(bit),它能容納一個二進制數的0或1 - 字節編址:以字節為最小尋址單位。 - 8086的最大尋址空間1M - 字的存放形式“低位在前,高位在后” - “對準字”和“不對準字” 堆棧 在內存中開辟出一片存儲區,采用一端固定,另一端活動的方式存取數據 進棧指令 PUSH 格式: PUSH OPS 功能:將寄存器、段寄存器或存儲器中的一個字數據壓入堆棧。 (SP)-2 -> SP 例:假設(SP)=1000H (AX)= 1234H PUSH AX 執行后:(SP)=0FFEH 注:PUSH AL ;錯誤 PUSH 0003H ;錯誤 出棧指令 POP 格式: POP OPD 功能:將棧頂元素(字)彈出送至寄存器、段寄存器(CS除外)或存儲器中。 (SP)+2 -> SP 例:設 (BX)=2004H POP BX 執行后: (BX)=1234H (SP)=1000H 注:PUSH CS ;正確 POP CS ;錯誤 存儲器的分段管理 - 地址表示的一對矛盾: 直接尋址能力為1M (字節); 而寄存器是16位結構的。 - 解決方法: 引入了存儲器“分段”的概念,即把1M字節內存空間分成若干段。每段最大可達64K字節--可由16位寄存器進行尋址。 段的起始地址成為“段基址”,要訪問的單元距段基址的距離(字節數)為“偏移量”(Offset)。 程序設計時,使用的是邏輯地址。邏輯地址由“段基址”和“偏移量”構成(均為16位)。 “段基址”由段寄存器CS、DS、SS和ES提供; “偏移量”由BX、BP、IP、SP、SI、DI或根據尋址方式計算出的有效地址EA(Effective Address)提供。 - 注意: ①每個存儲單元有唯一的物理地址,但它卻可由不同的“段基址”和“偏移量”組成。例如: 1200H:0345 -> 12345H 1100H:1345 -> 12345H ② 除非專門指定,一般情況下,段在存儲器中的分配是由操作系統負責的。 例1:設(CS)=8000H (IP)=0100H 問下一條要執行的指令的物理地址PA? (CS)內容左移4位+(IP) PA = 80000H+0100H=80100H 例2:設(DS)=1000H 該數據段中偏移量為0200H處的物理地址PA? (DS)內容左移4位+偏移量 PA = 10000H +0200H =10200H 例3:設(SS)=1000H (SP)=2000H 問該堆棧段棧頂的的物理地址PA? (SS)內容左移4位+(SP) PA = 10000H +2000H =12000H 數值數據在機器內的表示形式 8086的兩個規定: - 數值數據均指無符號定點數 - 有符號數則一律采用n位二進制補碼表示。 - 8086中,16位補碼的表示范圍: 7FFFH ~~ 8000H 注:機器在進行算術運算時,總是把參加運算的用補碼表示的操作數作為無符號數處理。 字符數據在機器內的表示形式 ASCII碼 (美國信息標準交換碼) - 字符數據是以ASCII碼形式存放在內存中的。 例如 “1” 就是 31H “A” 就是 41H BCD碼 定義:利用二進制形式來表示十進制數。 利用4位二進制數(0000B~1001B)來表示十進制數(0~9) 例如: 19 = 00011001BCD = 000010011B 標志寄存器 1、狀態標志:表示前面的操作執行后,算術邏輯部件處于怎樣一種狀態。 例如,是否產生了進位,是否發生了溢出等等。程序中,可以通過對某個狀態標志的測決 定后面的走向及操作。 零標志ZF(Zero Flag):若運算結果為0,則ZF=1;否則ZF=0。 例1:MOV AL, 4 SUB AL, 4 例2:XOR AX, AX 執行后,ZF也一定為1。 進位標志CF(Carry Flag): 它反映: 加法時,最高位(字節操作時的D7位,字操作時的D15位)是否有進位產生。 減法時,最高位(字節操作時的D7位,字操作時的D15位)是否有借位產生。 例如: MOV AL, 3; SUB AL, 4; 執行后,CF=1。 奇偶標志PF(Parity Flag): 若運算結果低8位中“1”的個數為偶數,則PF=1;否則PF=0。 例:MOV AL, 2 ADD AL, 1 執行后,PF位為1。 輔助進位標志AF(Auxiliary carrry Flag): 也稱“半進位標志”,它反映: 加法時,第3位向第4位有進位; 減法時,第3位向第4位有借位。 溢出標志OF(Overflow Flag): 若運算過程中發生了“溢出”,則OF=1。 定義:運算結果超出計算裝置所能表示的范圍,稱為溢出。 判斷方法之一【邏輯】: 溢出=最高位進位 ⊕ 次高位進位 符號標志SF (Sign Flag): 當運算結果的最高位為1時SF=1,否則SF=0。 例:分析執行下述兩條指令后,以上六個標志位的變化。 MOV BL,58H ADD BL,4AH 解: 0101 1000B + 0100 1010B 1010 0010B CF=0 SF=1 OF=1 PF=0 ZF=0 AF=1 2、控制標志(3位): 每一位控制標志都對一種特定的功能起控制作用。可以通過專門的指令對其進行“置位”(Set)或“復位”(Reset)。 中斷標志IF(Interrupt Enable Flag): 如果IF置“1”,則CPU可以接受可屏蔽中斷請求;反之,則CPU不能接受可屏蔽中斷請求。 指令系統中有兩條專門的指令可以置“1”或置“0” IF標志位: STI 使IF置“1”,即開放中斷。 CLI 使IF清“0”,即關閉中斷 方向標志DF(Direction Flag): 用于串操作指令中的地址增量修改(DF=0)還是減量修改(DF=1)。 STD CLD 跟蹤標志TF(Trap Flag): 若TF=1,則CPU按跟蹤方式(單步方式)執行程序。 3、標志位寄存器的操作 - 傳送 LAHF 功能:將標志位寄存器的低8位送入AH中,即: (FLAGS)7~0 -> AH 例:執行前 (FLAGS)=0485H (AX)=0FFFFH 執行后 (FLAGS)=0485H (AX)=85FFH SAHF 功能:將AH的內容送入標志位寄存器的低8位中,即: AH ->(FLAGS)7~0 - 棧操作 PUSHF POPF 例: MOV AX,0FFFFH PUSH AX POPF 結果:(FLAGS)=0FFFFH
|