版權(quán)說(shuō)明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
微機(jī)原理及應(yīng)用所有復(fù)雜操作,我們做;圖書(shū)附贈(zèng),永久免費(fèi),只為老師用書(shū)更方便課件教案微課掃碼題庫(kù)建課互評(píng)考試平臺(tái)
學(xué)習(xí)工具目錄微型計(jì)算機(jī)基礎(chǔ)01微處理器02指令系統(tǒng)(上)03指令系統(tǒng)(下)04匯編語(yǔ)言程序設(shè)計(jì)05存儲(chǔ)器06輸入輸出與中斷07可編程接口芯片08數(shù)模轉(zhuǎn)換與模數(shù)轉(zhuǎn)換09綜合實(shí)踐——交通燈控制系統(tǒng)10第三章指令系統(tǒng)(上)本章導(dǎo)讀學(xué)習(xí)目標(biāo)掌握8086指令的分類和格式。掌握操作數(shù)的尋址方式和程序轉(zhuǎn)移地址的尋址方式。掌握調(diào)試程序DEBUG的使用方法。掌握數(shù)據(jù)傳送類指令的功能及用法。掌握算術(shù)運(yùn)算與邏輯運(yùn)算類指令的功能及用法。增強(qiáng)規(guī)則意識(shí),理解遵守規(guī)則對(duì)于個(gè)人成長(zhǎng)和社會(huì)穩(wěn)定的重要意義。任務(wù)導(dǎo)航任務(wù)一8086指令系統(tǒng)簡(jiǎn)介任務(wù)二數(shù)據(jù)傳送類指令任務(wù)三算術(shù)運(yùn)算與邏輯運(yùn)算類指令8086指令系統(tǒng)簡(jiǎn)介01由于計(jì)算機(jī)指令實(shí)質(zhì)上均為二進(jìn)制形式,不便于理解和記憶。為此,人們發(fā)明了助記符來(lái)輔助記憶和書(shū)寫(xiě)指令,這就是匯編指令。3.1.1指令分類計(jì)算機(jī)指令是指計(jì)算機(jī)所能識(shí)別并執(zhí)行的基本操作命令,這些操作命令的集合稱為計(jì)算機(jī)的指令系統(tǒng)。對(duì)于不同類型的微處理器,其指令系統(tǒng)各不相同。8086指令系統(tǒng)是80x86系列微處理器的基礎(chǔ)指令系統(tǒng),8086后續(xù)微處理器均繼承了此指令系統(tǒng),并在其基礎(chǔ)上進(jìn)行了擴(kuò)充。8086指令系統(tǒng)按功能可以分為數(shù)據(jù)傳送類指令算術(shù)運(yùn)算類指令邏輯運(yùn)算類指令字符串操作指令處理器控制類指令程序控制類指令3.1.2指令格式計(jì)算機(jī)指令操作碼操作數(shù)指令無(wú)操作數(shù)指令單操作數(shù)指令雙操作數(shù)指令根據(jù)指令中操作數(shù)個(gè)數(shù)的不同其格式如下:操作碼[目的操作數(shù)][,源操作數(shù)]指出了計(jì)算機(jī)所要執(zhí)行的基本操作指明了操作的對(duì)象個(gè)數(shù)由指令的功能決定在8086指令系統(tǒng)中,操作碼的長(zhǎng)度一般為1~2個(gè)字節(jié),指令的總長(zhǎng)度一般為1~6個(gè)字節(jié)。3.1.2指令格式指令字長(zhǎng):一條指令中所包含的二進(jìn)制代碼的位數(shù)。即使對(duì)于同一條指令,由于其操作數(shù)尋址方式的不同:長(zhǎng)度變化不定長(zhǎng)指令長(zhǎng)度始終不變定長(zhǎng)指令通常是機(jī)器字長(zhǎng)的一倍、兩倍、多倍或半倍8086CPU的字長(zhǎng)為16位,故其指令長(zhǎng)度可以是1個(gè)字節(jié)、1個(gè)字或多個(gè)字節(jié)等。例如3.1.3操作數(shù)尋址在8086指令中,操作數(shù)可以存放在存儲(chǔ)器、寄存器或指令中。要執(zhí)行指令,就要通過(guò)操作數(shù)存放的地址找到它,尋找操作數(shù)的方式稱為尋址方式。1.立即尋址2.寄存器尋址3.直接尋址4.寄存器間接尋址5.寄存器相對(duì)尋址6.基址加變址尋址7.相對(duì)基址加變址尋址3.1.3操作數(shù)尋址定義:指令中直接給出指令的操作數(shù)(跟在操作碼的后面),取出指令的同時(shí)就可以獲得操作數(shù)。1立即尋址MOVAL,12H ;12H為立即數(shù),指令執(zhí)行后,(AL)=12HMOVAX,1234H ;1234H為立即數(shù),指令執(zhí)行后,(AH)=12H,(AL)=34HMOVBX,512 ;512為立即數(shù),指令執(zhí)行后,(BH)=02H,(BL)=00HMOVCX,'AB' ;'AB'為立即數(shù),指令執(zhí)行后,(CH)='A',(CL)='B'例3-1作用:給寄存器或存儲(chǔ)器賦初值稱為立即數(shù)假設(shè)你正在編寫(xiě)一個(gè)程序,需要給一個(gè)變量賦一個(gè)固定的值,比如數(shù)字255。你會(huì)如何用最簡(jiǎn)單的方式將這個(gè)值存儲(chǔ)到一個(gè)寄存器中呢?請(qǐng)思考一下,你會(huì)選擇哪種指令和方法來(lái)完成這個(gè)操作?3.1.3操作數(shù)尋址1立即尋址立即尋址……代碼段存儲(chǔ)器操作碼12HMOVAL,12HAHAL代碼段存儲(chǔ)器操作碼34HMOVAX,1234HAHAL12H……代碼段存儲(chǔ)器操作碼00HMOVBX,512BHBL02H……代碼段存儲(chǔ)器操作碼'B'MOVCX,'AB'CHCL'A'……3.1.3操作數(shù)尋址1立即尋址立即尋址只針對(duì)源操作數(shù),此時(shí)源操作數(shù)是一個(gè)立即數(shù),存放于內(nèi)存的代碼段中。此處的立即數(shù)可以是8位或16位。123單引號(hào)中的字符表示該字符的ASCII碼,如‘A’表示字符A的ASCII碼。不能直接給段寄存器和標(biāo)志位寄存器賦立即數(shù)。
以分號(hào)開(kāi)頭的內(nèi)容是對(duì)本行指令的注釋。低8位存放在低地址單元,高8位存放在高地址單元?!癕OVDS,1000H”是一條非法指令。要為段寄存器賦初值,可以利用數(shù)據(jù)寄存器作中介。例如:MOVAX,1000HMOVDS,AX例如3.1.3操作數(shù)尋址定義:操作數(shù)存放在某個(gè)寄存器內(nèi),在指令中直接給出寄存器的名字。2寄存器尋址對(duì)于16位操作數(shù),寄存器可以是AXBXCXDXSPBPSIDICSDSSSES對(duì)于8位操作數(shù),寄存器可以是AHALBHBLCHCLDHDL3.1.3操作數(shù)尋址2寄存器尋址源寄存器和目的寄存器的位數(shù)必須一致。例如,“MOVCL,BX”是一條非法指令。MOVAX,BX ;源操作數(shù)和目的操作數(shù)都是寄存器尋址方式,指令執(zhí)行后, ;(AX)=(BX),BX中的內(nèi)容不變MOVAL,AH ;源操作數(shù)和目的操作數(shù)都是寄存器尋址方式,指令執(zhí)行后, ;(AL)=(AH),AH中的內(nèi)容不變MOVAX,1234H ;目的操作數(shù)是寄存器尋址方式例3-23.1.3操作數(shù)尋址定義:操作數(shù)存放在存儲(chǔ)器中,指令中直接給出操作數(shù)所在存儲(chǔ)單元的偏移地址。默認(rèn)情況下,操作數(shù)存放在數(shù)據(jù)段中。要使用其他段中操作數(shù),則應(yīng)在指令中增加段前綴(稱為段超越),如ES:2000H等。3直接尋址MOVAX,[2000H] ;將DS段偏移量為2000H中內(nèi)容送入AX寄存器MOVAX,ES:2000H ;將ES段偏移量為2000H中內(nèi)容送入AX例3-3尋址時(shí),用于存放操作數(shù)的存儲(chǔ)單元的物理地址為:段地址×16(即左移四位)+偏移地址3.1.3操作數(shù)尋址3直接尋址在匯編語(yǔ)言中,經(jīng)常用符號(hào)地址取代數(shù)值地址,例如:直接尋址DS:2000H=32000HDS30000H+
2000H32000HDS:0000H=30000H代碼段存儲(chǔ)器數(shù)據(jù)段操作碼00H20H34H12H…………AHALMOVAX,BUFFERMOVAX,[BUFFER]把BUFFER中存放的數(shù)據(jù)送入AX寄存器。3.1.3操作數(shù)尋址定義:操作數(shù)存放在存儲(chǔ)器中,指令中指定的基址或變址寄存器的內(nèi)容是操作數(shù)的偏移地址。4寄存器間接尋址BPBX包括SIDI包括若指令中指定的寄存器是SI,DI和BX操作數(shù)默認(rèn)存放在當(dāng)前數(shù)據(jù)段DS中操作數(shù)的物理地址為若指令中指定的寄存器是
BP操作數(shù)默認(rèn)存放在當(dāng)前堆棧段SS
中操作數(shù)的物理地址為(SS)×16+(BP)3.1.3操作數(shù)尋址4寄存器間接尋址已知:(DS)=3000H,(BX)=1100H,(31100H)=3412H,執(zhí)行指令MOVAX,[BX]操作數(shù)的物理地址為(DS)×16+(BX)=3000H×16+1100H=31100H,指令執(zhí)行后,(AX)=3412H。例3-43.1.3操作數(shù)尋址定義:操作數(shù)存放在存儲(chǔ)器中:5寄存器相對(duì)尋址已知:(DS)=3000H,(BX)=1000H,COUNT=2000H,(33000H)=13H,(33001H)=24H,執(zhí)行指令MOVAX,COUNT[BX]操作數(shù)的物理地址為(DS)×16+(BX)+COUNT=3000H×16+1000H+2000H=33000H,指令執(zhí)行后,(AX)=2413H。例3-5操作數(shù)的物理地址為:段地址×16+(寄存器)+偏移量基址寄存器變址寄存器指令中給出的8位或16位偏移量操作數(shù)的偏移地址或3.1.3操作數(shù)尋址5寄存器相對(duì)尋址變址尋址的核心應(yīng)用:表格或數(shù)組的處理使用SI、DI或BX寄存器默認(rèn)使用數(shù)據(jù)段DS使用BP寄存器默認(rèn)使用堆棧段SS首地址設(shè)為位移量可以通過(guò)修改基址或變址寄存器的內(nèi)容來(lái)訪問(wèn)表格或數(shù)組中的各元素。3.1.3操作數(shù)尋址定義:操作數(shù)存放在存儲(chǔ)器中6基址加變址尋址已知:(DS)=3000H,(BX)=1000H,(DI)=2000H,(33000H)=13H,(33001H)=24H,執(zhí)行指令MOVAX,[BX][DI]操作數(shù)的物理地址為(DS)×16+(BX)+(DI)=3000H×16+1000H+2000H=33000H,指令執(zhí)行后,(AX)=2413H。例3-6基址寄存器(BX或BP)變址寄存器(SI或DI)操作數(shù)的偏移地址操作數(shù)的物理地址為:段地址×16+(基址寄存器)+(變址寄存器)3.1.3操作數(shù)尋址定義:操作數(shù)存放在存儲(chǔ)器中7相對(duì)基址加變址尋址已知:(DS)=3000H,(BX)=1000H,(DI)=2000H,COUNT=100H,(33100H)=12H,(33101H)=34H,執(zhí)行指令MOVAX,COUNT[BX][DI]操作數(shù)的物理地址為(DS)×16+(BX)+(DI)+COUNT=3000H×16+1000H+2000H+100H=33100H,指令執(zhí)行后,(AX)=3412H。例3-7基址寄存器(BX或BP)變址寄存器(SI或DI)操作數(shù)的偏移地址指令中給出的偏移量操作數(shù)的物理地址為:段地址×16+(基址寄存器)+(變址寄存器)+偏移量3.1.4程序轉(zhuǎn)移地址尋址在8086指令系統(tǒng)中,有一類指令是用來(lái)控制程序執(zhí)行順序的。這些指令的操作數(shù)實(shí)際上是程序轉(zhuǎn)移地址。1.段內(nèi)直接尋址3.段間直接尋址2.段內(nèi)間接尋址4.段間間接尋址3.1.4程序轉(zhuǎn)移地址尋址定義:指令中直接給出程序轉(zhuǎn)移地址(8位或16位偏移量)的尋址方式。1.段內(nèi)直接尋址3.段間直接尋址2.段內(nèi)間接尋址4.段間間接尋址程序順序執(zhí)行時(shí):當(dāng)前要執(zhí)行的指令的地址為
CS:IP,即其物理地址為(CS)×16+(IP)。執(zhí)行轉(zhuǎn)移指令后,CS寄存器中的內(nèi)容不變,IP寄存器中的內(nèi)容被更新為IP寄存器原值加上指令中給出的偏移量,作為指令的新偏移地址。已知:(CS)=3000H,(IP)=2000H,OPR的偏移量為0100H,執(zhí)行指令JMPNEARPTROPR執(zhí)行指令后,(CS)=3000H,(IP)=2003H+0100H=2103H。例3-8操作碼00H3000H:2000H3000H:2103H01H3000H:2003H偏移量…CS3.1.4程序轉(zhuǎn)移地址尋址近轉(zhuǎn)移:NEARPTR指明的偏移量為16位,其有效轉(zhuǎn)移范圍為-8000H~7FFFH。指令中的偏移量指的是當(dāng)前IP值(即JMP指令的下一條指令)到目標(biāo)地址之間的距離,因此,執(zhí)行JMP指令時(shí),當(dāng)前(IP)=2003H。如果現(xiàn)在有一個(gè)NEARJMP指令,當(dāng)前的IP值是2003H,目標(biāo)地址的偏移量是+1000H,那么執(zhí)行這條JMP指令后,新的IP值是多少呢?可省略1.段內(nèi)直接尋址3.段間直接尋址2.段內(nèi)間接尋址4.段間間接尋址3.1.4程序轉(zhuǎn)移地址尋址定義:將存放在指令中指定的16位寄存器的內(nèi)容或存儲(chǔ)器中字存儲(chǔ)單元的內(nèi)容賦予IP,而CS的內(nèi)容保持不變?!癢ORDPTR”表明存儲(chǔ)器操作數(shù)是一個(gè)字單元(16位)。已知:(CS)=3000H,(DS)=4000H,(IP)=1000H,(BX)=0100H,(40103H)=2000H,執(zhí)行指令JMPWORDPTR3[BX]此時(shí),程序轉(zhuǎn)移地址存放在存儲(chǔ)器中。執(zhí)行指令后,存放偏移地址的物理地址為DS:[BX+3H]=DS:[0100H+3H]=DS:0103H=40103H,因此,(IP)=2000H,(CS)=3000H。又如,“JMPCX”表示執(zhí)行指令后將CX中的內(nèi)容賦予IP,而CS中的內(nèi)容不變。例3-93000H:1000H3000H:2000H4000H:0103H4000H:0000H…CSDS操作碼00H20H1.段內(nèi)直接尋址3.段間直接尋址2.段內(nèi)間接尋址4.段間間接尋址3.1.4程序轉(zhuǎn)移地址尋址定義:指令中直接給出16位段地址和16位偏移地址的尋址方式。當(dāng)前指令的段地址指令中的段地址(操作碼后第二個(gè)字)當(dāng)前指令的偏移地址偏移地址(操作碼后第一個(gè)字)被賦予IP寄存器1.段內(nèi)直接尋址3.段間直接尋址2.段內(nèi)間接尋址4.段間間接尋址3.1.4程序轉(zhuǎn)移地址尋址遠(yuǎn)轉(zhuǎn)移:“FARPTR”用于指示指令的目標(biāo)地址位于另一個(gè)代碼段中。已知:(CS)=3000H,(IP)=0100H,OPR的地址為4000H:1000H,執(zhí)行指令JMPFARPTROPR執(zhí)行指令后,當(dāng)前指令的(CS)=4000H,(IP)=1000H,其物理地址為4000H×16+1000H=41000H。例3-103000H:0100HCS4000H:1000H操作碼00H10H00H40H…1.段內(nèi)直接尋址3.段間直接尋址2.段內(nèi)間接尋址4.段間間接尋址3.1.4程序轉(zhuǎn)移地址尋址定義:程序轉(zhuǎn)移的偏移地址和段地址存放在存儲(chǔ)器中兩個(gè)連續(xù)的字存儲(chǔ)單元中的尋址方式。被賦予IP寄存器被賦予CS寄存器已知:(CS)=3000H,(IP)=0100H,DATA指向的存儲(chǔ)單元的內(nèi)容為00H,10H,00H和40H,執(zhí)行指令JMPDWORDPTRDATA執(zhí)行指令后,當(dāng)前指令的CS被賦予4000H,IP被賦予1000H,其物理地址為4000H×16+1000H=41000H。例3-11…DSCSDATA00H10H00H40H操作碼3000H:0100H4000H:1000H1.段內(nèi)直接尋址3.段間直接尋址2.段內(nèi)間接尋址4.段間間接尋址3.1.4程序轉(zhuǎn)移地址尋址“DWORDPTR”表明存儲(chǔ)器操作數(shù)為雙字單元(32位)。與段間直接尋址不同的是,此處偏移地址和段地址均存放在由參數(shù)指定的存儲(chǔ)器中,而不是指令中。如果一個(gè)變量被定義為DWORDPTR,它的大小是多少字節(jié)呢?1.段內(nèi)直接尋址3.段間直接尋址2.段內(nèi)間接尋址4.段間間接尋址3.1.5調(diào)試程序DEBUG的使用方法DEBUG是一種運(yùn)行于DOS下的實(shí)用匯編語(yǔ)言調(diào)試程序,使用DEBUG命令可以編輯程序,監(jiān)督、控制程序的運(yùn)行,以及查看程序運(yùn)行結(jié)果。DEBUG為用戶提供了多種命令。調(diào)試程序DEBUG的使用方法讓我們播放視頻了解一下吧。常用的DEBUG命令命令名命令格式功
能?-?顯示DEBUG命令列表R-r-r[寄存器]顯示所有寄存器的內(nèi)容顯示并修改指定寄存器的內(nèi)容。進(jìn)入修改狀態(tài)后,直接按回車不修改,否則需鍵入修改值A(chǔ)-a[地址]顯示指定的段地址和段內(nèi)偏移并等待用戶從鍵盤(pán)逐條鍵入?yún)R編命令,順序存放到段地址和段內(nèi)偏移所指定的內(nèi)存區(qū)域3.1.5調(diào)試程序DEBUG的使用方法(續(xù)表)命令名命令格式功
能U-u[地址]-u[地址范圍]對(duì)指定地址或地址范圍的目標(biāo)代碼進(jìn)行反匯編。如果省略地址,則顯示上一個(gè)U命令后32個(gè)字節(jié)目標(biāo)代碼的反匯編D-d[地址]-d[地址范圍]顯示指定地址開(kāi)始的128個(gè)字節(jié)存儲(chǔ)單元的內(nèi)容顯示指定地址范圍的存儲(chǔ)單元的內(nèi)容。如不指定地址,顯示代碼段128個(gè)字節(jié)存儲(chǔ)單元的內(nèi)容E-e[地址]-e[地址][內(nèi)容]顯示指定地址單元的內(nèi)容并等待輸入新的值將指定內(nèi)容的ASCII碼依次存放到指定地址開(kāi)始的存儲(chǔ)單元中G-g[地址1][地址2]從地址1開(kāi)始執(zhí)行程序,直到地址2T-t[指令數(shù)]執(zhí)行指定的一條或多條指令Q-q退出DEBUG3.1.5調(diào)試程序DEBUG的使用方法要在WindowsXP及早期版本的Windows系統(tǒng)中啟動(dòng)DEBUG程序:64位Windows7/10/11等系統(tǒng)命令提示符下不支持進(jìn)入DEBUG程序,可安裝配置DOSBox模擬DOS環(huán)境,復(fù)制DEBUG.EXE并調(diào)用。DEBUG程序提示符為“-”,在此輸入r、a、u等命令及參數(shù)可執(zhí)行操作。單擊“開(kāi)始”按鈕依次選擇“所有程序”→“附件”→“命令提示符”選項(xiàng)輸入“DEBUG”并按回車鍵單擊“開(kāi)始”按鈕選擇“運(yùn)行”選項(xiàng)在打開(kāi)的“運(yùn)行”對(duì)話框中輸入“DEBUG”并按回車鍵或3.1.6實(shí)戰(zhàn)演練——對(duì)一組數(shù)據(jù)求和算法分析首先將寄存器中的內(nèi)容初始化,由SI控制指向每一個(gè)數(shù)據(jù)的地址,通過(guò)一個(gè)循環(huán)過(guò)程對(duì)連續(xù)存放的各數(shù)據(jù)求和,將結(jié)果存入累加器AX。將雙字節(jié)數(shù)據(jù)1122H、3344H和5566H首地址為1000H的連續(xù)內(nèi)存單元中存入每個(gè)數(shù)據(jù)占據(jù)2個(gè)字節(jié)的空間,共需要占用6個(gè)內(nèi)存單元,對(duì)它們求和后將運(yùn)算結(jié)果存入這組數(shù)據(jù)的下一組內(nèi)存單元中。3.1.6實(shí)戰(zhàn)演練——對(duì)一組數(shù)據(jù)求和DSEGSEGMENT ;數(shù)據(jù)段,給變量指定數(shù)據(jù),分配存儲(chǔ)空間ARRAYDW1122H,3344H,5566HDSEGENDSSSEGSEGMENTSTACK ;堆棧段
DB100DUP(?)SSEGENDSCSEGSEGMENT ;代碼段
ASSUMECS:CSEG,DS:DSEG,SS:SSEGSTART:MOVAX,DSEG ;給數(shù)據(jù)段寄存器裝初值
MOVDS,AX MOVCX,3 ;將循環(huán)計(jì)數(shù)值存入CXMOVAX,0 ;將AX和SI置0源程序3.1.6實(shí)戰(zhàn)演練——對(duì)一組數(shù)據(jù)求和
MOVSI,AXLEABX,ARRAY ;將ARRAY的首地址存入BXLOP:ADDAX,[BX][SI] ;將數(shù)組中的每個(gè)元素與AX中內(nèi)容求和,并存入AX ADDSI,2 ;SI控制偏移量
LOOPLOP ;循環(huán),由CX控制循環(huán)次數(shù)
MOVBX,SI ;將SI中的內(nèi)容送入DI MOVDI,BX MOV1000[DI],AX ;將累加和存入1000+(DI)指向的內(nèi)存單元
MOVAH,4CH ;系統(tǒng)功能調(diào)用,結(jié)束程序返回DOS INT21HCSEGENDSENDSTART源程序3.1.6實(shí)戰(zhàn)演練——對(duì)一組數(shù)據(jù)求和此處以DOSBox上機(jī)環(huán)境為例進(jìn)行介紹。進(jìn)入DOSBox界面,輸入“debug”并按回車鍵,進(jìn)入DEBUG程序,顯示提示符“-”。步驟一輸入“a”后按回車鍵,然后逐條輸入指令。步驟二使用DEBUG調(diào)試程序時(shí),其中的數(shù)值均默認(rèn)為十六進(jìn)制,不必輸入數(shù)值后的“H”,也不必在數(shù)值前輸入“0”。程序中的“LOP”用于標(biāo)示“ADDAX,[BX][SI]”指令在內(nèi)存中的地址,因此,在執(zhí)行循環(huán)指令時(shí),用該指令的偏移地址替換“LOP”。輸入指令3.1.6實(shí)戰(zhàn)演練——對(duì)一組數(shù)據(jù)求和用“a”命令在1000H處輸入數(shù)組中各元素的值,分別是1122H、3344H和5566H,并用“d”命令查看內(nèi)存單元的狀態(tài)。步驟三將數(shù)據(jù)存入內(nèi)存單元從1000H至1007H的內(nèi)存單元中的內(nèi)容分別是22H、11H、44H、33H、66H、55H、00H和00H。3.1.6實(shí)戰(zhàn)演練——對(duì)一組數(shù)據(jù)求和用“t”命令逐條執(zhí)行此程序,并觀察每條指令的運(yùn)行結(jié)果。1122H+3344H+5566H=99CCH。步驟四用“d”命令查看是否將運(yùn)算結(jié)果存入指定內(nèi)存單元。運(yùn)算結(jié)果99CCH存入內(nèi)存單元1006H處。步驟五運(yùn)行結(jié)果檢查結(jié)果拓展閱讀CPU是計(jì)算機(jī)的大腦,而指令系統(tǒng)則是CPU能夠理解和執(zhí)行的“語(yǔ)言”。CPU指令系統(tǒng)并非雜亂無(wú)章,而是遵循著嚴(yán)格的規(guī)則,如每條指令都有固定的格式,CPU訪問(wèn)內(nèi)存中的數(shù)據(jù)需要遵循統(tǒng)一的尋址方式,CPU按照程序計(jì)數(shù)器指定的順序依次執(zhí)行指令(除非遇到控制轉(zhuǎn)移指令)。這些規(guī)則不僅保證了計(jì)算過(guò)程的準(zhǔn)確性,也反映了人類對(duì)于秩序、合作和社會(huì)責(zé)任的基本理解。就像CPU必須嚴(yán)格遵守規(guī)則以確保計(jì)算機(jī)系統(tǒng)的正常運(yùn)行一樣,我們每個(gè)人也應(yīng)承擔(dān)起自己的社會(huì)責(zé)任,遵守法律法規(guī),做到言行一致,共同營(yíng)造良好的社會(huì)環(huán)境。課堂檢測(cè)8086指令系統(tǒng)中操作數(shù)尋址方式有幾種?常用的DEBUG命令有哪些?課堂小結(jié)8086指令系統(tǒng)簡(jiǎn)介指令分類指令格式操作數(shù)尋址程序轉(zhuǎn)移地址尋址調(diào)試程序DEBUG的使用方法實(shí)戰(zhàn)演練——對(duì)一組數(shù)據(jù)求和數(shù)據(jù)傳送類指令023.2.1傳送指令數(shù)據(jù)傳送類指令是8086指令系統(tǒng)中最基本、使用最頻繁的一類指令,其主要數(shù)據(jù)傳送類指令是功能是將數(shù)據(jù)或地址傳送到寄存器或存儲(chǔ)單元中。格式MOVDST,SRC功能將源操作數(shù)傳送給目的操作數(shù)傳送指令讓我們播放視頻了解一下吧。3.2.1傳送指令作用:在CPU內(nèi)部寄存器、存儲(chǔ)器與立即數(shù)之間進(jìn)行數(shù)據(jù)傳送。傳送方式如下:例如,MOVBL,ALMOVBX,AXMOVDS,AX(2)在CPU內(nèi)部寄存器與存儲(chǔ)器之間進(jìn)行數(shù)據(jù)傳送例如,MOVBL,ALMOVBX,AXMOVDS,AX(1)在CPU內(nèi)部寄存器之間進(jìn)行數(shù)據(jù)傳送3.2.1傳送指令例如,MOVAX,1234HMOVSI,1000H(3)將立即數(shù)傳送給寄存器例如,MOVWORDPTR[BX],1000H(4)將立即數(shù)傳送給存儲(chǔ)單元①不允許將CS、IP作為目的操作數(shù)。②源操作數(shù)和目的操作數(shù)不能同時(shí)為段寄存器。③源操作數(shù)和目的操作數(shù)的類型必須匹配。④源操作數(shù)和目的操作數(shù)不能同時(shí)為存儲(chǔ)器單元。⑤立即數(shù)只能作為源操作數(shù),不能作為目的操作數(shù)。⑥不允許直接向段寄存器傳送立即數(shù)。⑦該指令不影響標(biāo)志位。3.2.1傳送指令指出下列指令中的錯(cuò)誤。(1)MOV[DI],[SI](2)MOVDS,1000H(3)MOV2000H,AX例3-12【解答】(1)兩個(gè)操作數(shù)不能同時(shí)為存儲(chǔ)器操作數(shù)。(2)不能直接向段寄存器傳送立即數(shù),正確的指令應(yīng)為
MOVAX,1000HMOVDS,AX(3)立即數(shù)不能作為目的操作數(shù)。3.2.2堆棧操作指令堆棧是存儲(chǔ)器中按照“后進(jìn)先出”原則工作的一個(gè)區(qū)域,最后一個(gè)壓入堆棧的數(shù)據(jù)所在的存儲(chǔ)單元稱為棧頂。堆棧位置:堆棧段中在堆棧操作中:作用:數(shù)據(jù)的存入和彈出操作段寄存器SS指示段地址堆棧指針寄存器SP指示棧頂確定入棧或出棧的存儲(chǔ)單元堆棧內(nèi)容按高地址到低地址方向存放,SP需實(shí)時(shí)更新以指向棧頂,入棧使SP數(shù)值減小,出棧則使其增大。堆棧的生長(zhǎng)方向及入棧和出棧操作SSSP高地址低地址(SP)←(SP)?2SS入棧(SP)←(SP)+2SS出棧假設(shè)你有一疊書(shū),每次只能從最上面拿書(shū),或者把書(shū)放在最上面。如果現(xiàn)在有三本書(shū),你按照順序依次把它們放在書(shū)堆上,然后依次拿下來(lái),你會(huì)以什么順序拿到這三本書(shū)?這種操作方式和我們生活中的哪些場(chǎng)景類似?如果用計(jì)算機(jī)的術(shù)語(yǔ)來(lái)描述,這種操作方式叫什么?3.2.2堆棧操作指令1.入棧指令2.出棧指令格式:PUSHSRC功能:先將SP的內(nèi)容減2,再將SRC的內(nèi)容存入SP指示的棧頂存儲(chǔ)單元格式:POPDST功能:先將SP指示的棧頂內(nèi)容存入DST,再將SP的內(nèi)容加2,指示當(dāng)前棧頂?shù)拇鎯?chǔ)單元堆棧操作指令只能做字操作堆棧操作指令不允許使用立即尋址方式堆棧操作指令可以使用段寄存器,但出棧指令不允許使用CS寄存器入棧指令和出棧指令不影響標(biāo)志位3.2.2堆棧操作指令2.出棧指令(SP)=1000H指令執(zhí)行前:SP31000H31001H堆棧段34H12H(SP)=0FFEH“PUSHAX”執(zhí)行后:SP30FFEH30FFFH31000H31001H11H34H12H22H堆棧段(SP)=1000H(BX)=1122H“POPBX”執(zhí)行后:SP30FFEH30FFFH31000H31001H11H34H12H22H堆棧段已知:(SS)=3000H,(SP)=1000H,(AX)=1122H,(31000H)=1234H。執(zhí)行指令PUSHAXPOPBX例3-133.2.2堆棧操作指令堆棧在子程序調(diào)用和中斷調(diào)用中起著很重要的作用。另外,如果程序中要使用某些寄存器,但這些寄存器的內(nèi)容以后還要用,就可以先用入棧指令將其保存,之后再用出棧指令恢復(fù)原來(lái)的內(nèi)容。如果現(xiàn)在有一段程序,需要使用寄存器AX、BX、CX來(lái)完成一個(gè)復(fù)雜的計(jì)算,但這些寄存器在計(jì)算前已經(jīng)存儲(chǔ)了其他重要數(shù)據(jù)。你會(huì)如何使用堆棧來(lái)確保這些重要數(shù)據(jù)在計(jì)算后不會(huì)丟失呢?2.出棧指令3.2.3交換指令格式XCHGOPR1,OPR2功能兩個(gè)操作數(shù)中的內(nèi)容進(jìn)行交換(1)兩個(gè)操作數(shù)中必須有一個(gè)在寄存器中,即不允許兩個(gè)存儲(chǔ)器之間進(jìn)行交換。(2)不允許使用段寄存器和立即數(shù)。(3)交換指令不影響標(biāo)志位。 XCHGAX,BX
XCHGBX,[1234H]例如3.2.3交換指令已知:(BX)=1122H,(DS)=3000H,(31000H)=1234H。執(zhí)行指令XCHGBX,[1000H]源操作數(shù)的物理地址為(DS)×16+1000H=31000H。指令執(zhí)行的結(jié)果為(BX)=1234H,(31000H)=1122H。例3-14要實(shí)現(xiàn)兩個(gè)存儲(chǔ)單元X與Y之間的數(shù)據(jù)交換,可以執(zhí)行如下指令。XCHGAX,XXCHGAX,YXCHGAX,X3.2.4目的地址傳送指令作用:將地址送到指定寄存器中格式:LEAREG,MEM功能:將存儲(chǔ)器MEM的有效地址(偏移地址)送到指定寄存器中。格式:LDSREG,MEM功能:將存儲(chǔ)器MEM中存放的4個(gè)連續(xù)字節(jié)的內(nèi)容(包括偏移地址和段地址)分別送到指定寄存器和DS中。12有效地址傳送指令指針?biāo)图拇嫫骱虳S指令后2個(gè)字節(jié)送入DS前2個(gè)字節(jié)送入指定寄存器3.2.4目的地址傳送指令格式:LESREG,MEM功能:將存儲(chǔ)器MEM中存放的4個(gè)連續(xù)字節(jié)的內(nèi)容(包括偏移地址和段地址)分別送到指定寄存器和ES中。3指針?biāo)图拇嫫骱虴S指令(1)目的地址傳送指令中的目的操作數(shù)必須是16位通用寄存器,源操作數(shù)必須是存儲(chǔ)器。(2)目的地址傳送指令不影響標(biāo)志位。后2個(gè)字節(jié)送入ES前2個(gè)字節(jié)送入指定寄存器已知:(DS)=3000H,(32000H)=12H,(32001H)=34H,(32002H)=56H,(32003H)=78H。執(zhí)行指令LDSSI,[2000H]例3-153.2.4目的地址傳送指令地址傳送指令34H56H78H12H32000HDS:(DS)=7856H指令執(zhí)行后:32001H32002H32003HSI:(SI)=3412H3.2.5輸入輸出指令1輸入指令長(zhǎng)格式INAL,PORTINAX,PORT短格式INAL,DXINAX,DX功能從指定的I/O端口輸入一個(gè)字節(jié)或一個(gè)字的數(shù)據(jù)送入AL或AX2輸出指令長(zhǎng)格式OUTPORT,ALOUTPORT,AX短格式OUTDX,ALOUTDX,AX功能將AL或AX中的內(nèi)容輸出到指定的I/O端口作用:在I/O端口與CPU之間傳送數(shù)據(jù)3.2.5輸入輸出指令2輸出指令輸入輸出指令只能使用累加器AX或AL輸入或輸出數(shù)據(jù)。PORT
和DX的內(nèi)容均為
I/O端口地址。輸入輸出指令不影響標(biāo)志位。8位端口地址(00H~FFH)當(dāng)端口地址為16位時(shí),必須使用短格式,使用前先把端口號(hào)放到DX中。將端口1200H的一個(gè)字送入累加器中。指令為MOVDX,1200H
INAX,DX例3-163.2.6換碼指令在數(shù)據(jù)區(qū)ASC開(kāi)始的存儲(chǔ)區(qū)依次存放著A~Z的ASCII碼,將字母的順序號(hào)變?yōu)閷?duì)應(yīng)字母的ASCII碼值。程序段如下。ASCDB'ABCDEF……Z' ;定義數(shù)據(jù)區(qū)ASCMOVBX,OFFSETASC ;將ASC的偏移地址送入BXMOVAL,6XLAT ;指令執(zhí)行后,AL中的內(nèi)容為字母G的ASCII碼值例3-17格式:XLAT功能:把一種代碼轉(zhuǎn)換成另一種代碼。(1)換碼指令只能使用AL和BX兩個(gè)寄存器。(2)換碼指令不影響標(biāo)志位。先建字節(jié)表格,將首地址存入BX,偏移量存入AL,再依據(jù)BX和AL內(nèi)容獲取轉(zhuǎn)換代碼并送至AL。3.2.7標(biāo)志位寄存器傳送指令作用:對(duì)標(biāo)志位寄存器的操作格式:LAHF功能:將標(biāo)志位寄存器的低8位送入AH。格式:SAHF功能:將AH的內(nèi)容送入標(biāo)志位寄存器的低8位。格式:PUSHF功能:將標(biāo)志位寄存器的內(nèi)容壓入堆棧。格式:POPF功能:將棧頂?shù)膬?nèi)容送入標(biāo)志位寄存器。注意:指令LAHF和PUSHF不影響標(biāo)志位。LAHFSAHFPUSHFPOPF3.2.8實(shí)戰(zhàn)演練——將十六進(jìn)制數(shù)據(jù)串轉(zhuǎn)換為ASCII碼利用查表法將一個(gè)十六進(jìn)制數(shù)1AB3轉(zhuǎn)換為對(duì)應(yīng)的4個(gè)字符,并將其在屏幕上顯示出來(lái)。算法分析要想在屏幕上顯示一個(gè)十六進(jìn)制數(shù),關(guān)鍵是將各位十六進(jìn)制數(shù)轉(zhuǎn)換成對(duì)應(yīng)的ASCII碼。為此,在程序的數(shù)據(jù)段建立了一個(gè)字節(jié)表格ASC,其中保存了0~9、A~F的ASCII碼。在代碼段:將表格的首地址存入BX,將要顯示的十六進(jìn)制數(shù)值送入DX,并在CX中設(shè)置循環(huán)次數(shù)4通過(guò)循環(huán)移位操作,分別將各位十六進(jìn)制數(shù)值(即相對(duì)于首地址偏移量)存入AL根據(jù)AL和BX的內(nèi)容,使用換碼指令將其對(duì)應(yīng)的ASCII碼送入AL,并在屏幕上顯示出來(lái)3.2.8實(shí)戰(zhàn)演練——將十六進(jìn)制數(shù)據(jù)串轉(zhuǎn)換為ASCII碼DSEGSEGMENT ;數(shù)據(jù)段,給變量指定數(shù)據(jù),分配存儲(chǔ)空間ASCDB30H,31H,32H,33H,34H,35H,36H,37H,38H,39HDB41H,42H,43H,44H,45H,46HDSEGENDSSSEGSEGMENTSTACK ;堆棧段
DB100DUP(?)SSEGENDSCSEGSEGMENT ;代碼段
ASSUMECS:CSEG,DS:DSEG,SS:SSEGSTART:MOVAX,DSEG ;給數(shù)據(jù)段寄存器裝初值
MOVDS,AX源程序3.2.8實(shí)戰(zhàn)演練——將十六進(jìn)制數(shù)據(jù)串轉(zhuǎn)換為ASCII碼 LEABX,ASC ;將ASC表格的首地址放入BX MOVDX,1AB3H ;將一個(gè)十六進(jìn)制數(shù)放入DX MOVCX,4 ;將循環(huán)計(jì)數(shù)值存入CXLOP:PUSHCX ;執(zhí)行入棧指令,保存CX中的數(shù)據(jù)
MOVCL,4 ;指定循環(huán)左移的位數(shù)
ROLDX,CL ;將十六進(jìn)制數(shù)循環(huán)左移4位,將DX中的高4位移
;至低4位
POPCX ;執(zhí)行出棧指令,恢復(fù)CX原來(lái)的內(nèi)容
MOVAL,DL ;將十六進(jìn)制數(shù)的低8位存入AL ANDAL,0FH ;清除AL中高4位
XLAT ;執(zhí)行換碼指令,將對(duì)應(yīng)數(shù)值的ASCII碼送入AL源程序3.2.8實(shí)戰(zhàn)演練——將十六進(jìn)制數(shù)據(jù)串轉(zhuǎn)換為ASCII碼 PUSHDX ;保存DX的值在堆棧頂
MOVDL,AL ;DOS功能調(diào)用,將DL中保存的字符在屏幕上顯示
MOVAH,02H INT21H POPDX ;恢復(fù)保存在堆棧頂?shù)腄X的值
LOOPLOP ;執(zhí)行循環(huán)
MOVAH,4CH ;系統(tǒng)功能調(diào)用,結(jié)束程序返回DOS INT21HCSEGENDSENDSTART源程序課堂檢測(cè)堆棧按什么原則工作?目的地址傳送指令的作用是什么?課堂小結(jié)數(shù)據(jù)傳送類指令傳送指令堆棧操作指令交換指令目的地址傳送指令輸入輸出指令換碼指令標(biāo)志位寄存器傳送指令實(shí)戰(zhàn)演練——將十六進(jìn)制數(shù)據(jù)串轉(zhuǎn)換為ASCII碼算術(shù)運(yùn)算與邏輯運(yùn)算類指令03移位指令邏輯移位指令邏輯與邏輯或邏輯非邏輯異或算術(shù)移位指令二進(jìn)制數(shù)或十進(jìn)制數(shù)的加、減、乘、除等運(yùn)算字或字節(jié)進(jìn)行運(yùn)算循環(huán)移位指令所有的算術(shù)運(yùn)算指令都會(huì)影響到標(biāo)志位。3.3.1加法指令1.不帶進(jìn)位的加法指令2.帶進(jìn)位的加法指令3.加1指令格式:ADDDST,SRC功能:將目的操作數(shù)和源操作數(shù)相加,運(yùn)算結(jié)果送回目的操作數(shù)。源操作數(shù)和目的操作數(shù)不允許同時(shí)為存儲(chǔ)器立即數(shù)只允許作為源操作數(shù)不允許使用段寄存器受影響的標(biāo)志位有OF、SF、ZF、AF、PF和CF1234假設(shè)你有兩個(gè)數(shù)字,分別是15和20。現(xiàn)在需要將這兩個(gè)數(shù)字相加,并將結(jié)果存儲(chǔ)到其中一個(gè)數(shù)字的位置上。你會(huì)如何用一條簡(jiǎn)單的指令來(lái)實(shí)現(xiàn)這個(gè)操作?如果用計(jì)算機(jī)指令來(lái)表示,你會(huì)如何選擇源操作數(shù)和目的操作數(shù)?3.3.1加法指令1.不帶進(jìn)位的加法指令2.帶進(jìn)位的加法指令3.加1指令格式:ADCDST,SRC功能:將目的操作數(shù)和源操作數(shù)相加,再加上進(jìn)位標(biāo)志位CF的值,運(yùn)算結(jié)果送回目的操作數(shù)。ADC指令主要用于多字節(jié)的加法運(yùn)算,使用ADC指令可以處理低字節(jié)產(chǎn)生的進(jìn)位。與ADD指令類似,受影響的標(biāo)志位有OF、SF、ZF、AF、PF和CF。3.3.1加法指令1.不帶進(jìn)位的加法指令2.帶進(jìn)位的加法指令3.加1指令格式:INCOPR功能:將操作數(shù)加1,再送回操作數(shù)。INC指令常用于對(duì)地址指針和計(jì)數(shù)器的修改。123操作數(shù)可以為寄存器或存儲(chǔ)器不允許使用段寄存器受影響的標(biāo)志位有OF、SF、ZF、AF、PF,不影響CFINCBYTEPTR[BX]例如3.3.1加法指令設(shè)兩個(gè)四字節(jié)的數(shù)(DX,CX)=12345678H,(BX,AX)=9ABCDEF0H,它們相加的指令序列:ADDCX,AX例3-18SF=0:最高位為0。ZF=0:結(jié)果不為0。CF=1:最高位產(chǎn)生進(jìn)位。AF=0;低4位沒(méi)有向高4位產(chǎn)生進(jìn)位。PF=0:低8位中1的個(gè)數(shù)為奇數(shù)個(gè)。OF=0:未產(chǎn)生溢出。①執(zhí)行ADD指令:3.3.1加法指令設(shè)兩個(gè)四字節(jié)的數(shù)(DX,CX)=12345678H,(BX,AX)=9ABCDEF0H,它們相加的指令序列:ADCDX,BX例3-18SF=1:最高位為1。ZF=0:結(jié)果不為0。CF=0:最高位沒(méi)有產(chǎn)生進(jìn)位。AF=1;低4位向高4位產(chǎn)生進(jìn)位。PF=0:低8位中1的個(gè)數(shù)為奇數(shù)個(gè)。OF=0:未產(chǎn)生溢出。②執(zhí)行ADC指令:3.3.2減法指令1不帶借位的減法指令2帶借位的減法指令SBB指令主要用于多字節(jié)的減法運(yùn)算,通過(guò)SBB指令可以處理低字節(jié)產(chǎn)生的借位格式:SUBDST,SRC功能:目的操作數(shù)減去源操作數(shù),結(jié)果送回目的操作數(shù)。與ADD類似格式:SBBDST,SRC功能:目的操作數(shù)減去源操作數(shù),再減去CF的值,結(jié)果送回目的操作數(shù)。與ADC類似3.3.2減法指令3減1指令格式:DECOPR功能:將操作數(shù)減1,再送回操作數(shù),與INC類似。4求補(bǔ)指令格式:NEGOPR功能:用0減去操作數(shù),結(jié)果送回操作數(shù)。受影響的標(biāo)志位有OF、SF、ZF、AF、PF和CF3.3.2減法指令5比較指令格式:CMPOPR1,OPR2功能:操作數(shù)1減去操作數(shù)2,結(jié)果不送回操作數(shù)。CMP指令對(duì)標(biāo)志位的影響A和B比較CFZFSFOFA=B0100無(wú)符號(hào)數(shù)A<B10——A>B00——帶符號(hào)數(shù)A>B—000—011A<B—001—010作用:比較兩個(gè)操作數(shù)的大小,但不產(chǎn)生運(yùn)算結(jié)果,結(jié)果反映在標(biāo)志位的設(shè)置上。受影響的標(biāo)志位有OF、SF、ZF、AF、PF和CF它常與條件轉(zhuǎn)移指令一起使用,將比較結(jié)果作為轉(zhuǎn)向不同程序段的條件。3.3.2減法指令已知3個(gè)四字節(jié)的數(shù)A、B和C,分別存放在以地址X、Y、Z開(kāi)始的存儲(chǔ)單元中,編寫(xiě)實(shí)現(xiàn)A+B-C的指令序列,并將結(jié)果存在以地址W開(kāi)始的存儲(chǔ)單元中。指令序列為MOVAX,X ;取被加數(shù)AMOVDX,X+2ADDAX,Y ;計(jì)算(A+B)ADCDX,Y+2SUBAX,Z ;計(jì)算(A+B-C)SBBDX,Z+2MOVW,AX ;結(jié)果存入以W開(kāi)始的內(nèi)存單元中MOVW+2,DX例3-193.3.3乘法指令格式:MULSRC功能:將AL中的數(shù)與SRC相乘的結(jié)果送入AX中將AX中的數(shù)與SRC相乘的結(jié)果分別送入DX和AX中SRC是字節(jié)型操作數(shù)SRC是字型操作數(shù)1.無(wú)符號(hào)數(shù)乘法指令3.3.3乘法指令格式:IMULSRC功能:與MUL指令基本相同,不同點(diǎn):IMUL指令中的SRC為帶符號(hào)操作數(shù),得到的乘積也為帶符號(hào)數(shù)。12不允許使用立即數(shù)作為操作數(shù)。乘法指令只影響標(biāo)志位CF和OF,其他標(biāo)志位無(wú)定義。如果MUL指令執(zhí)行后:高半部分(即字節(jié)型操作數(shù)相乘的AH或字型操作數(shù)相乘的DX中的內(nèi)容)為0,則CF=OF=0;否則,CF=OF=1。高半部分是低半部分的符號(hào)擴(kuò)展,則CF=OF=0;否則,CF=OF=1。2.帶符號(hào)數(shù)乘法指令3.3.3乘法指令已知(AL)=0B4H,(BL)=11H,執(zhí)行指令“MULBL”和“IMULBL”后,求標(biāo)志位的值。(AL)=0B4H為無(wú)符號(hào)數(shù)時(shí),數(shù)值為180D ;為帶符號(hào)數(shù)時(shí),數(shù)值為-76D。(BL)=11H為無(wú)符號(hào)數(shù)時(shí),數(shù)值為17D ;為帶符號(hào)數(shù)時(shí),數(shù)值為+17D。執(zhí)行MUL指令后,(AX)=0BF4H=3060D,CF=OF=1。執(zhí)行IMUL指令后,(AX)=0FAF4H=-050CH=-1292D,CF=OF=1。例3-20對(duì)于帶符號(hào)數(shù),其最高位表示符號(hào),0表示正數(shù),1表示負(fù)數(shù)。對(duì)于負(fù)數(shù)來(lái)說(shuō),其后數(shù)值并不是真正的數(shù)值,而是2的補(bǔ)碼。因此,其真正數(shù)值為該數(shù)值減1后按位取反。2.帶符號(hào)數(shù)乘法指令0B4H=10110100,后7位數(shù)減1=0110011,對(duì)該數(shù)取反為1001100=04CH=76D。故該數(shù)為-76D。例如3.3.4除法指令1.無(wú)符號(hào)數(shù)除法指令2.帶符號(hào)數(shù)除法指令3.符號(hào)擴(kuò)展指令格式:DIVSRC功能:用AX中的數(shù)除以SRC,得到的商和余數(shù)分別送入AL和AH中用DX和AX中的數(shù)除以SRC,得到的商和余數(shù)分別送入AX和DX中SRC是字節(jié)型操作數(shù)SRC是字型操作數(shù)3.3.4除法指令格式:IDIVSRC功能:與DIV指令基本相同,不同點(diǎn):IDIV指令中的SRC為帶符號(hào)操作數(shù),得到的商和余數(shù)也為帶符號(hào)數(shù)。1.無(wú)符號(hào)數(shù)除法指令2.帶符號(hào)數(shù)除法指令3.符號(hào)擴(kuò)展指令12不允許使用立即數(shù)作為操作數(shù)。除法指令對(duì)所有標(biāo)志位均無(wú)定義。3被除數(shù)必須是16位二進(jìn)制數(shù)SRC是字節(jié)型操作數(shù)被除數(shù)必須是32位二進(jìn)制數(shù)SRC是字型操作數(shù)當(dāng)被除數(shù)位數(shù)不夠時(shí),則需要用符號(hào)擴(kuò)展的方法將其擴(kuò)展到所需要的位數(shù)。3.3.4除法指令1.無(wú)符號(hào)數(shù)除法指令2.帶符號(hào)數(shù)除法指令3.符號(hào)擴(kuò)展指令(1)字節(jié)轉(zhuǎn)換為字指令格式:CBW功能:將AL中數(shù)據(jù)的符號(hào)位擴(kuò)展到AH中。(AH)=00HAL的最高有效位為0(AH)=0FFHAL的最高有效位為1(2)字轉(zhuǎn)換為雙字指令格式:CWD功能:將AX中數(shù)據(jù)的符號(hào)位擴(kuò)展到DX中。(DX)=0000HAX的最高有效位為0(DX)=0FFFFHAX的最高有效位為112
符號(hào)擴(kuò)展指令是無(wú)操作數(shù)指令。符號(hào)擴(kuò)展指令不影響標(biāo)志位。3.3.4除法指令編寫(xiě)計(jì)算(-112)×9÷30的指令序列。指令序列如下:MOVAL,90H ;(-112)(AL)MOVBL,9 ;9(BL)IMULBL ;(-112)×9(AX)MOVBL,1EH ;30(BL)IDIVBL運(yùn)算結(jié)果:商(AL)=DFH=-33D,余數(shù)(AH)=EEH=-18D。例3-213.3.5十進(jìn)制調(diào)整指令4位二進(jìn)制數(shù)表示一位十進(jìn)制數(shù),即用一個(gè)字節(jié)表示兩位十進(jìn)制壓縮的BCD碼調(diào)整指令非壓縮的BCD碼調(diào)整指令8位二進(jìn)制數(shù)表示一位十進(jìn)制數(shù)格式:DAA功能:兩個(gè)壓縮的BCD碼執(zhí)行加法指令后,將AL中的和調(diào)整為壓縮BCD碼。(AL)←(AL)+06H,AF←1AL的低4位大于9或AF=1(AL)←(AL)+60H,CF←1AL的高4位大于9或CF=1(1)壓縮的BCD碼加法調(diào)整指令3.3.5十進(jìn)制調(diào)整指令用十進(jìn)制計(jì)算29+88的程序段如下。MOVAL,29HMOVBL,88HADDAL,BLDAA執(zhí)行ADD指令后,(AL)=(AL)+(BL)=B1H,AF=1,CF=0。AL的高4位大于9且AF=1,執(zhí)行DAA指令后,AL中的內(nèi)容加上66H調(diào)整,調(diào)整后(AL)=17H,AF=CF=1,故結(jié)果為117(CF為最高位,AL為后兩位)。例3-22壓縮的BCD碼調(diào)整指令非壓縮的BCD碼調(diào)整指令3.3.5十進(jìn)制調(diào)整指令格式:DAS功能:兩個(gè)壓縮的BCD碼執(zhí)行減法指令后,將AL中的差調(diào)整為壓縮BCD碼。壓縮的BCD碼調(diào)整指令非壓縮的BCD碼調(diào)整指令(AL)←(AL)-06H,AF←1AL的低4位大于9或AF=1(AL)←(AL)-60H,CF←1AL的高4位大于9或CF=1壓縮的BCD碼調(diào)整指令影響的標(biāo)志位有AF、SF、ZF、CF和PF,對(duì)OF無(wú)定義。(2)壓縮的BCD碼減法調(diào)整指令3.3.5十進(jìn)制調(diào)整指令格式:AAA功能:兩個(gè)非壓縮的BCD碼執(zhí)行加法指令后,將AL中的和調(diào)整為非壓縮BCD碼。壓縮的BCD碼調(diào)整指令非壓縮的BCD碼調(diào)整指令執(zhí)行此指令受影響的標(biāo)志位有AF和CF,對(duì)PF、SF、ZF和OF均無(wú)定義。請(qǐng)輸入文本清除AL的高4位,AF←0,CF←0(AH)←(AH)+01H,(AL)←(AL)+06H,清除AL的高4位,AF←1,CF←1AL的低4位大于9或AF=1AL的低4位小于9或AF=1(1)非壓縮的BCD碼加法調(diào)整指令3.3.5十進(jìn)制調(diào)整指令用十進(jìn)制計(jì)算5+6的程序段如下。MOVAL,05HMOVBL,06HADDAL,BLAAA執(zhí)行ADD指令后,(AL)=(AL)+(BL)=0BH,AF=0,CF=0。AL的低4位大于9,執(zhí)行AAA指令后,(AL)=01H,(AH)=01H,AF=CF=1。(AX)=0101H為正確的非壓縮BCD碼結(jié)果。例3-23壓縮的BCD碼調(diào)整指令非壓縮的BCD碼調(diào)整指令(1)非壓縮的BCD碼加法調(diào)整指令格式:AAS功能:兩個(gè)非壓縮的BCD碼執(zhí)行減法指令后,將AL中的差調(diào)整為非壓縮BCD碼。執(zhí)行此指令受影響的標(biāo)志位有AF和CF,對(duì)PF、SF、ZF和OF均無(wú)定義。清除AL的高4位,AF←0,CF←0(AH)←(AH)-01H,(AL)←(AL)-06H,清除AL的高4位,AF←1,CF←1AL的低4位大于9或AF=1AL的低4位小于9或AF=13.3.5十進(jìn)制調(diào)整指令壓縮的BCD碼調(diào)整指令非壓縮的BCD碼調(diào)整指令(2)非壓縮的BCD碼減法調(diào)整指令3.3.5十進(jìn)制調(diào)整指令用十進(jìn)制計(jì)算15-6的程序段如下。MOVAX,0105H ;非壓縮的BCD碼15送入AXMOVBL,06H ;非壓縮的BCD碼6送入BLSUBAL,BLAAS執(zhí)行SUB指令后,(AL)=(AL)-(BL)=FFH,AF=1,CF=1。AL的低4位大于9,執(zhí)行AAS指令后,(AL)=09H,(AH)=00H,AF=CF=1。(AX)=0009H為正確的非壓縮BCD碼結(jié)果。例3-24壓縮的BCD碼調(diào)整指令非壓縮的BCD碼調(diào)整指令(2)非壓縮的BCD碼減法調(diào)整指令執(zhí)行此指令受影響的標(biāo)志位有PF、SF和ZF,對(duì)AF、CF和OF均無(wú)定義。3.3.5十進(jìn)制調(diào)整指令格式:AAM功能:兩個(gè)非壓縮的BCD碼執(zhí)行MUL指令后,將AX中的乘積調(diào)整為非壓縮BCD碼。(AH)←(AL)/0AH,AL←(AL)%0AH。(3)非壓縮的BCD碼乘法調(diào)整指令用十進(jìn)制計(jì)算3×6的程序段如下。MOVAL,03HMOVBL,06HMULBLAAM執(zhí)行MUL指令后,(AL)=(AL)×(BL)=12H。執(zhí)行AAM指令后,(AH)=01H,(AL)=08H。(AX)=0108H為正確的非壓縮BCD碼結(jié)果。例3-25壓縮的BCD碼調(diào)整指令非壓縮的BCD碼調(diào)整指令3.3.5十進(jìn)制調(diào)整指令格式:AAD功能:執(zhí)行除法指令前,將AL(個(gè)位數(shù))和AH(十位數(shù))中的非壓縮BCD碼調(diào)整為二進(jìn)制數(shù),并存放在AL中。(AL)←(AH)×0AH+(AL),(AH)←0。(4)非壓縮的BCD碼除法調(diào)整指令執(zhí)行此指令受影響的標(biāo)志位有PF、SF和ZF,對(duì)AF、CF和OF均無(wú)定義。用十進(jìn)制計(jì)算31÷7的程序段如下。MOVAX,0301HMOVBL,07HAADDIVBL執(zhí)行AAD指令后,(AL)=1FH,(AH)=00H。執(zhí)行DIV指令后,余數(shù)(AH)=03H,商(AL)=04H。(AX)=0304H為正確的非壓縮BCD碼結(jié)果。例3-26壓縮的BCD碼調(diào)整指令非壓縮的BCD碼調(diào)整指令3.3.6邏輯運(yùn)算指令格式:ANDDST,SRC功能:對(duì)兩個(gè)操作數(shù)按位進(jìn)行邏輯與運(yùn)算,結(jié)果送入目的操作數(shù)。邏輯運(yùn)算指令讓我們播放視頻了解一下吧。邏輯與邏輯或邏輯非邏輯異或測(cè)試常用來(lái)完成使一個(gè)操作數(shù)的某些位清0,而保留其余位的操作。方法:要清0的位與“0”相與,要保留的位與“1”相與。“ANDAL,0FH”可以使AL的高4位清0,保留低4位。例如3.3.6邏輯運(yùn)算指令邏輯與邏輯或邏輯非邏輯異或測(cè)試常用來(lái)完成使一個(gè)操作數(shù)的某些位置為1,而保留其余位的操作。方法:要置為1的位與“1”相或,要保留的位與“0”相或。“ORAX,8080H”可以使AH和AL的最高位置為1,其他位的值保持不變。例如格式:NOTOPR功能:將操作數(shù)按位取反,結(jié)果送回操作數(shù)。格式:ORDST,SRC功能:對(duì)兩個(gè)操作數(shù)按位進(jìn)行邏輯或運(yùn)算,結(jié)果送入目的操作數(shù)。3.3.6邏輯運(yùn)算指令邏輯與邏輯或邏輯非邏輯異或測(cè)試常用來(lái)完成使一個(gè)操作數(shù)的某些位取反,而保留其余位的操作。方法:要取反的位與“1”異或,要保留的位與“0”異或。“XORAX,8862H”可以使AX中的D1、D5、D6、D11和D15位求反,其余位保留。例如又稱“模2加”,即以2為模的加法運(yùn)算。格式:XORDST,SRC功能:對(duì)兩個(gè)操作數(shù)按位進(jìn)行異或運(yùn)算,結(jié)果送入目的操作數(shù)3.3.6邏輯運(yùn)算指令格式:TESTOPR1,OPR2功能:對(duì)兩個(gè)操作數(shù)按位進(jìn)行邏輯與運(yùn)算,結(jié)果不保存,只反映在標(biāo)志位上。邏輯與邏輯或邏輯非邏輯異或測(cè)試常與條件轉(zhuǎn)移指令一起使用,在不改變?cè)胁僮鲾?shù)的基礎(chǔ)上檢測(cè)某些位是否滿足條件。方法:要取反的位與“1”異或,要保留的位與“0”異或。(1)NOT指令不允許使用立即數(shù)作為操作數(shù),其他指令的目的操作數(shù)不允許使用立即數(shù),兩個(gè)操作數(shù)不允許同時(shí)是存儲(chǔ)器。(2)NOT指令不影響標(biāo)志位,其他指令影響到的標(biāo)志位有CF、OF、PF、SF和ZF,對(duì)AF無(wú)定義?!癟ESTAL,80H”可以檢測(cè)AL的最高位是否為1。如果最高位為1,那么ZF=0否則,ZF=1。例如3.3.7移位指令格式:SALOPR,CNT功能:將操作數(shù)向左移若干位,每次移動(dòng)時(shí),最低位補(bǔ)0,最高位移入CF中。1算術(shù)左移指令決定左移的位數(shù)CF操作數(shù)0使用指令“SALOPR,1”左移一位移動(dòng)的位數(shù)送入CL,使
溫馨提示
- 1. 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁(yè)內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒(méi)有圖紙預(yù)覽就沒(méi)有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫(kù)網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 2025年高職農(nóng)產(chǎn)品流通與管理(物流配送)期末試題
- 2025年高職云計(jì)算技術(shù)應(yīng)用(云服務(wù)器搭建)試題及答案
- 2025年高職藥品安全管理(藥品安全應(yīng)用)試題及答案
- 深度解析(2026)《GBT 18051-2000潛油電泵振動(dòng)試驗(yàn)方法》
- 深度解析(2026)《GBT 17980.79-2004農(nóng)藥 田間藥效試驗(yàn)準(zhǔn)則(二) 第79部分殺蟲(chóng)劑防治小麥蚜蟲(chóng)》
- 深度解析(2026)《GBT 17889.6-2025梯子 第6部分:可移動(dòng)式平臺(tái)梯 》
- 西安汽車職業(yè)大學(xué)《公司金融分析》2025-2026學(xué)年第一學(xué)期期末試卷
- 西南政法大學(xué)《教育文學(xué)作品鑒賞》2025-2026學(xué)年第一學(xué)期期末試卷
- 天文學(xué)就業(yè)前景解析
- 安全生產(chǎn)診斷工作手冊(cè)講解
- 醫(yī)保支付改革與科室績(jī)效激勵(lì)性調(diào)整策略
- 貨車掛靠租賃協(xié)議書(shū)
- 3D打印與機(jī)器人融合的個(gè)體化骨科精準(zhǔn)手術(shù)方案
- 綿竹市2025年公開(kāi)招聘社區(qū)專職工作者(91人)考試筆試備考試題及答案解析
- 2026審計(jì)署京內(nèi)直屬事業(yè)單位招聘國(guó)內(nèi)高校應(yīng)屆畢業(yè)生20人筆試考試參考試題及答案解析
- 長(zhǎng)期照護(hù)師安全理論模擬考核試卷含答案
- 2026廣東佛山市華英學(xué)校招聘教師2人考試參考題庫(kù)帶答案解析
- 2025年行政事業(yè)單位資產(chǎn)管理自檢自查報(bào)告
- 2025年阿里輔警協(xié)警招聘考試備考題庫(kù)附答案詳解(研優(yōu)卷)
- 建設(shè)單位安全管理要求
- 2025年及未來(lái)5年市場(chǎng)數(shù)據(jù)中國(guó)汽車TIC服務(wù)行業(yè)市場(chǎng)運(yùn)行態(tài)勢(shì)與投資戰(zhàn)略咨詢報(bào)告
評(píng)論
0/150
提交評(píng)論