《微型計(jì)算機(jī)原理及應(yīng)用第三版》由會員分享,可在線閱讀,更多相關(guān)《微型計(jì)算機(jī)原理及應(yīng)用第三版(19頁珍藏版)》請?jiān)谘b配圖網(wǎng)上搜索。
1、單擊此處編輯母版標(biāo)題樣式,*,單擊此處編輯母版文本樣式,第二級,第三級,第四級,第五級,5.1 8086指令的尋址方式,指令,:微處理器提供的某一種基本操作功能。,(*),進(jìn)行什么操作(,操作碼,),(*),對什么進(jìn)行操作(,操作數(shù)或操作數(shù)的來源,),操作后的結(jié)果數(shù)據(jù)可以存放到某個原來的操作數(shù)位置,指令系統(tǒng),:計(jì)算機(jī)提供所有的指令的集合。,(*),指令系統(tǒng)隨CPU的不同而不同,機(jī)器語言,:采用二進(jìn)制的機(jī)器碼表示指令、數(shù)據(jù)和指令數(shù)據(jù)的地址等信息的。10111000 00000101 00000000,匯編語言,:,采用,助記符,表示的程序設(shè)計(jì)語言。匯編語言源程序是機(jī)器語言程序的符號表示。,(編譯
2、器處理),MOV AX,O3H,匯編語言指令的格式,:,標(biāo)號:指令助記符 操作數(shù);注釋,例如:,LINE1:INCCX;計(jì)數(shù)器加一,ADD AX,BX,DAA,(*),標(biāo)號的命名規(guī)則,(*),指令助記符不可缺省,(*),操作數(shù)在不同的情況下可以有2個,1個或者是沒有,(*),注釋必須以分號開頭,注釋不生成目標(biāo)代碼,(*),四個部分可以用制表符隔開。,尋址方式,:,指令中給出操作數(shù)的方式,操作數(shù)的尋址,例如,MOV AX,1234H,指令的尋址,例如,JUMP LAB,操作數(shù)的來源:指令代碼中直接給出。,MOV AX,1200H,存放在寄存器中。,MOV AX,BX,存放在指定的存儲單元中。,M
3、OV AX,3456H,1、立即尋址,:,操作數(shù)直接包含在指令中,在操作碼之后。,,(*),不必執(zhí)行總線周期訪問存儲器,故稱之為立即數(shù)。,(*),立即數(shù)可以是一個8位或16位數(shù)。,例如:,MOV AL,80H MOV AX,1090H,(*),立即數(shù)尋址方式只能用于,源操作數(shù),,不能用于,目的操作數(shù),。,錯誤:MOV 1200,AX,(*),一條指令中源操作數(shù)和目的操作數(shù)可能有不同的尋址方式,2、寄存器尋址,:,操作數(shù)包含在CPU內(nèi)的某個寄存器中,指令中直接給出該寄存器名,,16位:AX,BX,CX,DX,SI,DI,SP,BP,8位:AL,BL,CL,DL,AH,BH,CH,DH,例如:,I
4、NC CX,MOV AX,BX,以下介紹的幾個尋址方式將針對,存儲器操作數(shù),而言的。若操作數(shù)在存儲器中,一般位于數(shù)據(jù)段、堆棧段或附加段中,這時指令中給出的是,操作數(shù)所在單元的地址(EA),或,產(chǎn)生EA的計(jì)算方式,。顯然執(zhí)行這類指令時:,CPU首先要,計(jì)算出有效地址EA,(,EA是一個不帶符號的16位數(shù),),再由總線接口部件BIU計(jì)算出物理地址,再執(zhí)行總線周期按該物理地址訪問存儲器并取出操作數(shù)送給EU,由EU具體執(zhí)行該指令。,3、直接尋址,:,操作數(shù)在存儲器中的16位有效地址由指令直接給出。,例如:,MOV AX,1070H MOV AL,1070H,(*),要用,方括號括起地址,以免與立即數(shù)尋
5、址混淆,(*),默認(rèn)是從數(shù)據(jù)段取數(shù),如果不是數(shù)據(jù)段則要在前面加段,跨越,前綴,例如:,MOV BX,2000H,MOV BX,ES:2000H,4、間接尋址,(4A)寄存器間接尋址,:,操作數(shù)的有效地址在指令中指定的某個寄存,器中。,例如:,MOV AX,BX,(*),可用的寄存器只有四個BX,BP,SI,DI,錯誤:MOV AX,DX,(*),如果間址寄存器為BP則默認(rèn)為是堆棧段,如果間址寄存器為,BX,SI,DI則默認(rèn)為是數(shù)據(jù)段。,(*),在一條指令中,不能同時有兩個存儲器操作數(shù)(避免指令過長)。,錯誤:MOV BX,1200H,(4B)寄存器相對間接尋址,:,有效地址EA等于指令所指示的
6、寄存器中,的內(nèi)容再加上指令中給定的816位的位移量。,例如:,MOV AX,SI+100,MOV AX,SI+100,MOV AX,100SI,(*),寄存器相對尋址有以上三種寫法,(*),寄存器相對尋址可以用來,尋址一維表中的數(shù)據(jù),(4C)基址變址尋址,:,基址變址尋址是操作數(shù)的有效地址EA由指令,指定的一個,基址寄存器,(BX或BP)和,一個變址寄,存器,(SI或D1)內(nèi)容之和。,例如:,MOV AX,BXDI,MOV AX,BX+DI,(*),基址變址尋址可以用來,尋址二維表中的數(shù)據(jù),(*),要注意只能是基址和變址的組合而不能用兩個基址或兩個變址的組合,錯誤:MOV AX,SIDI,MO
7、V AX.BXBP,(4D)相對基址變址尋址,:,例如:,MOV AX,100BXSI,MOV AX,BX+SI+100H,MOV AX,100BX+SI,(*),所有的存儲器操作數(shù)尋址方式都支持段跨越前綴。,(*),使用BP寄存器做間接尋址時注意默認(rèn)的段。,測試題一,:,寫出下列指令中源操作數(shù)的尋址方式:,(1)MOV SI,1000 (2)MOV BH,AL ,(3)MOV AX,SIBX (4)MOV BP,BX,(5)MOV DI,2130H (6)MOV DL,BX十SI十20H,(7)MOV DI,BX十100,測試題二:,指出下列指令的錯誤之處,(1)MOV 1000H,AX (
8、2)MOV AX,DX,(3)MOV AX,SIDI (4)MOV BX,SI,(5)MOV BP,AL,測試題三:,設(shè)有關(guān)寄存器及有關(guān)存儲單元的內(nèi)容如下:,(DS)2000H,(BX)0100H,(SI)0002H,,(20100H)=12H,(20101H)34H,(20102H)56H,(20103H)=78H,(21200H)2AH,(21201H)4CH,(21202H)0B7H,(21203H)65H,試說明下列各條指令執(zhí)行后AX寄存器的內(nèi)容,(1)MOV AX,1200H (2)MOV AX,BX,(3)MOV AX,1200H (4)MOV AX,BX,(5)MOV AX,11
9、00BX(6)MOV AX,BX+SI,5.2 8086指令系統(tǒng),8086/8088指令系統(tǒng)共包含133條基本指令,按功能可分為六類,(1)數(shù)據(jù)傳送類指令 (4)字符串處理指令,(2)算術(shù)運(yùn)算類指令 (5)控制轉(zhuǎn)移類指令,(3)邏輯運(yùn)算與移位類指令 (6)處理器控制類指令,指令類型,指令書寫格式,通用數(shù)據(jù)傳送,MOV OPD,OPS,PUSH OPS,POP OPD,XCHG OPS,OPD,XLAT,目標(biāo)地址傳送,LEA OPD,OPS,LDS OPD,OPS,LES OPD,OPS,標(biāo)志位傳送,LAHF,SAHF,PUSHF,POPF,I/O數(shù)據(jù)傳送,IN AL/AX,PORT,OUT P
10、ORT,AL/AX,一、傳送指令,1、通用數(shù)據(jù)傳送指令,(一)MOV數(shù)據(jù)傳送,指令格式:MOV OPD,OPS,例如:MOV AX,1234H,MOV AX,BX MOV BX,SI,MOV SI,DS MOV DS,AX,MOV DS,BX MOV 1234H,1234H,(*),源和目的操作數(shù)不能同為存儲器操作數(shù),如需要傳送應(yīng)通過,寄存器轉(zhuǎn)送。,(*),不能用CS和IP作目的操作數(shù)。,(*),不允許在段寄存器間直接傳送數(shù)據(jù)。,(*),類型要匹配。,(*),傳送指令一般不影響標(biāo)志寄存器。,(*),不允許直接向段寄存器傳送立即數(shù),如果需要,則應(yīng)通過通,用寄存器轉(zhuǎn)送。,(二)PUSH,POP堆棧
11、操作,指令格式:PUSH OPS,POP OPD,例如:PUSH AX PUSH DS PUSH 1234H,(*),源操作數(shù)OPS和目的操作數(shù)OPD可以為,16位,通用寄存器、段寄存器或存儲單元中的字?jǐn)?shù)據(jù),,但不能是立即數(shù),CS不能是目的操作數(shù)。,(*),PUSH是,先移后入,POP是,先出后移,(*),要符合,先入后出,的原則.,例題,:(AX)=1234H(BX)=7890H (SP)=0056H請畫出以下四條指令,執(zhí)行時這三個寄存器的內(nèi)容變化和堆棧段內(nèi)容的變化。,PUSH AX,PUSH BX,POP AX,POP BX,(三)XCHG交換指令,指令格式:XCHG OPD,OPS,例如
12、:XCHG AX.BX XCHG AX,SI+3,(*),不能同時為存儲器操作數(shù)。段寄存器也不能作為操作數(shù)。,(四)XLAT換碼指令,指令格式:XLAT,(*),XLAT相當(dāng)于MOV AL,BX+(AL),轉(zhuǎn)換步驟為:建立轉(zhuǎn)換表,待轉(zhuǎn)換碼放入AL中,執(zhí)行XLAT,例題:將十六進(jìn)制數(shù)0F轉(zhuǎn)換為ASCII碼。,TABLE DB 30H,31H,39H,41H,45H,2、目標(biāo)地址傳送指令,(一)LEA取有效地址指令,指令格式:LEA OPD,OPS,(*),該指令傳送的內(nèi)容是地址,(*),源操作數(shù)必須是,存儲器操作數(shù),,目的操作數(shù)必須是除段寄存器之外的16位通用寄存器。,例題:設(shè)(S1)3000H
13、,(4000H)7788,求下兩條指令執(zhí)行完后 BX和SP的值。,LEA BX,SI十1000H,MOV SP,4000H,(二)LDS(LES)將雙字地址指針?biāo)虳S(ES)和一個寄存器,指令格式:LDS OPD,OPS,(*),從源操作數(shù)指示的存儲單元地址開始,將連續(xù)4個字節(jié)單元中的內(nèi)容分別 送入OPD和DS(ES)中,,(*),即前二個字節(jié)單元中的內(nèi)容送OPD指示的寄存器中,后兩個字節(jié)單元中的內(nèi)容送入DS(ES)。,(*),作用是,取內(nèi)存中存放的地址指針,例題:設(shè)DS3200H,(33550H)3A78H,(33552H)1998H,求執(zhí)行指令LDS SI,33550H 后SI和DS中的值
14、,3、標(biāo)志位傳送指令,1、LAHF 標(biāo)志寄存器低8位送AH指令,指令格式:LAHF,2、SAHF 累加器AH送標(biāo)志寄存器低8位指令,指令格式:SAHF,3、PUSHF 標(biāo)志寄存器人棧指令,指令格式:PUSHF,4、POPF 標(biāo)志出棧指令,指令格式:POPF,4、輸入/輸出數(shù)據(jù)傳送指令,I,O指令可有兩種格式:,直接尋址I/O指令:當(dāng)I/O端口地址值,小于256,時用直接格式。,間接尋址I/O指令:當(dāng)I/O端口地址值,大于256,時用間接尋址格式,(*),間址寄存器只能用DX,(*),接口地址是兩個字節(jié),0000HFFFFH,(*),與外設(shè)接口進(jìn)行通信必須通過累加器AL或AX。,IN AL,PORT,IN AX,PORT,IN AL,DX,IN AX,DX,例題:將數(shù)據(jù)12H送到端口地址為300H的外設(shè)接口上去,MOVAL,12H,MOVDX,300H,OUTDX,AL,