指令系統(tǒng)(學習資料).ppt_第1頁
指令系統(tǒng)(學習資料).ppt_第2頁
指令系統(tǒng)(學習資料).ppt_第3頁
指令系統(tǒng)(學習資料).ppt_第4頁
指令系統(tǒng)(學習資料).ppt_第5頁
已閱讀5頁,還剩44頁未讀 繼續(xù)免費閱讀

下載本文檔

版權說明:本文檔由用戶提供并上傳,收益歸屬內容提供方,若內容存在侵權,請進行舉報或認領

文檔簡介

4.1.3 8086/8088指令系統(tǒng),8086/8088CPU指令系統(tǒng)包含有133條基本指令。按其功能可以分為6類,它們是: 數(shù)據(jù)傳送類指令 算術運算類指令 邏輯運算與位移類指令 字符串指令 控制轉移類指令 處理器控制類指令。,一、 數(shù)據(jù)傳送類指令,數(shù)據(jù)傳送類指令時將數(shù)據(jù)、地址或立即數(shù)傳送到寄存器或存儲器單元中。可完成寄存器與寄存器之間、寄存器與存儲器之間、寄存器與I/O端口之間的字節(jié)或字傳送。它又可分為通用數(shù)據(jù)傳送指令、輸入/輸出指令、目標地址傳送指令和標志傳送指令四組。特點:除SAHF和POPF不影響標志寄存器內容。 (一)通用數(shù)據(jù)傳送指令 1. 最基本的傳送指令 指令格式及操作: MOV dst,src ;(dst)(src) 將源操作數(shù)s指定的內容送到d目的操作數(shù) dst 是目的操作數(shù),它可以是存儲器、通用寄存器(不能為IP)和段寄存器(不能為CS),不能為立即數(shù)。 Src 是源操作數(shù),它可以是存儲器、通用寄存器、段寄存器和立即數(shù)。,需說明一點,對于代碼段寄存器CS和指令指針寄存器IP,通常無需用戶利用傳送指令改變其中的內容。但是CS可以作為源操作數(shù)。,16 位,MOVE指令需要注意的問題: MOVE指令可傳送8位數(shù)據(jù),也可傳送16位數(shù)據(jù)。 MOVE指令中的兩操作數(shù)s和d,必用1個寄存器,不允許同時為存儲單元。 不能用CS和IP做目的操作數(shù)。 不允許段寄存器之間直接數(shù)據(jù)傳送。 不允許立即數(shù)做目的操作數(shù)。 不能向段寄存器送立即數(shù)。,2.堆棧操作指令 堆棧操作指令是用來完成壓入和彈出堆棧操作的。80868088指令系統(tǒng)中提供了完成這兩種操作的相應指令。 壓入堆棧指令 指令格式及操作: PUSH src ;(SP) (SP)-2, (SP)+1:(SP) (src) src 源操作數(shù)可以是寄存器操作數(shù)和存儲器操作數(shù),且必須是16位的操作數(shù),但不能是立即數(shù)。, 彈出堆棧指令 指令格式及操作: POP dst ; (dst) (SP)+1:(SP), (SP) (SP)+2 dst 目的操作數(shù)可以是寄存器操作數(shù)和存儲器操作數(shù),且必須是16位的操作數(shù),但不能是立即數(shù)。,特點: s和d可以是16位寄存器或存儲器兩相鄰單元; 堆棧按字操作; 每執(zhí)行一條入棧指令,堆棧地址指針SP減2,入棧的數(shù)據(jù)位于棧頂; 高位字節(jié)先入棧,放在高位地址單元,低位字節(jié)后入棧,放在較低地址單元;先進先出原則; 執(zhí)行彈出指令時,過程相反,棧頂指針的值加2; CS段寄存器的值可以入棧,但不能反過來彈出一個字到CS,3.交換指令 將源操作數(shù)和目的操作數(shù)(字或字節(jié))相互對應交換位置。 指令格式及操作: XCHG opr1, opr2 ;(opr1) (opr2),4.字節(jié)轉換指令 通過查表來完成代碼轉換,用于實現(xiàn)字節(jié)翻譯的功能。 指令格式及操作: XLAT src_table ;(AL) (BX)+(AL) XLAT指令是用來將一種字節(jié)代碼轉換成另一種字節(jié)代碼。執(zhí)行的結果放在AL中。 使用指令前: BX寄存器的內容指向表格首址;AL中存放待查的碼,即某一項與表首地址的距離。 XLAT指令還可以有以下幾種表示形式: XLAT ;不寫操作數(shù) XLATB ;有B就不允許再寫操作數(shù)。 XLAT ES:src_table ;重設段寄存器為ES,例在內存的數(shù)據(jù)段有一張16進制數(shù)的ASCII碼表,其首地址為Hex_table,如下圖所示,為了查出第10個元素, 即十六進制數(shù)A的ASCII碼,則可用以下幾條指令實現(xiàn): MOV BX, OFFSET Hex_tale ;(BX) 表首址 MOV AL, 0AH ;(AL) 序號 XLAT Hex_table ;查表轉換,BX: 1000H,AX: 000AH,Hex_table,(二) 輸入/輸出指令 只能用累加器作為執(zhí)行I/0數(shù)據(jù)傳送的機構。輸入輸出指令可以分為兩大類:一類是直接端口地址的輸入輸出指令:一類是通過DX寄存器間接端口地址的輸入輸出指令。 輸入指令 直接尋址的輸入指令 尋址范圍0-255(少于8位地址) 指令格式及操作: IN acc, port ;(acc) (port),間接尋址的輸入指令 尋址范圍0-65535(少于或超過8位地址) 指令格式及操作: IN acc, DX ;(acc) (DX) 輸出指令 直接尋址的輸出指令 指令格式及操作: OUT port, acc ; (port) (acc) 間接尋址的輸出指令 指令格式及操作: OUT DX, acc ; (DX) (acc),(三)目標地址傳送指令 1. 取有效地址指令 指令格式: LEA reg16, mem 此指令的功能是將存放源操作數(shù)的16位偏移地址(即有效地址EA)送到一個16位的通用寄存器中。即源操作數(shù)必須是一個存儲器操作數(shù),目的操作數(shù)必須是一個通用寄存器操作數(shù)。例如: LEA BX, buffer LEA AX, BPDI LEA DX, betaBXSI 注意LEA指令和MOV指令的異同。,不同: LEA BX, buffer ;將存儲器buffer的偏 移地址送到BX MOV BX, buffer ;將存儲器buffer的內 容傳送到BX 相同: LEA BX, buffer MOV BX, OFFSET buffer 以上兩條指令都是將存儲器buffer的偏移地址送到BX。其中OFFSET buffer 表示存儲器偏移地址。,2. 地址指針裝入DS指令 指令格式: LDS reg16, mem32 此指令的功能是將源操作數(shù)所對應的雙字長的內存單元中的高字內容(一般為16位段基址)送入DS,低字內容(一般為偏移地址)送入指令所指定的寄存器中。例如: LDS DI, 2130H,3. 地址指針裝入ES指令 指令格式: LES reg16, mem32 此指令的功能是將源操作數(shù)所對應的雙字長的內存單元中的高字內容(一般為16位段基址)送入ES,低字內容(一般為偏移地址)送入指令所指定的寄存器中。例如: LES DI, 2130H,(四) 標志傳送指令 1.取標志指令 將標志寄存器F的低字節(jié)傳送到AH中。 指令格式: LAHF 2.置標志指令 將AH寄存器的內容傳送到標志寄存器F的低字節(jié)。 通過AH對標志寄存器的SF、ZF、AF、PF、CF標志位置位。 指令格式: SAHF,OF,DF,IF,TF,SF,ZF,AF,PF,CF,FLAG,AH,LAHF和SAHF指令操作示意圖,3.標志壓入堆棧指令 將16位標志寄存器F的內容入棧保護。 指令格式及操作: PUSHF ;(SP) (SP)-2, ;(SP)+1;(SP) (FLAG) 4.標志彈出堆棧指令 將當前棧頂和次棧頂中的數(shù)據(jù)彈出,送回標志寄存器當中。 指令格式及操作: POPF ; (FLAG) (SP)+1;(SP), ; (SP) (SP)+2 經常成對出現(xiàn),用在子程序和中斷處理程序的首尾,用來保護和恢復主程序涉及的標志寄存器的內容。 必要時可修改標志寄存器的內容。,二、算術運算指令,80868088有豐富的算術運算指令,而且可以處理4種類型的數(shù)據(jù),無符號/有符號、8/16位二進制數(shù)、無符號壓縮型/非壓縮型十進制。 根據(jù)運算結果影響標志位,有時要利用某些標志位才能得到正確的結果。 分成5小類: 加法 減法 乘法 除法 十進制調整指令,1.加法指令,在微處理器中,沒有專用的BCD碼運算指令,使用二進制運算指令進行BCD碼數(shù)的運算,然后用BCD碼運算調整指令進行調整,重新得到BCD碼的結果。,BCD調整指令,ASCII碼調整指令,(dst) (dst) + 1,(dst) (dst)+(src)+(CF),(dst) (dst) +(src),操作功能,1,C,P,S,Z,A,DAA,AAA,INC dst,ADC dst, src,ADD dst, src,O,標志位影響,指令格式, 功能:源操作數(shù)和目的操作數(shù)相加,結果送到目的操作數(shù)。 源操作數(shù):通用寄存器、存儲器、立即數(shù) 目的操作數(shù):通用寄存器、存儲器 提示:目的操作數(shù)不能為立即數(shù),源操作數(shù)和目的操作數(shù)不能同時為存儲器。,ADD dst, src,(dst) (dst) +(src), 功能:源操作數(shù)和目的操作數(shù)相加外,再加上進位標志CF,結果送到目的操作數(shù)。 CF將從新根據(jù)結果置成新的狀態(tài),ADC指令一般用于16位以上的多字節(jié)數(shù)相加。,ADC dst, src,(dst) (dst) +(src)+1, 功能:將目的操作數(shù)當作無符號數(shù),加1后結果送到目的操作數(shù)。 目的操作數(shù):通用寄存器、存儲器,但不允許為立即數(shù)。 間接尋址的存儲單元加1時,數(shù)據(jù)長度需用偽指令說明。循環(huán)程序中,常用該指令對地址指針和循環(huán)計數(shù)值進行修改。,INC d,d d +1,例4.3 計算兩個多字節(jié)十六進制數(shù)之和:3B74AC60F8H+20D59E36C1H=? 式中被加數(shù)和加數(shù)均有5個字節(jié),可以編一個循環(huán)程序實現(xiàn)以上運算。假設已將被加數(shù)和加數(shù)分別存入從DATA1和DATA2開始的兩個內存區(qū),且均為低位字節(jié)在前,高位字節(jié)在后,如圖4.15所示。要求相加所得結果仍存回以DATA1為首址的內存區(qū)。,程序流程圖如圖4.16所示。程序如下: MOV CX,5 ;設置循環(huán)次數(shù) MOV SI,0 ;置位移量初值 CLC ;清進位CF LOOPER:MOV AL,DATA2SI;取一個加數(shù) ADC DATA1SI,AL ;和一個被加數(shù)相加 INC SI ;位移量加1 DEC CX ;循環(huán)次數(shù)減1 JNZ LOOPER ;加完否,若沒完,轉LOOPER,繼續(xù)相加 HLT ;程序暫停,圖4.15 例4.3中被加數(shù)和加數(shù)在內存中的存放情況,圖4.16 例4.3的程序流程圖,如果兩個對應的BCD數(shù)相加若得到的結果大于9或向高位有進位就需要使用BCD碼的調整指令。 AAA指令(非壓縮型BCD碼加法調整指令)的操作為: 如果 (AL) 0FH9 或 (AF)1(低4位9或有進位) 則 (AL) (AL)06H (AH) (AH)1 (AF) 1 (CF) (AF) (AL) (AL) 0FH) 否則 (AL) (AL) 0FH) DAA指令(壓縮型BCD碼加法調整指令)的操作為: 如果 (AL) 0FH9, (AF)1 則 (AL) (AL)06H (AF) 1 如果 (AL) 9FH 或 (CF)1(高四位9或有進位) 則 (AL) (AL)60H (CF) 1,例要求計算兩個至今指數(shù)之和,78???捎靡韵轮噶顚崿F(xiàn): MOV AX, 0007H ;(AL)=07H,(AH)=00H MOV BL, 08H ;(BL)=08H ADD AL, BL ;(AL)=0FH AAA ;(AL)=05H,(AH)=01H ;(CF)=(AF)=1 MOV AX, 0007H ;(AL)=07H,(AH)=00H MOV BL, 08H ;(BL)=08H ADD AL, BL ;(AL)=0FH DAA ;(AL)=15H,(AH)=00H ;(CF)=0,(AF)=1,2.減法指令, 功能:目的操作數(shù)減去源操作數(shù),結果送到目的操作數(shù)。 源操作數(shù):通用寄存器、存儲器、立即數(shù) 目的操作數(shù):通用寄存器、存儲器 提示:目的操作數(shù)不能為立即數(shù),源操作數(shù)和目的操作數(shù)不能同時為存儲器。不允許進行段寄存器減法。,SUB dst, src,(dst) (dst) -(src), 功能:目的操作數(shù)減去源操作數(shù)外,再減去進位標志CF,結果送到目的操作數(shù)。 CF將從新根據(jù)結果置成新的狀態(tài),SBB指令一般用于16位以上的多字節(jié)數(shù)相加。,SBB dst, src,(dst) (dst) -(src)-1, 功能:將目的操作數(shù)減1后結果送到目的操作數(shù)。 目的操作數(shù):通用寄存器、存儲器,但不允許為立即數(shù)。 間接尋址的存儲單元加1時,數(shù)據(jù)長度需用偽指令說明。循環(huán)程序中,常用該指令對地址指針和循環(huán)計數(shù)值進行修改。,DEC d,d d -1, 功能:將目的操作數(shù)取負后結果送到目的操作數(shù)。 目的操作數(shù):通用寄存器、存儲器,但不允許為立即數(shù)。,NEG d,d 0-d, 功能:目的操作數(shù)減去源操作數(shù),不送回結果,只根據(jù)運算結果置標志位。 源操作數(shù):通用寄存器、存儲器、立即數(shù) 目的操作數(shù):通用寄存器、存儲器 提示:目的操作數(shù)不能為立即數(shù),源操作數(shù)和目的操作數(shù)不能同時為存儲器。不允許進行段寄存器比較。,CMP d, s,d-s 只置標志位,例4.4 內存數(shù)據(jù)段存放了200個帶符號數(shù),首地址為TAB1,要求將各數(shù)取絕對值后存入以TAB2為首址的內存區(qū)。 由于200個帶符號數(shù)中可能既有正數(shù),又有負數(shù),因此先要判斷正負。如為正數(shù),可以原封不動地傳送到另一內存區(qū);如為負數(shù),則需先求補即可得到負數(shù)的絕對值,然后再傳送。程序如下:,LEA SI,TAB1 ;(SI)源地址指針 LEA DI,TAB2 ;(DI)目標地址指針 MOV CX,200 ;(CX)循環(huán)次數(shù),CHECK: MOV AL,SI ;取一個帶符號數(shù)到AL OR AL,AL ;AL內容不變,只影響標志位 JNS NEXT ;若(SF)=0,則轉NEXT NEG AL ;否則求補 NEXT: MOV DI,AL ;傳送到目標地址 INC SI ;源地址加1 INC DI ;目標地址加1 DEC CX ;循環(huán)次數(shù)減1 JNZ CHECK ;如不等于零,則轉CHECK HLT ;停止,AAS指令的操作為: 如果 (AL) 0FH9 或 (AF)1 則 (AL) (AL)06H (AH) (AH)1 (AF) 1 (CF) (AF) (AL) (AL) 0FH) 否則 (AL) (AL) 0FH) DAS指令的操作為: 如果 (AL) 0FH9, (AF)1 則 (AL) (AL)06H (AF) 1 如果 (AL) 9FH 或 (CF)1 則 (AL) (AL)60H (CF) 1,3.乘法指令,AL,源操作數(shù),AX,源操作數(shù), 功能:完成兩個無符號的二進制數(shù)相乘。 被乘數(shù):隱含在累加器AX或AL中 乘數(shù):指令中由s指定的源操作數(shù),通用寄存器或存儲器操作數(shù)。 積:相乘后得到雙倍長的積 8位二進制數(shù)乘法:其16位的積高8位存于AH,低8位存于AL中。 16位二進制數(shù)乘法:其32位的積高16位存于DX,低16位存于AX中。,MUL s,無符號乘法指令, 功能:完成兩個有符號的二進制數(shù)相乘。 被乘數(shù):隱含在累加器AX或AL中 乘數(shù):指令中由s指定的源操作數(shù),通用寄存器或存儲器操作數(shù)。 積:相乘后得到雙倍長的積 8位二進制數(shù)乘法:其16位的積高8位存于AH,低8位存于AL中。 16位二進制數(shù)乘法:其32位的積高16位存于DX,低16位存于AX中。,IMUL s,有符號乘法指令,4.除法指令,8086/8088CPU執(zhí)行除法時規(guī)定:除數(shù)只能是被除數(shù)的一半字長。當被除數(shù)為16位時,除數(shù)應為8為;當被除數(shù)為32位時,除數(shù)應為16為, 功能:完成兩個無

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
  • 4. 未經權益所有人同意不得將文件中的內容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內容本身不做任何修改或編輯,并不能對任何下載內容負責。
  • 6. 下載文件中如有侵權或不適當內容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論