微機(jī)原理與接口技術(shù):08第3章 尋址方式和指令系統(tǒng)3.3 習(xí)題3_第1頁
微機(jī)原理與接口技術(shù):08第3章 尋址方式和指令系統(tǒng)3.3 習(xí)題3_第2頁
微機(jī)原理與接口技術(shù):08第3章 尋址方式和指令系統(tǒng)3.3 習(xí)題3_第3頁
微機(jī)原理與接口技術(shù):08第3章 尋址方式和指令系統(tǒng)3.3 習(xí)題3_第4頁
微機(jī)原理與接口技術(shù):08第3章 尋址方式和指令系統(tǒng)3.3 習(xí)題3_第5頁
已閱讀5頁,還剩20頁未讀 繼續(xù)免費(fèi)閱讀

下載本文檔

版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)

文檔簡(jiǎn)介

交通信息與控制工程系教案(理論教學(xué)用)課程名稱微機(jī)原理與接口技術(shù)第8次第4周2學(xué)時(shí)上課教室WM1310課程類型專業(yè)基礎(chǔ)課授課對(duì)象自動(dòng)化專業(yè)章節(jié)名稱第三章尋址方式和指令系統(tǒng)(3.3)教學(xué)目的和要求掌握8086的基本指令,如邏輯運(yùn)算和移位指令、串操作指令、程序控制指令等。講授主要內(nèi)容及時(shí)間分配邏輯運(yùn)算和移位指令;(35min)串操作指令;(20min)程序控制指令;(25min)處理器控制指令。(10min)教學(xué)重點(diǎn)與難點(diǎn)重點(diǎn):1.邏輯運(yùn)算和移位指令的基本功能和格式;2.串操作指令的基本功能和格式;3.程序控制指令的基本功能和格式。難點(diǎn):邏輯運(yùn)算和移位指令的基本功能和格式。要求掌握知識(shí)點(diǎn)和分析方法1.邏輯運(yùn)算和移位指令的格式、功能及應(yīng)用方法;2.串操作指令的格式、功能及應(yīng)用方法;3.程序控制指令的格式、功能及應(yīng)用方法。啟發(fā)與提問邏輯移位和算術(shù)移位指令的區(qū)別?教學(xué)手段多媒體+板書作業(yè)布置思考題:1.遠(yuǎn)跳轉(zhuǎn)和近跳轉(zhuǎn)的區(qū)別?3.2,3.53.9,3.113.12,3.14主要參考資料備注注:教案按授課次數(shù)填寫,每次授課均應(yīng)填寫一份。重復(fù)班授課可不另填寫教案。長(zhǎng)安大學(xué)講稿(第八講)講授內(nèi)容三、邏輯運(yùn)算和移位類1.邏輯運(yùn)算邏輯運(yùn)算指令對(duì)操作數(shù)的要求大多與MOV指令相同。邏輯運(yùn)算是按位操作的,它包括AND(與)、OR(或)、NOT(非)、XOR(異或)和TEST(測(cè)試)指令。除“非”運(yùn)算指令外,其余指令的執(zhí)行都會(huì)使標(biāo)志位OF=CF=0,AF位無定義,SF、ZF和PF根據(jù)運(yùn)算結(jié)果設(shè)置?!芭c”運(yùn)算指令格式:ANDOPRD1,OPRD2操作:兩操作數(shù)相“與”,結(jié)果送目標(biāo)地址?!纠恳帘蜛L中的高4位。AND AL,00001111B【例】AND AL,AL此指令執(zhí)行前后,(AL)無變化,但執(zhí)行后使標(biāo)志位發(fā)生了變化,即CF=0,OF=0?!盎颉边\(yùn)算指令格式:OROPRD1,OPRD2操作:兩操作數(shù)相“或”,結(jié)果送目標(biāo)地址【例】(AL)=0FH,OR AL,10000000B(AL)=8FH【例】OR AL,AL指令執(zhí)行前后,(AL)不變,但執(zhí)行后標(biāo)志位發(fā)生了變化,即CF=0,OF=0。“非”運(yùn)算指令格式:NOTOPRD操作:操作數(shù)按位取反再送回原地址指令中的操作數(shù)不能是立即數(shù)指令的執(zhí)行對(duì)標(biāo)志位無影響例:NOTBYTEPTR[BX]“異或”運(yùn)算指令格式:XOROPRD1,OPRD2操作:兩操作數(shù)相“異或”,結(jié)果送目標(biāo)地址兩操作數(shù)自身相異或,結(jié)果XORAX,AX“測(cè)試”指令格式:TESTOPRD1,OPRD2操作:執(zhí)行“與”運(yùn)算,但運(yùn)算的結(jié)果不送回目標(biāo)地址。應(yīng)用:常用于測(cè)試某些位的狀態(tài)“測(cè)試”指令例從地址為38F0H的端口中讀入一個(gè)字節(jié)數(shù),如果該數(shù)的bit1位為1,則可從38FEH端口將DATA為首地址的一個(gè)字輸出,否則繼續(xù)讀寫端口數(shù)據(jù)。編寫相應(yīng)的程序段。LEASI,DATAMOVDX,38F0HWATT:INAL,DXTESTAL,02HJZWATT;ZF=1轉(zhuǎn)移MOVDX,38FEHMOVAX,[SI]OUTDX,AX2. 移位指令(1) 邏輯/算術(shù)左移指令。格式:SHL/SALDST,CNT操作:指令按照CNT指定的移位次數(shù)對(duì)目的操作數(shù)進(jìn)行左移位,移位結(jié)果送DST,最后一次移出的位送CF中。移動(dòng)一位后,若CF與最高不相等,則OF=1;否則OF=0例:MOVAL,41HSHL(SAL)AL,1執(zhí)行結(jié)果(AL)=82H,CF=0,OF=1【例】將(AX)乘以10。十進(jìn)制數(shù)10的二進(jìn)制形式為1010,即權(quán)為2和權(quán)為8的位為1,故采用2×(AX)+8×(AX),結(jié)果為10×(AX),程序段如下:SHL AX,1MOV BX,AXSHL AX,1SHL AX,1ADD AX,BX邏輯右移格式:SHRDST,CNT移動(dòng)一位后,若次高位與最高位不相等,則OF=1;否則OF=00CF0CF格式:SAROPRD,ICFSAROPRD,CLCF循環(huán)移位指令不帶進(jìn)位位的循環(huán)移位帶進(jìn)位位的循環(huán)移位CF左移CF左移ROLCFCF右移ROR帶進(jìn)位位的循環(huán)移位CFCFCF左移RCL右移RCR循環(huán)移位指令的應(yīng)用例如:有一個(gè)4字節(jié)數(shù)存放在DX和AX中,(DX)=0123H,(AX)=0456H,要求該數(shù)的4個(gè)字節(jié)一起左移一位。執(zhí)行SALAX,1RCLDX,1注意:將AX的D15移到CF,再將CF移到DX的D0,DX的D15最后移到CF中。用于對(duì)某些位狀態(tài)的測(cè)試;測(cè)試BL寄存器的第三位狀態(tài),并保持原內(nèi)容不變。MOVCL,04HROLBL,CLJNZZERORORBL,CL……ZERO:RORBL,CL例:將1000H開始存放的四個(gè)壓縮BCD碼轉(zhuǎn)換為ASCII碼存放在3000H開始的單元中去。MOVSI,1000HMOVDI,3000HMOVCX,4 BBB:MOVAL,[SI]MOVBL,AL ANDAL,0FH ORAL,30HMOV[DI],ALINCDIMOVAL,BLPUSHCXMOVCL,4SHRAL,CLORAL,30HMOV[DI],ALINCDIINCSIPOPCXDECCXJNZBBBHLT四、串操作指令針對(duì)數(shù)據(jù)塊或字符串的操作;可實(shí)現(xiàn)存儲(chǔ)器到存儲(chǔ)器的數(shù)據(jù)傳送;待操作的數(shù)據(jù)串稱為源串,目標(biāo)地址稱為目標(biāo)串。串操作指令的特點(diǎn)源串一般存放在數(shù)據(jù)段,偏移地址由SI指定。允許段重設(shè);目標(biāo)串必須在附加段,偏移地址由DI指定;指令自動(dòng)修改地址指針,修改方向由DF決定。DF=0增地址方向;DF=1減地址方向;數(shù)據(jù)塊長(zhǎng)度值由CX指定可增加自動(dòng)重復(fù)前綴以實(shí)現(xiàn)自動(dòng)修改CX內(nèi)容。重復(fù)前綴REP無條件重復(fù)REPE相等重復(fù)REPZ為零重復(fù)REPNE不相等重復(fù)REPNZ不為零重復(fù)串傳送指令格式:MOVSOPRD1,OPRD2MOVSBMOVSW串傳送指令常與無條件重復(fù)前綴連用對(duì)比用MOV指令和MOVS指令實(shí)現(xiàn)將200個(gè)字節(jié)數(shù)據(jù)從內(nèi)存的一個(gè)區(qū)域送到另一個(gè)區(qū)域的程序段。用串傳送指令實(shí)現(xiàn)200個(gè)字節(jié)數(shù)據(jù)的傳送:LEASI,MEM1LEADI,MEM2MOVCX,200CLDREPMOVSBHLT串比較指令格式:CMPSOPRD1,OPRD2CMPSBCMPSW串比較指令常與條件重復(fù)前綴連用,指令的執(zhí)行不改變操作數(shù),僅影響標(biāo)志位。測(cè)試200個(gè)字節(jié)數(shù)據(jù)是否傳送正確,如果不正確,找出第一個(gè)不相等的字符,并將其地址和不相等的字符送到:BX和AL中。LEASI,MEM1LEADI,MEM2MOVCX,0C8HCLDREPECMPSBJZSTOPDECSIMOVAL,[SI]MOVBX,SISTOP:HLT串掃描指令格式:SCASOPRDSCASBSCASW執(zhí)行與CMPS指令相似的操作,只是這里的源操作數(shù)是AX或AL【例】SCAS指令的舉例。假設(shè)有一起始地址為BLOCK,長(zhǎng)度為100個(gè)字節(jié)的存儲(chǔ)區(qū),現(xiàn)要對(duì)這一存儲(chǔ)區(qū)進(jìn)行測(cè)試,看其中是否有內(nèi)容為00H的存儲(chǔ)單元。

