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