版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報或認(rèn)領(lǐng)
文檔簡介
Intel8086/8088的基本結(jié)構(gòu)
8086是16位字長的微處理器,8088的內(nèi)部結(jié)構(gòu)為16位,外部數(shù)據(jù)匯流排8位,是準(zhǔn)16位字長的微處理器,二者指令系統(tǒng)相同,均具有20位地址線,尋址能力達(dá)到1MB空間。1.18086/8088的功能結(jié)構(gòu)BIU和EU相互獨(dú)立,可並行操作,構(gòu)成指令流水線結(jié)構(gòu)。T1
……取指令取指令取指令等待執(zhí)行執(zhí)行……
執(zhí)行BIUEUT2T3next匯流排介面單元BIU(BusInterfaceUnit)執(zhí)行單元EU(ExecutionUnit)協(xié)同完成執(zhí)行記憶體中存放的指令序列。Go8086/8088微處理器由匯流排介面單元和執(zhí)行單元組成。圖1.11.28086/8088的寄存器結(jié)構(gòu)14個16位寄存器,分為4類。(1)數(shù)據(jù)寄存器:4個—AX、BX、CX、DX計算過程中的常用寄存器G(2)段寄存器:4個—CS、DS、SS、ES存放段起始地址G(3)指針與變址寄存器:4個—SP、BP、SI、DI提供運(yùn)算元的偏移地址G(4)控制寄存器:2個—IP、FR提供指令的偏移地址;保存條件碼標(biāo)誌和控制標(biāo)誌GAXBXCXDX數(shù)據(jù)寄存器
FRHAHBHCHDHALBLCLDLSPBPSIDIIP
FRLCSDSSSES代碼段寄存器數(shù)據(jù)段寄存器堆疊段寄存器附加段寄存器堆疊指針寄存器基址指針寄存器源變址寄存器目的變址寄存器指令指針寄存器標(biāo)誌寄存器nextAX(累加器Accumulator):主要的算術(shù)運(yùn)算寄存器,專用於:乘、除法運(yùn)算、十進(jìn)位調(diào)整及I/O操作等操作。BX(基址寄存器Base):常用於存放存儲區(qū)的起始地址。CX(計數(shù)寄存器Count):常用作迴圈操作和字串處理的計數(shù)控制。DX(數(shù)據(jù)寄存器Data):常與AX聯(lián)用,做雙字乘、除法時,DX存放高位字,AX存放低位字。此外在I/O操作時提供外部設(shè)備介面的端口地址。返回
DXAX31
1615
0CS(代碼段地址寄存器
CodeSegment):存放代碼段的起始地址。代碼段存放當(dāng)前正在運(yùn)行的程式DS(數(shù)據(jù)段地址寄存器
DataSegment):存放數(shù)據(jù)段的起始地址。數(shù)據(jù)段存放當(dāng)前正運(yùn)行的程式所用的數(shù)據(jù)。
SS(堆疊段地址寄存器
StackSegment):存放堆疊段的起始地址。堆疊段是定義堆疊的存儲區(qū)。
ES(附加段地址寄存器
ExtraSegment):存放附加段的起始地址。附加段是附加的數(shù)據(jù)段,作為輔助數(shù)據(jù)區(qū)存放當(dāng)前正運(yùn)行程式所用的數(shù)據(jù)。返回SP(棧頂指針寄存器StackPointer):提供堆疊棧頂單元的偏移地址。與SS段寄存器聯(lián)用,控制數(shù)據(jù)進(jìn)棧和出棧。
堆疊段SS:SP
訪問棧頂
堆疊段SS:BP
訪問棧內(nèi)
數(shù)據(jù)段DS:SI
訪問數(shù)據(jù)
附加段ES:DI
訪問數(shù)據(jù)BP(基址指針寄存器BasePointer):常用於提供堆疊內(nèi)某個單元的偏移地址。與SS段寄存器聯(lián)用,訪問堆疊中的任一個存儲單元。SI(源變址寄存器SourceIndex):與DS段寄存器聯(lián)用,可以訪問數(shù)據(jù)段中的任一個存儲單元。
DI(目的變址寄存器DestinationIndex):與ES段寄存器聯(lián)用,可訪問附加段中的任一個存儲單元。SI、DI也常用於在字串操作中提供偏移地址,並具有地址自動增量或減量的功能。返回
IP(指令指針寄存器InstructionPointer):存放代碼段中指令的偏移地址。在程式執(zhí)行過程中,始終自動給出下一條要取的指令的偏移地址。
IP與CS段寄存器聯(lián)用,可以確定下一條要取的指令的物理地址,因此IP是很重要的控制寄存器,用於控制程式的執(zhí)行流程。
代碼段CS:IP
訪問指令FR(標(biāo)誌寄存器FlagsRegister):用於存放反映處理器和運(yùn)行程式執(zhí)行結(jié)果狀態(tài)的控制標(biāo)誌和條件碼標(biāo)誌。FR中共有9個標(biāo)誌位:6個條件碼標(biāo)誌位,3個控制標(biāo)誌位。
CF
1514131211109876543210PFAFZFSFTFIFDFOFFR寄存器OF—溢出標(biāo)誌:計算結(jié)果溢出時,OF=1,否則OF=0。SF—符號標(biāo)誌:計算結(jié)果小於0時,SF=1,否則SF=0。ZF—零標(biāo)誌:計算結(jié)果等於0時,ZF=1,否則ZF=0。CF—進(jìn)位/借位標(biāo)誌:最高有效位有進(jìn)位或借位時,CF=1,否則CF=0。AF—輔助進(jìn)位/借位標(biāo)誌,半位元組進(jìn)位/借位標(biāo)誌PF—奇偶標(biāo)誌DF—方向標(biāo)誌,控制串操作中的地址增減。DF=0,地址增;DF=1,地址減。IF—中斷標(biāo)誌,IF=1,開中斷;IF=0,關(guān)中斷。TF—陷阱標(biāo)誌,TF=1,CPU單步方式下執(zhí)行程式,TF=0,CPU正常工作。3個控制標(biāo)誌位:6個條件碼標(biāo)誌位:00000011PF=100001011PF=076543210nextSIDIDF=0DS:SIES:DI低地址高地址SIDIDISI數(shù)據(jù)段附加段............SIDIDF=1DS:SIES:DI低地址高地址SIDIDISI
數(shù)據(jù)段附加段............正向傳送反向傳送SBUFDBUFDBUFSBUF方向標(biāo)誌DF的控制作用返回0307080307080307080307081.3堆疊與記憶體結(jié)構(gòu)(1)堆疊
堆疊的固定端稱為棧底,在記憶體的高地址端,活動端稱為棧頂,數(shù)據(jù)的存取以先進(jìn)後出原則在棧頂進(jìn)行。SP棧頂指針寄存器始終保存棧頂?shù)刂?,指向棧頂。堆疊數(shù)據(jù)的存取必須以字為單位
隨著進(jìn)棧數(shù)據(jù)的增多,堆疊從高地址向低地址方向擴(kuò)展。SP低地址高地址堆疊擴(kuò)展方向(SP)-2新棧頂PUSHBX(2)記憶體結(jié)構(gòu)
在記憶體中,最小的存儲單位是位元組,每個位元組單元用一個無符號二進(jìn)位數(shù)編地址,從0開始編址。書寫存儲單元地址時用十六進(jìn)制形式。...棧頂棧底堆疊段BHBL棧頂...記憶體64K記憶體單元的編址方法如圖所示。0000H0001H0002H0003H0004H0005H0006HFFFEHFFFFH低位元組高位元組字單元位元組單元低地址位元組單元高地址位元組單元低位元組存低地址單元,高位元組存高地址單元。例:將3456H存入地址為0005H的字單元中。5634一個記憶體單元的物理地址由段地址和偏移地址形成。問題:為什麼要分段地址和偏移地址呢?16位寄存器不能提供20位的物理地址解決問題的辦法:記憶體分段管理
將記憶體分段,每段最大不超過64KB,段內(nèi)單元地址可用16位表示,稱為偏移地址。每段的起始地址稱為段地址(也稱為段基址)。段地址如何表示?規(guī)定段地址必須取為小段首址,從0地址單元開始,每16個單元為一小段。按20位地址對1M記憶體編址如下:00000H00001H00002H……0000EH0000FH00010H00011H00012H……0001EH0001FH00020H00021H00002H……0002EH0002FH…FFFF0HFFFF1HFFFF2H……FFFFEHFFFFFH64K20位物理地址的形成方法:20位物理地址=16位段地址左移4位(段地址×16)+16位偏移地址16位段地址01516位偏移地址015+020位物理地址19例:已知一個存儲單元的段地址為3200H,偏移地址為1210H,其物理地址是多少?0011001000000000|000000010010000
10000+0011001100100001000032000H+
1210H33210H0000段內(nèi)偏移量偏移地址=段起始地址64K段內(nèi)地址0000H0001H……0FFFH…….FFFFH64K段內(nèi)地址0000H0001H……FFFFH30000H段內(nèi)偏移量偏移地址=段起始地址40000H記憶體分段管理的地址概念圖示:30000H+0FFFH=30FFFH物理地址......記憶體0FFFH
可以對代碼段、數(shù)據(jù)段、附加段和堆疊段各段按需要靈活地進(jìn)行存儲區(qū)分配。(圖1.9,圖1.10)記憶體分段法的優(yōu)點(diǎn):
(2)便於將代碼、數(shù)據(jù)存放在不同的記憶體區(qū),程式重定位。
(1)使16位寄存器最終可以提供20位物理地址;訪問記憶體單元時,寄存器的聯(lián)用方式:(圖1.8)next返回返回本章要求:(1)瞭解CPU的功能結(jié)構(gòu),重點(diǎn)掌握寄存器的結(jié)構(gòu)和各寄存器的一般用途和專門用途,寄存器的默認(rèn)聯(lián)用方式;(2)熟悉記憶體的結(jié)構(gòu),理解編址方法和存儲數(shù)據(jù)的方法,重點(diǎn)掌握段的劃分和記憶體單元物理地址的形成方法;(3)熟悉堆疊的結(jié)構(gòu),理解堆疊先進(jìn)後出的存取方法,堆疊指針SP的作用。小結(jié)2.1尋址方式尋址方式分類:1)與數(shù)據(jù)有關(guān)的尋址方式2)與轉(zhuǎn)移地址有關(guān)的尋址方式:確定記憶體單元的地址有7
種
與數(shù)據(jù)有關(guān)的尋址方式:確定轉(zhuǎn)移地址以MOV指令為例:MOV目的運(yùn)算元,源運(yùn)算元對源運(yùn)算元分別使用7
種尋址方式如下:(1)立即尋址方式(ImmediateAddressing)特點(diǎn):運(yùn)算元包含在指令中運(yùn)算元是指令的組成部分,可以是8位或16位,取出指令就立即獲得運(yùn)算元——立即數(shù)例1:
MOVAL,5執(zhí)行指令後:(AL)=05HB005記憶體指令05AL例2:
MOVAX,3045H執(zhí)行指令後:(AX)=3045H指令45AXOP45記憶體3030低地址高地址用途:給變數(shù)或寄存器賦常量值限制:只能用於源運(yùn)算元(2)寄存器尋址方式(RegisterAddressing)特點(diǎn):運(yùn)算元存在寄存器中例:
MOVAX,BX執(zhí)行指令前:(AX)=3045H(BX)=4000H
執(zhí)行指令後:
(AX)=4000H(BX)=4000H用途:用寄存器提供運(yùn)算元時存取速度快
指令
2000H5030…………記憶體代碼段op0020數(shù)據(jù)段30000H32000HAX用途:用於存取單個變數(shù)中的運(yùn)算元3050例:設(shè)(DS)=3000H
MOVAX,[2000H](3)直接尋址方式(DirectAddressing)特點(diǎn):運(yùn)算元的偏移地址包含在指令中要訪問的存儲單元物理地址為:30000H+2000H=32000H設(shè):(32000H)=3050H執(zhí)行指令後:(AX)=3050H如果2000H單元在附加段,指令為:MOVAX,ES:[2000H]
段跨越首碼:段寄存器名:——改變默認(rèn)使用的段寄存器
MOVAX,NUM1000HAX用途:可用於處理數(shù)組50A0A050………記憶體數(shù)據(jù)段20000H21000HXXXX21002H例:設(shè)(DS)=2000H
(BX)=1000H指令為:
MOVAX,[BX]
數(shù)組起始地址(4)寄存器間接尋址方式(RegisterIndirectAddressing)特點(diǎn):(寄存器)=運(yùn)算元的偏移地址計算運(yùn)算元物理地址的公式:1)運(yùn)算元物理地址=(DS)16+2)運(yùn)算元物理地址=(SS)16+(BP)(BX)(SI)(DI)20000H+1000H=21000H
要訪問的存儲單元物理地址為:設(shè):(21000H)=50A0H執(zhí)行指令後:(AX)=50A0H指令
4000H30000HAX(寄存器相對尋址方式)1234例:設(shè)(DS)=3000H
ARRAY=4000H(SI)=2000H指令為:
MOVAX,ARRAY[SI]3412…………記憶體代碼段op
00
40數(shù)據(jù)段36000Hop…
2000H
數(shù)組起始地址(5)變址尋址方式(
IndexedAddressing)特點(diǎn):(變址、基址寄存器)+指令中的位移量
=
運(yùn)算元的偏移地址計算運(yùn)算元物理地址的公式:1)運(yùn)算元物理地址=(DS)16+2)運(yùn)算元物理地址=(SS)16+(BP)+8位位移量16位位移量30000H+4000H+2000H=36000H
要訪問的存儲單元物理地址為:設(shè):(36000H)=1234H用途:可用於處理數(shù)組執(zhí)行指令後:(AX)=1234H+(SI)(DI)(BX)8位位移量16位位移量0158HAX1234例:設(shè) (DS)=2100H (BX)=0158H (DI)=1000H指令為:MOVAX,[BX+DI]3412………記憶體數(shù)據(jù)段21000H22158H
1000H
數(shù)組起始地址(6)基址變址尋址方式(
BasedIndexAddressing)特點(diǎn):(基址寄存器)+(變址寄存器)
=
運(yùn)算元的偏移地址計算運(yùn)算元物理地址的公式:1)運(yùn)算元物理地址=(DS)16+2)運(yùn)算元物理地址=(SS)16+(BP)+(BX)+(SI)(DI)(SI)(DI)21000H+0158H+1000H=22158H
要訪問的存儲單元物理地址為:設(shè):(22158H)=1234H執(zhí)行指令後:(AX)=1234H用途:可用於處理數(shù)組幾種可處理數(shù)組的尋址方式的比較:1.MOVAX,[BX]2.MOVAX,ARRAY[SI]3.MOVAX,[BX][SI]寄存器間接尋址方式變址尋址方式基址變址尋址方式特點(diǎn):可讀性好,指令中明確指出了要處理的數(shù)組。限制:寫程式時必須清楚要處理什麼數(shù)組。特點(diǎn):適用於要處理的數(shù)組需要在程式運(yùn)行中動態(tài)確定,並且修改BX就可以處理不同的數(shù)組。特點(diǎn):適用於要處理的數(shù)組需要在程式運(yùn)行中動態(tài)確定,且形式簡單。
上述1.和2.指令中的[寄存器]還可被哪些寄存器替換?DISIBP(加段跨越首碼DS:或ES)
上述3.指令中的BX寄存器是否可被其他寄存器替換?DIBXBP(加段跨越首碼DS:或ES)next指令
2000HAX1234例:設(shè)(SS)=3000H (BP)=2000H
ARRAY=0250H (SI)=1000H
MOVAX,ARRAY[BP][SI]
1000H30000H3412…………記憶體代碼段op
50
02堆疊段33250Hop…
…
0250H棧頂數(shù)組首址(7)相對基址變址尋址方式(
RelativeBasedIndexAddressing)特點(diǎn):(基址寄存器)+(變址寄存器)+位移量
=
運(yùn)算元的偏移地址30000H+2000H+0250+1000H=33250H
要訪問的存儲單元物理地址為:用途:便於訪問堆疊中的數(shù)組要求:熟練掌握前6種尋址方式,其中前3種是最基本的尋址方式,後3種是重點(diǎn)尋址方式。2.2
指令系統(tǒng)8086/8088指令系統(tǒng)中的指令按功能可分為六類:
(1)數(shù)據(jù)傳送指令 (2)算術(shù)運(yùn)算指令(3)邏輯運(yùn)算與移位指令(4)串操作指令(5)控制轉(zhuǎn)移指令 (6)處理機(jī)控制指令
2.2.1數(shù)據(jù)傳送指令
(1)通用傳送指令
1)傳送指令MOV指令格式:MOVdst,src執(zhí)行操作:(dst)←(src)(dst:目的運(yùn)算元,src:源運(yùn)算元)功能:在CPU與記憶體之間或CPU內(nèi)部傳送數(shù)據(jù)。標(biāo)誌位:不受影響例:
MOVAL,
E
指令執(zhí)行後:(AL)=45HMOV指令的語法形式:(1)MOVmem/regl,reg2
(2)MOV regl,mem/reg2
(3)MOV mem/reg,imm其中:mem:記憶體單元
reg:寄存器
imm:立即數(shù)例:
判斷下列指令是否合法:MOV DS,AX
不允許兩個運(yùn)算元都是記憶體單元
MOV CS,AX
MOV CH,4050H
MOV DL,5BH
MOV DX,5BH
MOV DX,AL
MOV VA1,VA2
MOV 45,DL
目的運(yùn)算元不允許是CS段寄存器目的運(yùn)算元不允許是立即數(shù)數(shù)據(jù)類型不匹配數(shù)據(jù)類型不匹配next調(diào)試工具DEBUG簡介兩種進(jìn)入DEBUG的方式:(1)H>DEBUG程式名參數(shù)(2)H>DEBUG
-(命令提示符)常用命令:(單字母命令,默認(rèn)十六進(jìn)制,但不加H)命令及功能格式例子1.D
顯示記憶體單元
D地址
-D
100
D
地址範(fàn)圍-D
1001072.E
修改記憶體單元
E地址位元組串-E
200‘Hello’
E
地址-E
100
1742:010070.893.N
定義檔案名
N檔案名
-N
FILE.COM命令及功能格式例子4.R
顯示寄存器
R寄存器名-R
DX
R6.U反彙編U地址範(fàn)圍
-U
1001085.A
彙編根源程式A地址
-A100
彙編
符號語言指令
二進(jìn)位代碼指令
反彙編
7.L裝入檔L
地址
-L
1008.W寫檔W
起始地址
-W
100操作過程:(1)–NFILE.COM(定義檔案名)(2)–RBX(檔長度送BX:CX)–RCX(3)–W100(寫檔,數(shù)據(jù)區(qū)的記憶體起始地址為100)
命令及功能格式例子9.G
執(zhí)行程式
G=起始地址-G
=200
10.T
跟蹤程式
T=起始地址-T
=200
按地址逐條跟蹤指令11.P
跟蹤程式
P=起始地址-P
=200
根據(jù)書寫的指令逐條整條跟蹤
上機(jī)程式例子:1.顯示一個字元-A100MOVDL,41;‘A’->DLMOVAH,2;功能號2->AHINT21;DOS功能調(diào)用(顯示一個字元)INT20;結(jié)束程式執(zhí)行-G=100A2.大寫->小寫
MOVDL,41;‘A’->DLORDL,20;大寫->小寫
MOVAH,2;功能號2->AHINT21;DOS功能調(diào)用(顯示一個字元)INT20;結(jié)束程式執(zhí)行3.顯示字串-A100MOVDX,120
;
字串地址->DXMOVAH,9;功能號9->AHINT21;DOS功能調(diào)用(顯示一個字串)INT20;結(jié)束程式執(zhí)行-E120‘Howdoyoudo.$’
-G=100
‘Howdoyoudo.’
4.從鍵盤輸入字元並顯示-A300
MOV
AH,1;功能號1->AHINT21;DOS功能調(diào)用(輸入一個字元)MOVDL,AL;輸入字元->DLMOVAH,2;功能號2->AHINT21;DOS功能調(diào)用(顯示一個字元)INT20;結(jié)束程式執(zhí)行G=300KK
next
2)入棧指令PUSH指令格式:PUSH src
執(zhí)行操作:(SP)←(SP)-2
((SP)+1,(SP))←(src)
功能:將指定的字?jǐn)?shù)據(jù)壓入棧頂
例:PUSHAXPOPBX設(shè):(AX)=3104H(BX)=1000H
執(zhí)行指令前\後狀態(tài):3)出棧指令POP指令格式:POPdst
執(zhí)行操作:
(dst)←((SP)+1,(SP))
(SP)←(SP)+2
功能:將棧頂字?jǐn)?shù)據(jù)彈出堆疊3104
堆疊段棧頂SP
3001H3002H3003H3004HSP1.PUSHAXAXBX310410002.POPBXAXBX31043104SP前:後:4)交換指令XCHG
指令格式:XCHG oprl,opr2執(zhí)行操作:(opr1)
(opr2)功能:兩個運(yùn)算元互換
例:
XCHGAX,BX設(shè)(AX)=1024H(BX)=2048H指令執(zhí)行後:(AX)=2048H(BX)=1024H等效三條MOV指令:MOV CX,AX MOV AX,BX MOV BX,CX
(2)端口數(shù)據(jù)傳送指令
(輸入/輸出指令I(lǐng)N/OUT,第5章介紹)(3)地址傳送指令
LEA指令
指令格式:LEAreg,src執(zhí)行操作:(reg)←src的偏移地址
功能:將源運(yùn)算元的偏移地址送指定寄存器
例:
LEADX,BUFFER
設(shè):
BUFFER單元的地址=
F000H
:4300H指令執(zhí)行後:如果指令改為:
MOVDX,BUFFER
指令執(zhí)行後:(4)標(biāo)誌傳送指令
(
BUFFER)=
5000H
傳送標(biāo)誌寄存器FR中的標(biāo)誌位
PUSHF
FR中的標(biāo)誌字—>棧頂
POPF
棧頂?shù)淖謹(jǐn)?shù)據(jù)出?!?gt;FR不影響標(biāo)誌位
影響標(biāo)誌位
(DX)=
4300H(DX)=
5000H設(shè)置TF標(biāo)誌位:(FR中的TF=1)
PUSHFPOPAXORAX,0100HPUSHAXPOPF2.2.2算術(shù)運(yùn)算指令
算術(shù)運(yùn)算指令完成加、減、乘、除
(1)加法指令
(完成二進(jìn)位的加法、帶進(jìn)位加法、加1)
1)加法指令A(yù)DD
ADD dst,src(dst)←(dst)+(src)影響CF、AF、OF、PF、SF、ZF標(biāo)誌位。2)帶進(jìn)位加法指令A(yù)DCADCdst,src(dst)←(dst)+(src)+CF(進(jìn)位標(biāo)誌位的值)
3)加1指令I(lǐng)NCINC opr(opr)←(opr)+1
(不影響CF)CF=1:無符號數(shù)運(yùn)算溢出最高有效位有進(jìn)位時,CF置1
OF=1:帶符號數(shù)運(yùn)算溢出兩個同符號運(yùn)算元的運(yùn)算結(jié)果符號發(fā)生變化時,OF置1
CF、OF標(biāo)誌位在加法運(yùn)算中的作用:無符號數(shù)
帶符號數(shù)S
11111111255-1S11111111例:用ADD、ADC指令執(zhí)行兩個雙字加法運(yùn)算
計算:0002F360H+0005E020H=0008D380H設(shè)執(zhí)行指令前:
(DX)=0002H,(AX)=F360H,(BX)=0005H,(CX)=E020HADDAX,CXADCDX,BX
執(zhí)行第一條指令A(yù)DD:
F360H
+E020H(AX)=D380H,SF=1,ZF=0CF=1,OF=0執(zhí)行第二條指令A(yù)DC:
0002H+0005H+1H(CF)
(DX)=0008H,SF=0,ZF=0CF=0,OF=0對於雙字加法,用ADC指令:低位字加法的進(jìn)位—>高位字1←D380H0008H0~255127~-128例:INCCX
設(shè)指令執(zhí)行前:(CX)=0005H
指令執(zhí)行後:(CX)=0006HINC常用於:寄存器或記憶體單元自增,修改計數(shù)器或地址,
比加法指令簡便、效率高。(2)減法指令
完成二進(jìn)位減法、帶借位減法、減1、求補(bǔ)和比較運(yùn)算。1)減法指令SUBSUB dst,src
2)帶借位減法指令SBB影響AF、CF、OF、PF、SF、ZF標(biāo)誌位
(dst)←(dst)-(src)
SBB dst,src
(dst)←(dst)–(src)-CF(借位值)
3)減1指令DECDEC opr(opr)←(opr)-1ADDCX,1
(一般不用這種方式)
例:求補(bǔ)指令舉例NEGAL
設(shè)執(zhí)行指令前:(AL)=02H執(zhí)行指令時:計算0FFH-(AL)+111111111B-00000010B等效求反4)求補(bǔ)指令NEGNEG opr(opr)←0FFH-(opr)+1(位元組操作)
或(opr)←0FFFFH-(opr)+1(字操作)
11111101BFEH的原碼十進(jìn)位值是-211111101B+00000001B(AL)=FEH
11111110B加1FFH–(AL)等效求補(bǔ)NEG指令的功能:改變運(yùn)算元的符號
可用於取運(yùn)算元的絕對值
5)比較指令CMPCMP opr1,opr2(oprl)-(opr2)
例
:比較指令CMP舉例設(shè)指令為:CMPAX,CX
ZF=CF=指令執(zhí)行後如何判別AX和CX的大小關(guān)係(以無符號數(shù)為例)?
1即(AX)=(CX)
(AX)-(CX)=00即(AX)
(CX)
(AX)-(CX)
01即(AX)<(CX)
有借位0即(AX)>(CX)
無借位CMP指令僅僅做減法並設(shè)置標(biāo)誌位判別大小關(guān)係由條件轉(zhuǎn)移指令完成(後邊介紹)。
CMP和SUB的差別?(操作與用途)(3)乘法指令
兩條:無符號數(shù)乘法指令和帶符號數(shù)乘法指令MUL src
位元組操作:(AX)←(AL)*(src)
字操作:(DX(高位字),AX(低位字))←(AX)*(src)
2)帶符號數(shù)乘法指令I(lǐng)MUL
IMUL src
1)無符號數(shù)乘法指令
如果CF=OF=0:位元組乘位元組的積—>位元組
字乘字的積—>字標(biāo)誌位:影響CF和OF,其他標(biāo)誌位無定義。
操作與MUL相似,不同處是運(yùn)算元為帶符號數(shù)。如果CF=OF=1:位元組乘位元組的積—>字
字乘字的積—>雙字CF和OF
標(biāo)誌位可判定乘積的數(shù)據(jù)類型:例:比較無符號數(shù)和帶符號數(shù)乘法指令設(shè)指令執(zhí)行前:
(AL)=A4H
(BL)=12H
(A4H)
無符號數(shù)帶符號數(shù)164D-92D(12H)無符號數(shù)帶符號數(shù)
18D18D執(zhí)行IMUL後:
(AX)=F988H=-1656DCF=1,OF=1執(zhí)行MUL後:(AX)=0B88H=2952D CF=1,OF=1(4)除法指令
IMUL BLMUL BL(無符號數(shù)和帶符號數(shù)除法指令)1)無符號數(shù)除法指令DIV src
位元組操作:(AL)←(AX)/(src)的商
(AH)←(AX)/(src)的餘數(shù)字操作:(AX)←(DX,AX)/(src)的商
(DX)←(DX,AX)/(src)的餘數(shù)
2)帶符號數(shù)除法指令I(lǐng)DIVsrc
(操作同DIV)
如果運(yùn)算元不滿足除法指令的要求,怎麼辦?例:93H/45H,被除數(shù)不是16位,應(yīng)當(dāng)擴(kuò)展為16位,如何擴(kuò)展?簡便起見,以3為例,討論二進(jìn)位數(shù)位的擴(kuò)展問題:8位的二進(jìn)位3—>00000011擴(kuò)展為16位00000000000000118位的二進(jìn)位-2—>11111110擴(kuò)展為16位1111111111111110數(shù)據(jù)位擴(kuò)展方法:用符號位進(jìn)行數(shù)位的擴(kuò)展。有兩條指令完成符號擴(kuò)展功能:3)位元組轉(zhuǎn)換為字指令上述能保持符號的數(shù)據(jù)位擴(kuò)展方法稱為:符號擴(kuò)展CBW
執(zhí)行操作:將(AL)的符號擴(kuò)展到AH,構(gòu)成字(AX)(AL)7=0(AH)=00H1(AH)=FFH4)字轉(zhuǎn)換為雙字指令CWD執(zhí)行操作:將(AX)的符號擴(kuò)展到DX,方法類似例:設(shè)執(zhí)行指令前:(AX)=0800H(BL)=A4HDIVBL(AL)=商(5)十進(jìn)位調(diào)整指令(AH)=餘數(shù)執(zhí)行指令後:BCD碼—>建立了二進(jìn)位與十進(jìn)位的聯(lián)繫
算術(shù)運(yùn)算指令只能完成二進(jìn)位運(yùn)算,十進(jìn)位數(shù)調(diào)整指令可對二進(jìn)位運(yùn)算結(jié)果進(jìn)行調(diào)整,得到用BCD碼表示的十進(jìn)位數(shù)。BCD碼有壓縮和非壓縮兩種格式:壓縮的BCD碼:4位二進(jìn)位數(shù)—>1位十進(jìn)位數(shù)(95:10010101
)BCD
非壓縮的BCD碼:8位二進(jìn)位數(shù)—>1位十進(jìn)位數(shù)(95:0000100100000101)BCD
8位非壓縮BCD碼的高4位可以是任意值
,因此數(shù)字字元的ASCII碼—>看成一種非標(biāo)準(zhǔn)的壓縮的BCD碼例:
5
的ASCII碼為35H(00110101)BCD—>5
(非壓縮的BCD碼)28H+36H5EH
十進(jìn)位調(diào)整指令也分為壓縮的和非壓縮的BCD碼調(diào)整指令,共有6條指令。
加法的調(diào)整規(guī)則:
以壓縮的BCD碼加法調(diào)整指令為例介紹十進(jìn)位調(diào)整指令的基本思路和方法:分析:
例1:十進(jìn)位計算28+36=64用指令進(jìn)行二進(jìn)位加法運(yùn)算的結(jié)果為:
寫成BCD碼為
:(00101000
)BCD+(00110110
)BCD=(01100100
)BCD
問題:逢十六進(jìn)位解決方法:加6補(bǔ)償5EH+6H
64H(01100100
)BCD例2:
十進(jìn)位計算28+69=97=(10010111
)BCD=97H28H+69H91H問題:逢十六進(jìn)位解決方法:加6補(bǔ)償91H+6H
97H(10010111
)BCD根據(jù)上述分析,總結(jié)加法的調(diào)整規(guī)則:兩個BCD碼數(shù)位相加後,如果產(chǎn)生了進(jìn)位或和大於9,加6調(diào)整。十進(jìn)位調(diào)整指令DAA:DAA(AL)←把AL中存放的加法的和調(diào)整為壓縮的BCD碼
調(diào)整方法:若AF=1,或(AL)0~3=A~F,則(AL)←(AL)+06H,AF=1
若CF=1,或(AL)4~7=A~F,則(AL)←(AL)+H,CF=160例:十進(jìn)位加法計算:28+69=97
設(shè)執(zhí)行指令前:(AL)=(00101000)BCD=28H(=28D)
(CL)=(01101001)BCD=69H(=69D)
執(zhí)行的指令為:ADDAL,CLDAA執(zhí)行ADD指令:(AL)=91H,CF=0,AF=1
執(zhí)行DAA指令:(AL)←(AL)+06H=91H+06H=97H
(AL)=(10010111)BCD=97D,CF=0,AF=1(dst)←(dst)(src)
2.2.3邏輯運(yùn)算和移位指令
位操作指令可以體現(xiàn)組合語言對硬體的控制能力。(1)邏輯運(yùn)算指令
按位進(jìn)行邏輯與、或、異或、非運(yùn)算、測試位的操作。1)邏輯與指令A(yù)ND
AND dst,src(dst)←(dst)∧(src)
2)邏輯或指令OR
OR dst,src3)異或指令XOR
XOR dst,src(dst)←(dst)∨(src)
4)邏輯非指令NOTNOT opr(opr)←(opr)求反
5)測試指令TEST
TEST oprl,opr2
(oprl)∧(opr2)
何時該用何種邏輯操作?
0110
0
011
目的運(yùn)算元源運(yùn)算元0010
特點(diǎn):源運(yùn)算元(2)邏輯或操作(3)異或操作(1)邏輯與操作1—保留原值
0110
0
011
目的運(yùn)算元源運(yùn)算元0111
0—置0特點(diǎn):源運(yùn)算元1—置10—保留原值
01100
011
目的運(yùn)算元源運(yùn)算元0101
特點(diǎn):源運(yùn)算元1—取反0—保留原值
根據(jù)上述操作的特點(diǎn),可以確定該用什麼操作實(shí)現(xiàn)需要的功能:
保留某些位(其他位清0)用邏輯與操作
某位置1
用邏輯或操作,某位求反用異或操作
保留清0置1求反保留保留
如何確定源運(yùn)算元?
例:將AL的D0位和D1位清0。
設(shè)(AL)=BFH,指令為AND AL,?分析:10111111B
∧
11111100B(FCH)10111100B應(yīng)將源運(yùn)算元取為立即數(shù)FCH,指令為
ANDAL,0FCH
執(zhí)行指令後:
(AL)=BCH例:將AL中的大寫字母轉(zhuǎn)換為小寫字母(AL)=41H即41H61H指令為:OR AL,?分析:01000001B(41H)
∨
00100000B(20H)01100001B(61H)20H執(zhí)行指令後:
(AL)=61H小寫轉(zhuǎn)換為大寫的指令為:ANDAL,?0DFH∧
110
11111B
(DFH)0100
0001B(41H)執(zhí)行指令後:
(AL)=41H
根據(jù)需要的功能,先確定邏輯運(yùn)算指令,再利用邏輯運(yùn)算指令特點(diǎn)確定源運(yùn)算元。例:測試AL的D0位是否為1。MOV AL,0F3H;設(shè)(AL)=0F3HTEST AL,01H執(zhí)行指令後:
ZF=0分析:11110011B
∧
00000001B00000001B根據(jù)ZF=0可知AL的D0位為1
指令系統(tǒng)有專門的指令來檢測ZF的設(shè)置,從而控制程式的處理流程。(2)移位指令(分為邏輯移位、算術(shù)移位和迴圈移位三類)
1)邏輯左移指令
SHLopr,count2)算術(shù)左移指令SAL opr,countoprCF補(bǔ)0SHL/SAL移位例:將BL中的值邏輯左移1位,設(shè)(BL)=AFHSHL BL,1
1
010
11110指令執(zhí)行前010
1111
01指令執(zhí)行後執(zhí)行指令後:
(BL)=5EH
3)邏輯右移指令
SHRopr,count4)算術(shù)右移指令SAR opr,countoprCF補(bǔ)0SHR移位例:將BL中的值邏輯右移1位,設(shè)(BL)=AFHSHR BL,1
1
010
11110指令執(zhí)行前010
1011
11指令執(zhí)行後執(zhí)行指令後:
(BL)=57HS保持符號SAR移位將BL中的值算術(shù)右移1位,設(shè)(BL)=AFHSAR BL,1
1
010
11110指令執(zhí)行前執(zhí)行指令後:
(BL)=D7H1
10
1011
11指令執(zhí)行後
邏輯移位總是補(bǔ)0,算術(shù)移位保持符號。
5)迴圈左移指令
ROLopr,count6)帶進(jìn)位迴圈左移指令RCL opr,countRCL移位
7)迴圈右移指令
RORopr,count8)帶進(jìn)位迴圈右移指令RCR opr,countRCR移位CFoprROR移位CFoprROL移位例:將BL中的值迴圈左移1位,設(shè)(BL)=AFHROL BL,1
1
010
11110指令執(zhí)行前執(zhí)行指令後:
(BL)=5FH010
1111
11指令執(zhí)行後例:將BX指向的記憶體單元的高位元組與低位元組互換位置。
MOVCL,8ROR[BX],CL5
B
400指令執(zhí)行前設(shè)執(zhí)行指令前:(DS)=3000H,(BX)=0150H(30150H)=5B40H注意:如果移位位數(shù)大於1,必須用CL寄存器給出移位位數(shù)。執(zhí)行指令後:(30150H)=405BH,CF=0指令執(zhí)行後405
B
0
算術(shù)、邏輯移位可用於:改變數(shù)據(jù)的位置(丟失移出的位)二進(jìn)位的整次冪的乘法(左移)、除法(右移)
算術(shù)移位用於帶符號數(shù)運(yùn)算、邏輯移位用於無符號數(shù)運(yùn)算迴圈移位可用於:改變數(shù)據(jù)的位置(不丟失移動的位)
2.2.4串操作指令
傳送、比較、搜索、存、取
位元組串或字串SI用於尋址源運(yùn)算元(存於數(shù)據(jù)段),由DS提供段地址DI用於尋址目的運(yùn)算元(存於附加段),由ES提供段地址執(zhí)行一次串操作指令後SI、DI中的地址減?。―F=1)SI、DI中的地址增大(DF=0)重複執(zhí)行串操作指令(由CX控制次數(shù)),實(shí)現(xiàn)串操作。(1)串傳送指令
MOVSB
(位元組操作)
MOVSW
(字操作)執(zhí)行操作:((DI))←((SI))
完成操作後:(SI)←(SI)±1,(DI)←(DI)±1(SI)←(SI)±2,(DI)←(DI)±2DF=0,取+DF=1,取-串傳送指令與重複操作首碼聯(lián)用,就可以傳送數(shù)據(jù)串。重複操作首碼有下列三種形式:1)重複首碼REP
2)相等重複首碼
REPE/REPZ3)不相等重複首碼
REPNE/REPNZ(CX)=0?
執(zhí)行串操作指令(CX)(CX)-1(SI)(SI)+1(DI)(DI)+1是否退出執(zhí)行(CX)=0或
ZF=0?(CX)=0或
ZF=1?以REPMOVSB為例,串操作步驟:(1)源串首地址→SI(2)目的串首地址→DI
(3)串長度→CX(4)設(shè)置方向標(biāo)誌(5)執(zhí)行串操作指令:REPMOVSB例:buffer
l(4個字元)buffer2程式如下:
LEA SI,buffer1LEA DI,buffer2CLD MOV CX,4REP MOVSB
CLD
DF=0
地址自動增
STD
DF=1
地址自動減數(shù)據(jù)段附加段REPMOVSB指令操作(CX)=0?((DI))((SI))(CX)(CX)-1(SI)(SI)+1(DI)(DI)+1是否退出執(zhí)行
v
e
m
o………記憶體ovebuffer1mbuffer2SIDIDSES…………ovembuffer2DIDSES…DIDISISI串傳送指令執(zhí)行前、後的情況:(2)串比較指令
CMPSB
(位元組操作)
CMPSW
(字操作)完成操作:((SI))-((DI))
例:比較存放在兩個數(shù)組(string
l和string2)中的兩個字串(14個位元組)是否相同,即比較(
string
l)=(string2
)?程式如下:
LEA SI,string
l
LEA DI,string2MOV CX,14CLDREPZ CMPSB
程式執(zhí)行結(jié)果如圖所示(3)串搜索指令
SCASB
(位元組操作)
SCASW
(字操作)
位元組操作:(AL)-((DI)),(DI)←(DI)±1
字操作:(AX)-((DI)),(DI)←(DI)±2next
如何體現(xiàn)搜索功能?DISI……數(shù)據(jù)段t
nstring1sSIDS……trisDS……tri
sESg
-m20000H20002H20004H20006H20008H附加段DIstring2n
g
-co…25000H25002H25004H25006H25008H2500AH2000AH(SI)=0008H(DI)=5008H返回…
o(4)存串指令
STOSB
(位元組操作)
STOSW
(字操作)
位元組操作:((DI))←(AL),(DI)←(DI)±l
字操作:
((DI))←(AX),(DI)←(DI)±2
(5)取串指令
LODSB
(位元組操作)
LODSW
(字操作)
位元組操作:(AL)←((SI)),(SI)←(SI)±1
字操作:(AX)←((SI)),(SI)←(SI)±2例:取串指令舉例
LEASI,BUFMOVCX,50CLDREPLODSB
MOVAL,[SI]INCSILODSB串操作指令與重複操作首碼的搭配:REP
存串、串傳送指令REPE/REPZ
串比較指令REPNE/REPNZ
串搜索指令
無取串指令2.2.5標(biāo)誌位設(shè)置指令與處理機(jī)控制指令
(1)標(biāo)誌位設(shè)置指令(7條)
對指定的標(biāo)誌位操作:
CLCCF←0
CMCCF←CF求反
STCCF←1
CLDDF←0
STDDF←1
CLIIF←0關(guān)中斷
STIIF←1開中斷
(2)處理機(jī)控制指令
空操作指令:
NOP
操作碼為90H,不執(zhí)行任何操作
用於:1)調(diào)程式時佔(zhàn)用一個位元組存儲單元
2)空耗一個指令執(zhí)行週期延時XXXX90指令1指令2指令3
本章要求:(1)尋址方式是使用指令時首先面臨的問題,要求理解尋址方式的概念,正確使用尋址方式,熟練掌握前6種尋址方式,其中前3種是最基本的尋址方式,後3種是重點(diǎn)尋址方式;(2)掌握常用指令是編寫組合語言程式的基礎(chǔ),要熟悉常用指令的功能、用法、用途及限制;(3)掌握指令的標(biāo)準(zhǔn):
1)執(zhí)行指令前的準(zhǔn)備工作
2)執(zhí)行指令後的結(jié)果存在何處?如何表現(xiàn)?
3)尋址方式
4)如何影響標(biāo)誌位?
5)有何限制?小結(jié)(
REPMOVSB)(
SUBCMP)(
MULBLSUBVAL2,VAL1
)(
ADD500,AH
)3.1組合語言程式功能及上機(jī)過程
3.1.1
組合語言程式功能
組合語言程式的主要功能如下:(1)檢測語法錯顯示錯誤資訊(2)根源程式檔二進(jìn)位目標(biāo)檔(並輸出*.LST檔)(3)展開宏指令一般組合語言程式都應(yīng)具有如下功能:
?
宏彙編功能
?
支持地址和數(shù)據(jù)的符號表示
?
支持記憶體管理
?
支持程式的模組化組織
?
支持多種類型的數(shù)據(jù)表示等
組合語言程式依賴於硬體,不同機(jī)型的系統(tǒng)有自己的組合語言程式。3.1.2
上機(jī)過程上機(jī)過程如圖所示上機(jī)操作步驟:
(1)彙編根源程式
(用ML.EXE命令)ML.EXE命令行格式如下:
ML[/參數(shù)選項(xiàng)]根源程式檔列表
[/LINK連接參數(shù)選項(xiàng)]
例1
彙編根源程式檔myprg.asm
ML
/cmyprg.asm
選項(xiàng)/c——只進(jìn)行彙編產(chǎn)生二進(jìn)位目標(biāo)檔myprg.obj
,不做連接。例2
彙編根源程式檔myprg.asm並產(chǎn)生列表檔、可執(zhí)行檔。
ML
/Fl/Sgmyprg.asm無/c選項(xiàng)—產(chǎn)生目標(biāo)檔myprg.obj,並自動連接產(chǎn)生執(zhí)行檔myprg.exe/Fl選項(xiàng)—產(chǎn)生列表檔myprg.lst/Sg選項(xiàng)—在列表檔中給出myprg.asm中用到的組合語言高級語法等偽指令所產(chǎn)生的系統(tǒng)機(jī)器指令
(2)連接產(chǎn)生執(zhí)行檔
(
LINK.EXE)連接的操作步驟如下:
C:>LINK
myprg
Microsoft(R)OverlayLinkerVersion5.03Copyright(C)MicrosoftCorp1984-1989.Allrightreserved.RunFile[myprg.EXE]:
ListFile[NUL.MAP]:
Libraries[.LIB]:
DefinitionsFile[NUL.DEF]
(3)執(zhí)行程式
C:>myprg
3.2組合語言根源程式的結(jié)構(gòu)與書寫格式組合語言根源程式是段結(jié)構(gòu)的:代碼段、數(shù)據(jù)段、堆疊段、附加段
根源程式由段組成,每段有一個段名,segment定義段起點(diǎn),ends定義段結(jié)束點(diǎn)。每段由若干語句行組成,根源程式以end結(jié)束。
例3-3p43例3-3字串傳送3.3組合語言語句格式與分類
組合語言語句一般格式為:
[識別字/語句標(biāo)號]指令名
[運(yùn)算元序列][;注釋]識別字——用來為變數(shù)、段及過程等命名
語句標(biāo)號——識別字後加
:
,提供轉(zhuǎn)移地址指令名——指令可分為三類:機(jī)器指令、偽指令和宏指令。
機(jī)器指令:指令系統(tǒng)中的指令,程式運(yùn)行時由CPU執(zhí)行;
偽指令:組合語言程式執(zhí)行的操作,規(guī)定組合語言程式如何按要求進(jìn)行彙編及分配記憶體。宏指令:由一系列指令或偽指令構(gòu)成,彙編時展開成若干條機(jī)器指令,用於提高編程效率。運(yùn)算元序列——可以是常量、變數(shù)、運(yùn)算式、寄存器名或標(biāo)號等,用逗號隔開。(偽指令和宏指令由組合語言程式在彙編期間處理)注釋符——
“;”後可給出語句注釋,提高可讀性和可理解性。3.4常量、變數(shù)、標(biāo)號、運(yùn)算符和運(yùn)算式(1)常量
00110110B389D467OB407H
3.475E
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 農(nóng)保財務(wù)制度
- 微信群財務(wù)制度
- 生產(chǎn)許可財務(wù)制度
- 規(guī)范鄉(xiāng)鎮(zhèn)財務(wù)制度
- 民營體檢中心財務(wù)制度
- 肥料廠財務(wù)制度
- 農(nóng)藥廢棄物回收與處置制度
- 公司技術(shù)質(zhì)量、科技成果管理及獎罰制度
- 養(yǎng)老院老人健康監(jiān)測人員職業(yè)道德制度
- 養(yǎng)老院環(huán)境衛(wèi)生管理制度
- 2026年遼寧省盤錦市高職單招語文真題及參考答案
- 近五年貴州中考物理真題及答案2025
- 2026年南通科技職業(yè)學(xué)院高職單招職業(yè)適應(yīng)性測試備考試題含答案解析
- 2025年黑龍江省大慶市中考數(shù)學(xué)試卷
- 2025年廣西職業(yè)師范學(xué)院招聘真題
- 中遠(yuǎn)海運(yùn)集團(tuán)筆試題目2026
- 扦插育苗技術(shù)培訓(xùn)課件
- 妝造店化妝品管理制度規(guī)范
- 浙江省2026年1月普通高等學(xué)校招生全國統(tǒng)一考試英語試題(含答案含聽力原文含音頻)
- 江西省房屋建筑與裝飾工程消耗量定額及統(tǒng)一基價表
- 不確定度評估的基本方法
評論
0/150
提交評論