MOV DI,OFFSET BLOCKCLDMOV CX,100XOR AL,ALREPNE SCASBJZ FOUNDFOUND:???串裝入指令格式:LODSOPRDLODSBLODSW對(duì)字節(jié):AL←([DS:SI])對(duì)字:AX←([DS:SI])串送存指令格式:STOSOPRDSTOSBSTOSW操作:對(duì)字節(jié):AL([ES:DI])對(duì)字:AX([ES:DI])五、程序控制指令1. 轉(zhuǎn)移指令① 段內(nèi)直接轉(zhuǎn)移。格式:JMPNEARPTRTARGETJMPSHORTTARGET操作:(IP)←(IP)+16位位移量;(IP)←(IP)+8位位移量。② 段內(nèi)間接尋址格式:JMPOPRD操作:(IP)←(EA)。說明:轉(zhuǎn)向有效地址是一個(gè)通用寄存器或一個(gè)存儲(chǔ)器單元的內(nèi)容。該指令是絕對(duì)轉(zhuǎn)移。

例如:若(DS)=0A000H,(BX)=0056H,TABLE=3200H,(SI)=0256H,(0A3256H)=1688H。執(zhí)行JMPSI;JMPTABLE[BX]③段間直接轉(zhuǎn)移匯編格式1:JMPFARPTR轉(zhuǎn)移地址標(biāo)號(hào)執(zhí)行的操作: (IP)←轉(zhuǎn)移地址標(biāo)號(hào)的偏移地址(CS)←轉(zhuǎn)移地址標(biāo)號(hào)的段地址功能:無條件轉(zhuǎn)移到指定標(biāo)號(hào)地址處往下執(zhí)行。匯編格式2:JMP段地址值:偏移地址執(zhí)行的操作: (IP)←偏移地址值(CS)←段地址值功能:無條件轉(zhuǎn)移到指定段的指定偏移地址處往下執(zhí)行。P1 SEGMENTJMP FAR PTR NEXT1P1 ENDSP2 SEGMENTNEXT1:P2 ENDSJMP6000H:1000H④段間間接轉(zhuǎn)移匯編格式:JMPDWORDPTR存儲(chǔ)器尋址方式執(zhí)行的操作: (IP)←尋址到的存儲(chǔ)單元的第一個(gè)字(CS)←尋址到的存儲(chǔ)單元的第二個(gè)字功能:無條件轉(zhuǎn)移到指定段的指定偏移地址處?!纠咳绻鸗ABLE是數(shù)據(jù)段中定義的一變量,偏移地址為0010H,(DS)=1000H,(10015H)=12H,(10016H)=34H,(10017H)=56H,(10018H)=78H,有指令JMP DWORD PTR TABLE[BX]執(zhí)行時(shí)若(BX)=0005H,則執(zhí)行后,(IP)=3412H,(CS)=7856H,即程序轉(zhuǎn)移到7856H:3412H處。(2)條件轉(zhuǎn)移指令。條件轉(zhuǎn)移指令有16條,轉(zhuǎn)移的條件是依據(jù)對(duì)除AF之外的五個(gè)狀態(tài)標(biāo)志位的判斷??蓪?duì)一個(gè)標(biāo)志位進(jìn)行判斷,也可對(duì)兩個(gè)甚至三個(gè)標(biāo)志位進(jìn)行判斷。在內(nèi)存中存放了100個(gè)8位的有符號(hào)數(shù),其首地址位Table,試統(tǒng)計(jì)其中的正、負(fù)數(shù)以及零的個(gè)數(shù),并分別放到相應(yīng)的存儲(chǔ)單元Plus,Minus,Zero中。Start:MOVAL,0MOVPlus,ALMOVMinus,ALMOVZero,ALLEASI,TABLEMOVCX,100CLDCHE:LODSBORALJSX1JZX2INCPLUSJMPNEXTX1:INCMINUSJMPNEXTX2:INCZERONEXT:LOOPCHECKHLT2. 循環(huán)控制指令控制程序在以當(dāng)前IP為中心的-128~+127范圍內(nèi)循環(huán)執(zhí)行;循環(huán)次數(shù)由CX寄存器指定。無條件循環(huán)指令格式:LOOPLABEL循環(huán)條件:CX≠0操作:DECCXJNZ符號(hào)地址條件循環(huán)指令格式:LOOPZLABELLOOPELABEL循環(huán)條件:CX≠0ZF=1格式:LOOPNZLABELLOOPNELABEL循環(huán)條件:CX≠0ZF=03. 過程調(diào)用和返回調(diào)用指令的執(zhí)行過程將調(diào)用指令的下一條指令的地址(斷點(diǎn))壓入堆棧;獲取子過程的入口地址(子過程第1條指令的偏移地址);(執(zhí)行子過程,含相應(yīng)參數(shù)的保存及恢復(fù));將斷點(diǎn)偏移地址由堆棧彈出,返回原程序。段內(nèi)調(diào)用子過程與原調(diào)用程序在同一代碼段,在調(diào)用之前只需保護(hù)斷點(diǎn)的偏移地址格式:CALLNEARPROC段內(nèi)調(diào)用例CALLTIMRECALLWORDPTR[SI]段間調(diào)用子過程與原調(diào)用程序不在同一代碼段,在調(diào)用之前需保護(hù)斷點(diǎn)的段基地址和偏移地址。先將斷點(diǎn)的CS壓棧,再壓入IP。格式:CALLFARPROCCALLFARTIMRECALLDWORDPTR[SI]返回指令從堆棧中彈出斷點(diǎn)地址,返回原程序。格式:RETRET指令一般位于子程序的最后。4.中斷指令中斷是隨機(jī)事件或異常事件引起,調(diào)用則是事先已在程序中安排好;響應(yīng)中斷請(qǐng)求不僅要保護(hù)斷點(diǎn)地址,還要保護(hù)FLAGS內(nèi)容;調(diào)用指令在指令中直接給出子程序入口地址,中斷指令只給出中斷向量碼,入口地址則在向量碼指向的內(nèi)存單元中。格式:INTn操作:將FLAGS壓入堆棧;清除IF和TF;將INT指令下一條指令的CS、IP壓棧;取中斷服務(wù)程序入口地址。溢出中斷指令格式:INTO若OF=1,則啟動(dòng)一個(gè)類型為4的中斷過程,給出一個(gè)出錯(cuò)標(biāo)志,如果OF=0,不做任何操作。INTO指令通常安排在有符號(hào)數(shù)加減運(yùn)算指令之后。中斷返回指令格式:IRET中斷服務(wù)程序的最后一條指令,負(fù)責(zé)恢復(fù)斷點(diǎn),恢復(fù)標(biāo)志寄存器內(nèi)容六、處理器控制指令對(duì)標(biāo)志位的操作與外部設(shè)備的同步習(xí)題33.1~3.4課堂講解,答案標(biāo)注在教材相應(yīng)頁碼。3.5分別指出下列指令中源操作數(shù)和目的操作數(shù)的尋址方式。若是存儲(chǔ)器尋址,試寫出其有效地址和物理地址。設(shè)(DS)=6000H,(ES)=2000H,(SS)=1500H,(SI)=00A0H,(DI)=6010H,(BX)=0800H,(BP)=1200H,數(shù)據(jù)變量VAR為0050H?!窘狻浚海?)MOVAX,3050H源操作數(shù)尋址方式:立即數(shù)尋址。只在寄存器中傳輸,與存儲(chǔ)單元無關(guān),故不用計(jì)算。(2)MOVDL,80H源操作數(shù)尋址方式:立即數(shù)尋址。只在寄存器中傳輸,與存儲(chǔ)單元無關(guān),故不用計(jì)算。(3)MOVAX,VAR直接尋址(4)MOVAX,VAR[BX][SI]源操作數(shù)是基址變址相對(duì)尋址。有效地址EA=基址寄存器BX+變址寄存器SI+偏移量VAR=0800H+00A0H+0050H=08F0H。P48由于段寄存器一般由基址寄存器決定,使用BX,默認(rèn)段寄存器DS;使用BP,默認(rèn)段寄存器SS。物理地址=DS左移4位+有效地址EA=608F0H(5)MOVAX,[BX+25H]源操作數(shù)是寄存器相對(duì)尋址。有效地址=基址寄存器BX+25H=0800H+25H=0825H因?yàn)榛芳拇嫫魇荁X,所以段寄存器對(duì)應(yīng)的是DS因此,物理地址=DS左移4位+有效地址EA=60825H(6)MOVDI,ES:[BX]源操作數(shù)是寄存器間接尋址,允許段超越ES。有效地址EA=BX=0800H物理地址=附加段ES左移4位+EA=20000H+0800H=20800H(7)MOVDX,[BP]源操作數(shù)是寄存器間接尋址因?yàn)槭鞘褂肂P,所以對(duì)應(yīng)堆棧段SS有效地址EA=BP=1200H物理地址=SS左移4位+EA=15000H+1200H=16500H(8)MOVBX,20H[BX]寄存器相對(duì)尋址,同(5)有效地址=基址寄存器BX+20H=0800H+20H=0820H因?yàn)榛芳拇嫫魇荁X,所以段寄存器對(duì)應(yīng)的是DS因此,物理地址=DS左移4位+有效地址EA=60820H(9)ANDAX,BX源操作數(shù)是寄存器尋址,由于是在兩個(gè)寄存器之間傳遞數(shù)據(jù),即在CPU內(nèi)部,因此無需存儲(chǔ)器操作。不用計(jì)算物理地址。(10)MOVBX,ES:[SI]寄存器間接尋址附加段的段超越。有效地址EA=SI=00A0H物理地址=ES左移4位+EA=20000H+00A0H=200A0H(11)ADCAX,[BX+DI]基址變址尋址基址寄存器決定段寄存器為DS,有效地址EA=BX+DI=0800H+6010H=6810H物理地址=DS左移4位+EA=60000H+6810H(12)PUSHDS源操作數(shù)是寄存器尋址不用計(jì)算有效地址和物理地址,數(shù)據(jù)內(nèi)容直接在DS中,即6000H內(nèi)容直接壓入堆棧3.6.設(shè)堆棧指針SP的初值為2300H,(AX)=5000H,(BX)=4200H。執(zhí)行指令PUSHAX后,(SP)的值為多少?再執(zhí)行指令PUSHBX及POPAX之后,(SP)的值為多少?(AX)的值為多少?(BX)的值為多少?【解】:執(zhí)行指令PUSHAX后,(SP)<-(SP)-2(SP)=2300H-2=22FEH(AX)=4200H(BX)=4200H3.8已知DS=2000H,有關(guān)的內(nèi)存單元為(21000H)=00H,(21001H)=12H,(21200H)=00H,(21201H)=10H,(23200H)=20H,(23201H)=30H,(23400H)=40H,(23401H)=30H,(23600H)=60H,(23601H)=30H,數(shù)據(jù)變量COUNT的內(nèi)容為1400H,其有效地址為1200H,執(zhí)行下列指令MOVBX,OFFSETCOUNT;MOVSI,[BX];MOVAX,COUNT[SI][BX];,執(zhí)行下列指令后,寄存器AX,BX,SI的值分別為多少?【解】:MOVBX,OFFSETCOUNT;【分析】:OFFSET是偏移量屬性,表示這條指令目標(biāo)代碼的首字節(jié)在段內(nèi)距離段起始點(diǎn)的字節(jié)數(shù)。因此(BX)=1200H如果是MOVBX,COUNT?,則是把DS段內(nèi)以有效地址COUNT起始的兩個(gè)單元內(nèi)容送入BX寄存器。MOVSI,[BX];由于是使用BX寄存器作基址寄存器,所以使用DS寄存器作段基址DS左移4位+(BX)=20000H+1200H=21200H因?yàn)镾I為16位寄存器,所以要取從21200H開始的兩個(gè)字節(jié)單元的內(nèi)容。(SI)=1000HMOVAX,COUNT[SI][BX];物理地址=DS左移4位+(SI)+(BX)+COUNT=20000H+1000H+1200H+1400H=23600H由于(23400H)=40H,(23601H)=30H,所以(AX)=3040H答:(BX)=1200H(SI)=1000H(AX)=3040H3.9設(shè)標(biāo)志寄存器原值為0401H,AX=3272H,BX=42A2H【解】:運(yùn)算之前,標(biāo)志寄存器的值0401H,展開為0000010000000001,其中DF=1,CF=1。AL=72H,BH=42H執(zhí)行SBBAL,BH(AL)-(BH)-CF=72H-42H-1=2FH01110010-01000010=00110000-1=00101111原AH保持不變,為32H所以(AX)=322FHCF=0PF=0輔助進(jìn)位AF=1OF=0所以標(biāo)志寄存器值為00000100000100000=0410H查看標(biāo)志寄存器方法-rf標(biāo)志名中文標(biāo)志為1時(shí)標(biāo)志為0時(shí)

