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