OF[OverflowFlag]溢出標(biāo)志ov[OVerflow]nv[NotoVerflow]

DF[DirectionFlag]方向dn[DowN]up[UP]

IF[InterruptFlag]中斷ei[Enable]di[Disable]

SF[SignFlag]符號(hào)ng[NeGative]pl[PLus]

ZF[ZeroFlag]零zr[ZeRo]nz[NotZero]

AF[AuxiliarycarryFlag]輔進(jìn)位ac[Auxiliary]na[Not]

PF[ParityFlag]奇偶pe[Eve]po[Odd]

CF[CarryFlag]進(jìn)位cy[CarrY]nc[NotCarry]3.10設(shè)標(biāo)志寄存器原值為0A11H,SP=0060H,AL=4,下列幾條指令執(zhí)行之后,AX,SP和標(biāo)志寄存器的值分別為多少?【解】:目的是練習(xí)標(biāo)志傳送指令的用法畫出堆棧段的圖示PUSHF(SP)<-(SP)-2,((SP)+1,(SP))<-(PSW)棧頂位置減2,將當(dāng)前狀態(tài)標(biāo)志寄存器內(nèi)容0A11壓入堆棧。LAHF(AH)<-(FLAGSL)將標(biāo)志寄存器低字節(jié)中的5個(gè)標(biāo)志位分別傳送到AH的對(duì)應(yīng)位。AH=11HXCHGAH,AL交換AH和AL,原來的(AL)=4=00000100=04H,則交換后(AH)=04H,(AL)=11HPUSHAX將AX=0411H壓入堆棧,SAHF將AH送標(biāo)志寄存器(FLAGSL)<-AHPOPF標(biāo)志出棧,標(biāo)志寄存器內(nèi)容為0411H【解】:(AX)=0411H(SP)=005EH標(biāo)志寄存器=0411H3.12設(shè)若內(nèi)存單元DATA在數(shù)據(jù)段中偏移量為24C0H,24C1H---24C3H單元中依次存放著55H,66H,77H,88H,執(zhí)行下列幾條指令后,寄存器AX,BX,CL,SI,DS的值分別是多少?【解】:首先畫出數(shù)據(jù)段的圖示MOVAX,DATA將DS段內(nèi)以有效地址DATA起始的兩個(gè)單元的內(nèi)容送入AX寄存器。(AX)=6655HLEASI,DATA取地址,(SI)=24C0HMOVCL,[SI](CL)=55HLDSBX,DATA(DEST)<-(SRC),(DS)<-(SRC+2)源操作數(shù)地址中的內(nèi)容送BX,(BX)=6655H,源操作數(shù)地址加2的內(nèi)容送數(shù)據(jù)段寄存器DS(DS)=8877H(AX)=6655H(BX)=6655H(SI)=24C0H(CL)=55H(DS)=8877H3.14 假設(shè)DS=212AH,(CS)=0200H,(IP)=1200H,(BX)=0500H,(DI)=2600H,位移量DATA=40H,(217A0H)=2300H,(217E0H)=0400H,(217E2H)=9000H,試確定下列轉(zhuǎn)移指令的轉(zhuǎn)移地址(1) JMP2300H(2) JMPWORDPTR[BX](3) JMPDWORDPTR[BX+DATA](4) JMPBX(5) JMPDWORDPTR[BX][DI]【解】:(1)段內(nèi)直接轉(zhuǎn)移IP<-2300H;(IP)=2300H(2)段內(nèi)間接轉(zhuǎn)移;程序轉(zhuǎn)移的偏移地址在寄存器或存儲(chǔ)單元中。對(duì)存儲(chǔ)器單元尋址,在符號(hào)前加操作符WORDPTR,表示取得的轉(zhuǎn)移地址是字的有效地址。物理地址=DS左移4位+BX=212A0H+0500H=217A0H,(217A0H)=2300H,所以(IP)=2300H。(3)段間間接轉(zhuǎn)移;程序轉(zhuǎn)移的偏移地址在寄存器或存儲(chǔ)單元中。由存儲(chǔ)器指定的雙字單元的低位字地址單元存放偏移地址,高位字地址單元存放段基址,分別送入IP和CS中。(IP)<-DS:[BX],CS<-DS:[BX+2]DS左移4位+BX+DATA=212A0H+0500H+40H=217E0H(IP)=0400H(CS)=9000H(4)段內(nèi)間接轉(zhuǎn)移;程序轉(zhuǎn)移的偏移地址在寄存器或存儲(chǔ)單元中。(IP)<-(BX)(IP)=0500H(5)DS:[BX][DI]送IPDS:[BX][DI+2]送CS根據(jù)已知條件不能計(jì)算最終結(jié)果!3.17 執(zhí)行下列指令后,AX寄存器的內(nèi)容是什么?TABLEDW10,20,30,40,50ENTRYDW3………MOVBX,OFFSETTABLE;ADDBX,ENTRYMOVAX,[BX]【解】:(AX)=1E00H3.19.試寫出把DX、AX中的雙字右移四位。【解】:MOVCL,4;設(shè)置循環(huán)次數(shù)為4.SHRAX,CL;實(shí)現(xiàn)將AX邏輯右移MOVBL,DL;將DL的低4位暫存在BL中SHRDX,CL;實(shí)現(xiàn)將DX邏輯右移SHLBL,CL;將BL邏輯左移ORAH,BL;將BL或上AH;也就是使DL的低4位或上AH高4位,從而實(shí)現(xiàn)了DX、AX中的雙字右移四位。20.當(dāng)執(zhí)行中斷指令時(shí),堆棧的內(nèi)容有什么變化?如何求得子程序的入口地址?【分析】:過程調(diào)用只保護(hù)返回地址,中斷指令還要保護(hù)狀態(tài)標(biāo)志進(jìn)棧。具體三種方法:INTn、INTO、IRET21.試述中斷指令I(lǐng)RET與RET指令的區(qū)別【分析】:IRET:將堆棧中的斷點(diǎn)地址彈出賦給IP和CS,以實(shí)現(xiàn)中斷返回;將標(biāo)志寄存器的值彈出,恢復(fù)中斷前的狀態(tài)。RET:將斷點(diǎn)地址從堆棧中彈出,然后按返回地址繼續(xù)執(zhí)行。該指令對(duì)狀態(tài)標(biāo)志位無影響。該指令通常放在子程序末尾,使子程序執(zhí)行完畢后能返回主程序繼續(xù)執(zhí)行。22.根據(jù)下列給定的條件寫出指令或指令序列。(1)將一個(gè)字節(jié)的立即數(shù)送到地址為NUM的存儲(chǔ)單元中。MOVNUM,22H(2)將一個(gè)8位立即數(shù)與地址為BUF的存儲(chǔ)單元內(nèi)容相加。ADDBUF,22H(3)將地址為ARRAY的存儲(chǔ)單元中的字?jǐn)?shù)據(jù)循環(huán)右移一位。RORARRAY,1(4)將16位立即數(shù)與地址為MEM的存儲(chǔ)單元中的數(shù)比較。CMPMEM,2222H(5)測(cè)試地址為BUFFER的字?jǐn)?shù)據(jù)的符號(hào)位。TESTBUFFER,8000H(6)將AX寄存器及CF標(biāo)志位同時(shí)清0?!痉治觥慨?dāng)一個(gè)操作數(shù)自身做“異或”運(yùn)算的話,由于每一位都相同,則“異或”結(jié)果必為0,且使進(jìn)位標(biāo)志CF也為0.因此XORAX,AX某一個(gè)操作數(shù),自己和自己相“與”,操作數(shù)不變,但可以使進(jìn)位標(biāo)志CF清0。因此ANDAX,0某一個(gè)操作數(shù),自己和自己相“減”,使得進(jìn)位標(biāo)志CF清0。因此SUBAX,AX(7)用直接尋址方式將首地址為ARRAY的字?jǐn)?shù)組中第5個(gè)數(shù)送往寄存器BX中。MOVBUF,[ARRAY+5]MOVBX,BUF(8)用寄存器尋址方式將首地址為ARRAY的字?jǐn)?shù)組中第5個(gè)數(shù)送往寄存器BX中。LEASI,ARRAYADDSI,5MOVBX,SI(9)用相對(duì)尋址方式將首地址為ARRAY的字?jǐn)?shù)組中第8個(gè)數(shù)送往寄存器BX中。MOVBX,[ARRAY+8](10)用基址變址尋址方式將首地址為ARRAY的字?jǐn)?shù)組中第N個(gè)數(shù)送往寄存器BX中。LEAAX,ARRAYMOVSI,NMOVBX,[AX][SI](11)將首地址為BCD_BUF存儲(chǔ)單元中的兩個(gè)壓縮BCD碼相加,并送到第三個(gè)存儲(chǔ)單元。LEABX,BCD_BUFMOVAX,[BX]ADCAX,[BX+1]25.若AL=0FFH,BL=13H,指出下列指令執(zhí)行后標(biāo)志AF、OF、ZF、SF、PF、CF的狀態(tài)?!痉治觥緼F:輔助進(jìn)位,低字節(jié)向高字節(jié)進(jìn)位(借位)AF置1,否則置0。OF:溢出標(biāo)志,如果兩個(gè)帶符號(hào)數(shù)的符號(hào)相同,但結(jié)果的符號(hào)不同,則把OF置1,代表兩個(gè)帶符號(hào)數(shù)運(yùn)算已經(jīng)溢出。ZF:運(yùn)算結(jié)果為0,則ZF置1。SF:符號(hào)標(biāo)志,結(jié)果為負(fù),則SF置1。PF:奇偶標(biāo)志,若含有偶數(shù)個(gè)1時(shí),PF=1,否則為0。CF:進(jìn)位標(biāo)志,當(dāng)執(zhí)行加法(減法)運(yùn)算時(shí),使最高位產(chǎn)生進(jìn)位(或借位)時(shí),CF=1。(1)ADDBL,ALAF=1,OF=1,ZF=0,SF=0,PF=1,CF=1(2)SUBBL,ALAF=0,OF=0,ZF=0,SF=0,PF=1,CF=0(3)INCBLAF=0,OF=0,ZF=0,SF=0,PF=1,CF=0(4)NEGBLAF=0,OF=0,ZF=0,SF=1,PF=1,CF=0(5)ANDAL,BLAF=0,OF=0,ZF=0,SF=0,PF=0,CF=0(6)MULBLAF=0,OF=0,ZF=0,SF=0,PF=0,CF=0(7)CMPBL,ALAF=1,OF=1,ZF=0,SF=0,PF=1,CF=1(8)IMULBLAF=0,OF=0,ZF=0,SF=0,PF=0,CF=0(9)ORBL,ALAF=0,OF=0,ZF=0,SF=1,PF=1,CF=0(10)XORBL,BLAF=0,OF=0,ZF=1,SF=0,PF=1,CF=026.已知BUF單元有一個(gè)單字節(jié)無符號(hào)數(shù)X,按要求編寫一段程序段計(jì)算Y(無符號(hào)字?jǐn)?shù)據(jù)),并將其存于累加器。Y=X-20+3XMOVZXAX,XMULAX,4SUBAX,20#4樓得分:0回復(fù)于:2009-09-1721:43:33DATASEGMENTYDW?DATAENDSCODESEGMENTASSUMECS:CODE,DS:DATASTART:MOVAX,DS:[SI]//SI為x所在單元偏移地址MULAX,3SUBAX,20MOVY,AXCODEENDSENDSTART#5樓得分:0回復(fù)于:2009-09-1721:50:36DATASEGMENTXDWD//D為一個(gè)實(shí)數(shù)數(shù)據(jù)x的偏移地址長(zhǎng)度YDW?DATAENDSCODESEGMENTASSUMECS:CODE,DS:DATASTART:MOVSI,XMOVAX,DS:[SI]//SI為x所在單元偏移地址MULAX,3SUBAX,20MOVY,AXCODEENDSENDSTART#6樓得分:0回復(fù)于:2009-09-1722:15:54DATASEGMENTYDW?DATAENDSCODESEGMENTASSUMECS:CODE,DS:DATASTART:MOVSI,OFFSETX//去x的偏移地址MOVAX,DS:[SI]//SI為x所在單元偏移地址MULAX,3SUBAX,20MOVY,AXCODEENDSENDSTART#8樓得分:0回復(fù)于:2009-09-1811:00:14好久不看書,有點(diǎn)問題,我改了下~!DATASEGMENTXDW1000HYDW?DATAENDSCODESEGMENTASSUMECS:CODE,DS:DATASTART:MOVAX,DATAMOVDS,AXMOVSI,OFFSETX//取x的偏移地址MOVAX,DS:[SI]//SI為x所在單元偏移地址MOVBX,3MULBXSUBAX,20MOVY,AXCODEENDSENDSTART#10樓得分:0回復(fù)于:2009-09-1813:28:32.586poptionsegment:use16data1segmentxdb30;varXdata1endscode1segmentassumeds:data1,cs:code1start:movd

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網(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ì)自己和他人造成任何形式的傷害或損失。

最新文檔

評(píng)論

0/150

提交評(píng)論