32位微機(jī)原理考試重點(diǎn)_第1頁(yè)
32位微機(jī)原理考試重點(diǎn)_第2頁(yè)
32位微機(jī)原理考試重點(diǎn)_第3頁(yè)
32位微機(jī)原理考試重點(diǎn)_第4頁(yè)
32位微機(jī)原理考試重點(diǎn)_第5頁(yè)
已閱讀5頁(yè),還剩17頁(yè)未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

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

文檔簡(jiǎn)介

1,原碼:0表示“+”,1表示“-”,數(shù)值位與真值數(shù)值位相同。反碼:正數(shù)的反碼與原碼表示相同。負(fù)數(shù)反碼符號(hào)位為1,數(shù)值位為原碼數(shù)值各位取反。補(bǔ)碼:正數(shù)的補(bǔ)碼表示與原碼相同。負(fù)數(shù)補(bǔ)碼的符號(hào)位為1,數(shù)值位等于反碼加1。因補(bǔ)=[X]反+1負(fù)數(shù)直接求補(bǔ):從最低位起,到出現(xiàn)第一個(gè)1以前原碼中的數(shù)字不變,以后逐位取反,但符號(hào)位不變。2,各種編碼方法的表數(shù)范圍:n+1位二進(jìn)制編碼x表示的整數(shù)范圍:原碼、反碼:-2n<x<2n補(bǔ)碼:-2nWx<2n8位原碼、反碼的表數(shù)范圍是-127~+127,補(bǔ)碼的表數(shù)范圍是-128~+127;16位原碼、反碼的表數(shù)范圍是-32767~+32767,補(bǔ)碼的表數(shù)范圍是-32768~+327673,原碼、反碼、補(bǔ)碼表示小結(jié):正數(shù)的原碼、反碼、補(bǔ)碼表示均相同,符號(hào)位為0,數(shù)值位同數(shù)的真值。零的原碼和反碼均有2個(gè)編碼,補(bǔ)碼只有1個(gè)編碼。負(fù)數(shù)的原碼、反碼、補(bǔ)碼表示均不同,符號(hào)位為1,數(shù)值位:原碼為數(shù)的絕對(duì)值反碼為每一位均取反碼補(bǔ)碼為反碼再在最低位+1由[X]補(bǔ)求[-X]補(bǔ):逐位取反(包括符號(hào)位),再在最低位+14,進(jìn)位標(biāo)志CF(CarryFlag):運(yùn)算結(jié)果的最高位產(chǎn)生進(jìn)位或借位時(shí),或循環(huán)指令也會(huì)影響該位。奇偶標(biāo)志PF(ParityFlag):運(yùn)算結(jié)果的低8位中所含1的個(gè)數(shù)為偶數(shù)個(gè),則該位置1。輔助進(jìn)位標(biāo)志AF(AuxiliaryCarryFlag):加減法運(yùn)算時(shí),如果第3位與第4位之間有進(jìn)位或借位產(chǎn)生,則該位置1。一般用于BCD運(yùn)算中是否進(jìn)行十進(jìn)制調(diào)整的判斷依據(jù)。零標(biāo)志ZF(ZeroFlag):運(yùn)算結(jié)果為零,則該位置1。符號(hào)標(biāo)志SF(SignFlag):與運(yùn)算結(jié)果符號(hào)位(即最高位)相同。溢出標(biāo)志OF(OverflowFlag):當(dāng)運(yùn)算結(jié)果超出結(jié)果寄存器的表達(dá)范圍時(shí),該位置1。跟蹤標(biāo)志TF(TrapFlag):控制CPU按調(diào)試的單步方式執(zhí)行指令。中斷允許標(biāo)志"(InterruptEnableFlag):控制CPU對(duì)外部可屏蔽中斷(INTR)的響應(yīng)。當(dāng)IF=1時(shí),允許CPU響應(yīng)外部可屏蔽中斷;當(dāng)IF=0時(shí),禁止響應(yīng)INTR,但不禁止CPU對(duì)非屏蔽中斷(NMI)的響應(yīng)。方向標(biāo)志DF(DirectionFlag):用于控制串操作指令中的地址變化方向。5,立即尋址方式:8086CPU指令系統(tǒng)中,有一部分指令所用的8位或16位操作數(shù)就在指令中提供,這種方式叫立即尋址方式。■例如:MOVAL,80H;將十六進(jìn)制數(shù)80H送入ALMOVAX,1090H;將1090H送AX,AH中為10H,AL中為90H寄存器尋址方式:如果操作數(shù)在CPU的內(nèi)部寄存器中,那么寄存器名可在指令中指出。這種尋址方式就叫寄存器尋址方式?!隼纾篒NCCX;將CX的內(nèi)容加1MOVAX,BX;將BX內(nèi)容送AX,BX內(nèi)容不變ROLAH,1;將AH中的內(nèi)容不帶進(jìn)位循環(huán)左移一位采用寄存器尋址方式的指令在執(zhí)行時(shí),操作就在CPU內(nèi)部進(jìn)行,不需要使用總線(xiàn)周期,執(zhí)行速度快。直接尋址方式:使用直接尋址方式,數(shù)據(jù)在存儲(chǔ)器中,存儲(chǔ)單元有效地址EA由指令直接指出,所以直接尋址是對(duì)存儲(chǔ)器進(jìn)行訪(fǎng)問(wèn)時(shí)最簡(jiǎn)單的方式例如:MOVAX,[2000H]寄存器間接尋址方式:采用寄存器間接尋址方式時(shí),操作數(shù)一定在存儲(chǔ)器中,存儲(chǔ)單元的有效地址由寄存器指出。這些寄存器可以是BX,BP,SI和DI,即有效地址等于其中某一個(gè)寄存器的值寄存器相對(duì)尋址方式(直接變址尋址):操作數(shù)有效地址EA為基址或變址寄存器內(nèi)容與指令中指定位移量之和,操作數(shù)在存儲(chǔ)器中??捎眉拇嫫骷捌鋵?duì)應(yīng)的默認(rèn)段情況與寄存器間接尋址方式相同。基址變址尋址方式:用這種尋址方式時(shí),操作數(shù)的有效地址等于基址寄存器的內(nèi)容加上一個(gè)變址寄存器的內(nèi)容,16位尋址時(shí),基址寄存器可用BX和BP,變址寄存器可用SI和DI;32位尋址時(shí),基址寄存器可用任何32位通用寄存器,變址寄存器可用除ESP以外的32位通用寄存器。用MOV指令實(shí)現(xiàn)兩內(nèi)存字節(jié)單元內(nèi)容的交換1、MOVBL,[2035H];MOVCL,[2045H];MOV[2045H],BL;MOV[2035H],CL;2、MOVAL,[2035H];XCHGAL,[2045H];MOV[2035H],AL;測(cè)試某狀態(tài)寄存器(端口號(hào)27H)的第2位是否為1INAL,27HTESTAL,00000100BJNZERROR ;若第2位為1,轉(zhuǎn)ERROR處理設(shè)數(shù)據(jù)段: ADDR1DF1234567890ABH則 LESEBX,ADDR1指令執(zhí)行后 (ES)=1234H, (EBX)=567890ABH【例題】實(shí)現(xiàn)兩個(gè)無(wú)符號(hào)雙字加法運(yùn)算。設(shè)目的操作數(shù)存放在DX和AX寄存器中,其中DX存放高位字。源操作數(shù)存放在BX、CX中,其中BX存放高位字。如指令執(zhí)行前(DX)=0002H,(AX)=0F365H,(BX)=0005H,(CX)=0E024H指令序列為ADD AX,CXADCDX,BX則第一條指令執(zhí)行后,(AX)=0D389H,SF=1,ZF=0,CF=1,OF=0第二條指令執(zhí)行后,①X)=0008H,SF=0,ZF=0,CF=0,OF=0【例題】比較AL的內(nèi)容數(shù)值大小。CMPAL,100;(AL)-100JBBELOW;(AL)<100,轉(zhuǎn)至UBELOW處執(zhí)行SUBAL,100;(AL)>=100,(AL)—100fALINCAH;(AH)+—AHBELOW:…【例題】設(shè)x、y、z均為雙字長(zhǎng)數(shù),它們分別存放在地址為X,X+2;Y,Y+2;Z,Z+2的存儲(chǔ)單元中,存放時(shí)高位字在高地址中,低位字在低地址中,編寫(xiě)指令序列實(shí)現(xiàn)w-x+y+24-z,并用w和w+2單元存放運(yùn)算結(jié)果。MOVAX,XMOVDX,X+2ADDAX,YADCDX,Y+2ADDAX,24ADCDX,0SUBAX,ZSBBDX,Z+2MOVW,AXMOVW+2,DX【例題】無(wú)符號(hào)數(shù)0A3H與11H相乘。MOVAL,0A3H;(AL)=0A3HMOVBL,11H ;(BL)=11HMULBL;(AX)=0AD3H【例題】若(AL)=0B4H,(BL)=11H,求執(zhí)行指令I(lǐng)MULBL和MULBL后的乘積值。(AL)=0B4H為無(wú)符號(hào)數(shù)的180D,帶符號(hào)數(shù)的-76D(BL)=11H為無(wú)符號(hào)數(shù)的17D,帶符號(hào)數(shù)的17D則執(zhí)行IMULBL的結(jié)果為(AX)=0FAF4H=-1292D,CF=OF=1執(zhí)行MULBL的結(jié)果為(AX)=0BF4H=3060D,CF=OF=1【例題】寫(xiě)出實(shí)現(xiàn)無(wú)符號(hào)數(shù)0400H/0B4H運(yùn)算的程序段。MOVAX,0400H;(AX)=0400HMOVBL,0B4H;(BL)=0B4HDIVBL ;商(41)=05H,余數(shù)(AH)=7CH【例題】寫(xiě)出實(shí)現(xiàn)有符號(hào)數(shù)0400H/0B4H運(yùn)算的程序段。MOVAX,0400H;(AX)=0400HMOVBL,0B4H;(BL)=0B4HIDIVBL;(AL)=0F3H,(AH)=24H算術(shù)運(yùn)算綜合舉例【例3-36】計(jì)算:(C—120+A*B)/C,保存商和余數(shù)到X和Y中,其中A、B、C、X和Y都是有符號(hào)的字變量。編制程序如下:MOVAX,C

SUBAX,120CWDMOVCX,DXMOVBX,AX;(CX,BX)—(DX,AX)MOVAX,AIMULB; ①X,AX)-A*BADDAX,BX;計(jì)算32位二進(jìn)制之和ADCDX,CXIDIVC;AX是商,DX是余數(shù)MOVX,AX;保存商到指定單元MOVY,DX課堂練習(xí)計(jì)算:(V-(X*Y+Z-540))/X,其中X,Y,Z,V均為16位帶符號(hào)數(shù),已分別裝入X,Y,Z,V單元中,上式計(jì)算結(jié)果的商存入AX,余數(shù)存入DX寄存器。編制程序如下:mov ax,ximul ymov cx,axmov bx,dxmov ax,zcwdadd cx,axadcbx,dxsub cx,540TOC\o"1-5"\h\zsbb bx,0mov ax,vcwdsub ax,cxsbb dx,bxidiv x【例題】壓縮BCD碼的加法運(yùn)算。MOVAL,MOVAL,68H;(AL)=68H,表示壓縮BCD碼68MOVBL,28HADDAL,BLDAA;(BL)MOVBL,28HADDAL,BLDAA;二進(jìn)制加法:(AL)=68H+28H=90H;十進(jìn)制調(diào)整:(AL)=96H;實(shí)現(xiàn)壓縮BCD碼加法:68+28=96【例題】壓縮BCD碼的減法運(yùn)算。MOVAL,68H ;(AL)=68H,表示壓縮BCD碼68MOVBL,28H ;(BL)=28H,表示壓縮BCD碼28SUBAL,BL;二進(jìn)制減法:(AL)=68H—28H=40HDAS ;十進(jìn)制調(diào)整:(AL)二40H;實(shí)現(xiàn)壓縮BCD碼減法:68—28=40【例題】ANDAL,77H;將AL中第3位和第7位清零。ANDAX,BX;兩個(gè)寄存器邏輯與

ANDAL,11110000B;屏蔽AL寄存器低4位ANDMEM-BYTE,AL;存儲(chǔ)單元和寄存器邏輯與例題】ORAL,88H ;將AL寄存器中第3位和第7位置1ORBX,0C000H ;將BX中第15位和第14位置1【例題】邏輯非運(yùn)算。MOVAX,878AH;(MOVAX,878AH;(AX)=878AHNOTAX;(AX)=7875HNOTWORDPTR[1000H];將1000H和1001H兩單;元中的內(nèi)容求反碼,再送回這兩單元中【例題】測(cè)試AX中的第12位是否為0,不為0則轉(zhuǎn)L。TESTAX,1000HJNEL/JNZL例3-54:(BX)=84F1H,把(BX)中的16位數(shù)每4位壓入堆棧MOVCH,2 ;循環(huán)次數(shù)MOVCL,4 ;移位次數(shù)NEXT:ROLBX,CLMOVAH,BLANDAH,0FHROLBX,CLMOVAL,BLANDAL,0FHPUSHAXDECCHJNZNEXT例題:設(shè)BLOCK數(shù)據(jù)塊中存儲(chǔ)有正數(shù)和負(fù)數(shù),試編寫(xiě)程序?qū)⒄?fù)數(shù)分開(kāi),分別存放在Dplus和Dminus開(kāi)始的存儲(chǔ)區(qū)域movsi,offsetblockmovdi,offsetdplusmovbx,offsetdminusmovax,dsmoves,ax ;數(shù)據(jù)都在一個(gè)段中,所以設(shè)置es=dscldgo_on:lodsbtestal,80hjnzminusstosbjmpagainminus:xchgbx,distosbcldgo_on:lodsbtestal,80hjnzminusstosbjmpagainminus:xchgbx,distosbxchgbx,diagain:loopgo_on;從block取出一個(gè)數(shù)據(jù);檢測(cè)符號(hào)位,判斷是正是負(fù);符號(hào)位為1,是負(fù)數(shù),轉(zhuǎn)向minus;符號(hào)位為0,是正數(shù),存入dplus;程序轉(zhuǎn)移到again處繼續(xù)執(zhí)行;把負(fù)數(shù)存入dminus;字節(jié)數(shù)減1

⑥例:檢驗(yàn)一段被傳送過(guò)的數(shù)據(jù)是否與源串完全相同,程序如下:CLDMOVCX,100初始化MOVSI,2400HMOVDI,1200H;REPECMPSB;串比較,直到ZF=0或CX=0JZEQQDECSIMOVBX,SI;第一個(gè)不相同字節(jié)偏移地址一BXMOVAL,[SI];第一個(gè)不相同字節(jié)內(nèi)容一ALJMPSTOPEQQ:MOVBX,0 ;兩串完全相同,BX=0STOP:HLT?:?例題:在某字符串中查找是否存在“$”字符。若存在,則將“$”字符所在地址送入BX寄存器中,否則將BX寄存器清“0”。程序如下:CLD ;清除方向標(biāo)志DF100;字串長(zhǎng)度;關(guān)鍵字一AL;找關(guān)鍵字100;字串長(zhǎng)度;關(guān)鍵字一AL;找關(guān)鍵字;判斷是否找到;關(guān)鍵字所在地址一BX;未找到,0-BXMOVCXMOV AL,‘$‘REPNESCASBJNZZERDECDIMOV BX,DIZER:JMPST0MOVBX,ZER:ST0:HLT例題:比較兩個(gè)長(zhǎng)度為count的字符串是否完全相同,若相同置al=0,不相同置al=0ffhmovsi,offsetstring1movdi,offsetstring2movcx,countcldmoval,0ffh;標(biāo)記初始為不同moval,0;字符串相等,設(shè)置00houtput:movresult,al;輸出結(jié)果標(biāo)記例3.61若AL最高位為0,設(shè)置(AH)=0;若AL最高位為1,則設(shè)置(AH)=FFH。即編程實(shí)現(xiàn)符號(hào)擴(kuò)展指令CBW功能方法一:用JZ指令實(shí)現(xiàn)。testal,80h;測(cè)試最高位jzset0;最高位為0則轉(zhuǎn)到set0movah,0ffh;最高位為1,則將AH置0FFHjmpnext;無(wú)條件轉(zhuǎn)向nextset0:movah,0next:…:?方法二:用JNZ指令實(shí)現(xiàn)。testal,80h;測(cè)試最高位jnzsetl ;最高位為1則轉(zhuǎn)到setlmovah,0h;最高位為0,則將AH置0jmpnext ;無(wú)條件轉(zhuǎn)向nextset1:movah,0ffhnext:…例3.62計(jì)算IX—Yl,X和Y是存放于X單元和Y單元的16位操作數(shù),結(jié)果存入resultmovax,Xsubax,Y;X—Y送AX,下面求絕對(duì)值jnsnext;絕對(duì)值為正,不需處理,轉(zhuǎn)向next保存結(jié)果negax;絕對(duì)值為負(fù),進(jìn)行求補(bǔ)得到絕對(duì)值next:movresult,ax;保存結(jié)果例3.63編寫(xiě)程序段判斷DX中1的個(gè)數(shù)xoral,alagain:testdx,offffh;等價(jià)于cmpbx,0jenextshldx,1jncagainincaljmpagainnext:…;AL保存1的個(gè)數(shù)例3.64比較AX和BX中兩個(gè)無(wú)符號(hào)數(shù)的大小,將較小的存放到AX中cmpax,bx;比較ax和bxJBnext ;若ax<bx,則轉(zhuǎn)移到nextxchgax,bx;若axNbx,則兩者交換next:…例3.65比較AX和BX中兩個(gè)有符號(hào)數(shù)的大小,將較小的存放到AX中cmpax,bx;比較ax和bxJLnext;若ax<bx,則轉(zhuǎn)移到nextxchgax,bx;若axNbx,則兩者交換next:…例3.66a、b是雙精度數(shù),分別存于DX,AX及BX,CX中,a>b時(shí)轉(zhuǎn)L1,否則轉(zhuǎn)L2cmpdx,bx;比較dx和bxJGl1;若dx>bx,則轉(zhuǎn)移到l1JLl2;若dx<bx,則轉(zhuǎn)移到l2cmpax,cx;若dx=bx,則比較ax和cxJAl1;若ax>cx,則轉(zhuǎn)移到l1l2: ……l1: ……例3-67:求首地址為ARRAY的n個(gè)字之和,結(jié)果存入sum單元

;將計(jì)數(shù)值n;將計(jì)數(shù)值n送CX;累加器AX清零DX清零SI清零xorax,axxordx,dxxorsi,siagain:addax,array[si];將下一個(gè)數(shù)據(jù)累加到AXadcdx,0 ;將產(chǎn)生的進(jìn)位累加到DXSI加2SI加2,指向下一個(gè)數(shù)據(jù);若CX不為0,繼續(xù)循環(huán);結(jié)果低16位送sum單元loop againmov sum, ax例4.21】口(1)編寫(xiě)程序把BX中的二進(jìn)制數(shù)以十六進(jìn)制數(shù)的形式顯示在屏幕上。CODESEGMENTASSUMECS:CODESTART:MOVCH,4;設(shè)置循環(huán)初值為4ROTAT:MOVCL,4ROLBX,CL;BX循環(huán)左移4位MOVAL,BLANDAL,0FH;把最右面要顯示的4位取到AL中ADDAL,30H ;將其加30H轉(zhuǎn)換為ASCII碼CMPAL,3AH;判斷是否大于9JLPRINT;“0”?“9”,轉(zhuǎn)向PRINTIT直接顯示ADDAL,7H ;“A”?“F”,ASCII值再加7PRINT:MOVDL,AL;2號(hào)功能調(diào)用,顯示該字符MOVAH,2INT21HDECCHJNZROTAT;若循環(huán)次數(shù)未到,則繼續(xù)循環(huán)MOVAH,4CHINT21H;程序結(jié)束,返回DOSCODEENDSENDSTART【例4.24]數(shù)據(jù)段中從BUF單元開(kāi)始的數(shù)據(jù)區(qū)內(nèi)存放著一組有符號(hào)字?jǐn)?shù)據(jù),其中第一個(gè)單元存放數(shù)組元素個(gè)數(shù),請(qǐng)編一程序求出該數(shù)組中的最大值、最小值及總和,并分別存入MAX、MIN、SUM單元中DATASEGMENTBUFDW12DW5,-4,0,3,100,-51,69,-21,-5,255,33,150TOC\o"1-5"\h\zMAX DW ?MIN DW ?SUM DW ?DATAENDSCODESEGMENTASSUMECS:CODE,DS:DATA

START:MOVAX,DATAMOV DS,AXMOV SI,2 ;初始化SI、AX、BX、DXMOV AX,BUF[SI]MOV BX,BUF[SI]MOV DX,BUF[SI]MOVCX,BUF;初始化循環(huán)計(jì)數(shù)器CXDECCXL: ADDSI,2CMPBX,BUF[SI];比較JLLESSCMPDX,BUF[SI]JGGREATERJMPSLESS:MOVBX,BUF[SI];大數(shù)送入BXJMPSGREATER:MOVDX,BUF[SI];小數(shù)送入DXS: ADDAX,BUF[SI] ;求累加和,送入AXLOOPLMOVMAX,BX;最大值、最小值及總和分別存MOVMIN,DX ;入MAX、MIN、SUM單元MOVSUM,AXMOVAH,4CHINT21HCODEENDSENDSTART例4.25】字符串STRING以回車(chē)符作為結(jié)束標(biāo)志,編程統(tǒng)計(jì)該字符串的長(zhǎng)度DATASEGMENTLENDB?STRINGDB‘computerscienceandtechnology’,0DHDATAENDSCODESEGMENTASSUMECS:CODE,DS:DATA,ES:DATASTART:MOVAX,DATAMOVMOVLEAMOVMOVAGAIN:MOVMOVLEAMOVMOVAGAIN:;串的首地址送入DI;串的首地址送入DI;置串長(zhǎng)度初值為0;串結(jié)束標(biāo)志送入AL;搜索串DI,STRINGDL,0AL,0DHSCASBJEDONEINCDL;找到結(jié)束標(biāo)志,轉(zhuǎn)向DONE結(jié)束;否則,串長(zhǎng)度加JEDONEINCDLJMPAGAINDONE:MOVLEN,DL;串長(zhǎng)度送入LENMOVAH,4CHINT21HCODEENDSENDSTART【例4.20】從鍵盤(pán)接收兩個(gè)有符號(hào)十進(jìn)制數(shù),并求它們的和,再將結(jié)果以有符號(hào)十進(jìn)制數(shù)的形式在屏幕上顯示輸出。DATASEGMENTMES1DB‘inputthefirstnumber:$’MES2DB‘inputthesecondnumber:$’MES3DB‘thesumis:$’XDW?YDW?SUMDW?DATAENDSCODESEGMENTASSUMECS:CODE,DS:DATASTART:MOVAX,DATAMOVDS,AXMOVDX,OFFSETMES1MOVAH,9INT21H;顯示輸入提示信息CALLREAD ;調(diào)用子程序區(qū)£A口,輸入第一個(gè)數(shù)MOVX,AX;將輸入的第一個(gè)數(shù)送入變量XCALLCRLF ;調(diào)用子程序CRLFMOVDX,OFFSETMES2MOVAH,9INT21H;顯示輸入提示信息CALLREAD ;調(diào)用子程序區(qū)£A口,輸入第二個(gè)數(shù)MOVY,AX;將輸入的第二個(gè)數(shù)送入變量YADDAX,X ;兩數(shù)相加MOVSUM,AX;和送到SUM,入口參數(shù)MOVDX,OFFSETMES3MOVAH,9INT21H;顯示輸出提示信息CALLWRITE;調(diào)用子程序WRITE,顯示結(jié)果MOVAH,4CHINT21HREADPROCNEAR;輸入有符號(hào)十進(jìn)制數(shù)的子程序READPUSHBXPUSHCXPUSHDXXOR BX,BX ;用BX保存結(jié)果XOR CX,CX ;正負(fù)標(biāo)志,0為正,-1為負(fù)MOVAH,1 ;輸入一個(gè)字符INT21HCMP AL,‘+’ ;比較是否為“+”JZREAD1;是“+”,轉(zhuǎn)向READ1繼續(xù)輸入CMP AL,‘-’ ;否則,比較是否為“-”JNZREAD2;不是“十”和“一”,轉(zhuǎn)向READ2MOVCX,-1 ;是“-”,設(shè)置-1標(biāo)志Read1:…Read2:…Read3:…Read4:…READENDPREAD1:MOVAH,1;繼續(xù)輸入字符INT21HREAD2:CMPAL,‘0’;是否在0?9之間JBREAD3;數(shù)據(jù)結(jié)束CMPAL,‘9’JAREAD3SUB AL,30H;在0?9之間,轉(zhuǎn)換為對(duì)應(yīng)數(shù)值SHLBX,1;用移位指令實(shí)現(xiàn)已輸入數(shù)值乘10MOVDX,BX;即:(BX)—(BX)X10SHL BX,1SHL BX,1ADD BX,DXMOV AH,0 ;已輸入數(shù)值乘10+新輸入值A(chǔ)DD BX,AX ;相加JMPREAD1;繼續(xù)輸入字符READ3:CMPCX,0;判斷該數(shù)值正負(fù)JZREAD4;是正數(shù),轉(zhuǎn)向READ4NEGBX;是負(fù)數(shù),進(jìn)行求補(bǔ)READ4:MOVAX,BX;出口參數(shù),數(shù)值送入AXPOPDXPOPCXPOPBXRET ;子程序返回READENDPWRITEPROCNEAR;顯示有符號(hào)十進(jìn)制數(shù)的子程序WRITEPUSHAXPUSHBXPUSHDXMOVAX,SUM;取出要顯示的數(shù)據(jù)TESTAX,AX;判斷零、正數(shù)或負(fù)數(shù)JNZWRITE1MOVDL,‘0’;是零,顯示“0”后退出MOVAH,2INT21HJMPWRITE5WRITE1:JNS WRITE2; ;是正數(shù),轉(zhuǎn)向WRITE2MOVBX,AX;是負(fù)數(shù),AX數(shù)據(jù)暫存于BX以免被修改MOVDL,‘-’ ;顯示“-”MOVAH,2INT21HMOVAX,BX ;恢復(fù)AX數(shù)據(jù)NEG AX ;數(shù)據(jù)求補(bǔ)(求絕對(duì)值)WRITE2:MOVBX,10PUSHBX ;10壓入堆棧,作為退出標(biāo)志W(wǎng)RITE3:CMPAX,0;數(shù)據(jù)(商)是否為零JZWRITE4;為零轉(zhuǎn)向顯示SUBDX,DX;擴(kuò)展被除數(shù)(DX,AX),DX清零DIV BX ;數(shù)據(jù)除以10:(DX,AX):10ADDDL,30H ;余數(shù)(0?9)轉(zhuǎn)換為ASCII碼PUSHDX ;數(shù)據(jù)各位先低位后高位壓入堆棧JMPWRITE3WRITE4:POPDX;數(shù)據(jù)各位先高位后低位彈出堆棧CMPDL,10 ;是結(jié)束標(biāo)志10,則退出JEWRITE5MOVAH,2 ;進(jìn)行顯示INT21HJMPWRITE4WRITE5:POPDXPOPBXPOPAXRET ;子程序返回WRITEENDPCRLFPROCNEAR;使光標(biāo)回車(chē)換行的子程序PUSHAXPUSHDXMOVAH,2MOVDL,0DHINT21H ;顯示回車(chē)符MOVDL,0AHINT21H ;顯示換行符POPDXPOPAXRETCRLFENDP

CODEENDSENDSTART(1)設(shè)計(jì)要求:在源程序中設(shè)置數(shù)據(jù)段、堆棧段及代碼段。在數(shù)據(jù)段中定義8個(gè)字節(jié)數(shù)據(jù),把這些數(shù)據(jù)轉(zhuǎn)換成十六進(jìn)制數(shù)的ASCII碼存在上述數(shù)據(jù)之后,然后在屏幕上顯示這些數(shù)據(jù)。顯示數(shù)據(jù)用DOS功能2號(hào)調(diào)用,每個(gè)數(shù)據(jù)用空格分隔。1:NAMEEX1;程序命名偽指令,程序名為EX12:PAGE50,70;列表文件每頁(yè)50行每行70字符3:;4:5:6:7:1:NAMEEX1;程序命名偽指令,程序名為EX12:PAGE50,70;列表文件每頁(yè)50行每行70字符3:;4:5:6:7:DATSEGMENTPARA’DAT’A1DB12H,34H,56H,78H,9AHDBB1=$-A10BCH,0DEH,0F0H;賦值偽指令,求A1(符號(hào)地址)到當(dāng)前匯編指針地址($)的字節(jié)數(shù)8:9:B2=B1*2;求2倍B1A2DBB2DUP(?);數(shù)據(jù)重復(fù)定義偽指令,定義ASCII碼字符區(qū)10:11:;11:12:13:14:15:16:17:18:19:20:21:DATENDSSTACSEGMENTPARASTACK’STA’STA1DW100DUP(?)STACENDSCODESEGMENTPARA'CODE’ASSUMECS:ASSUMESS:STARPROCFARPUSHDSXORAX,AXCODE,DS:DATSTAC,ES:DAT22:PUSHAX23:MOVAX,DAT24:MOVDS,AX;段寄存器賦值25:MOVES,AX26:LEASI,A1;取有效地址27:LEADI,A228:MOVCX,B1;循環(huán)次數(shù)29:30:31:32:33:G1:MOVBL,2MOVMOVPUSHMOVAL,BH,CXCL,[SI]AL;每個(gè)字節(jié)處理兩次;被處理的字節(jié)送AL;AL暫存至UBH34:RORAL,CL;循環(huán)右移4位35:POPCX36:G2:ANDAL,0FH;取AL低4位,高4位清零37:ADD AL,30H38:CMPAL,3AHJB AA39:ADDAL,740:AA:MOV[DI],AL;處理完畢送目標(biāo)地址41:INCDI42:MOVAL,BH43:DECBL44:JNZG245:INCSI46:LOOPG1 ;CX-1,若CXR0則返回G147:MOVSIOFFSETA2;A2的偏移地址送SI寄存器48:MOVCX,B249:CALLP150:RET顯示ASCII碼字符子程序如下:51:P1PROC52:MOVBL,253:G:MOVDL,[SI]54:MOVAH,255:INT21H56:INCSI57:DECBL58:JNZT59:MOVDL,/’ ;加空格60:MOVAH,261:INT21H62:MOVBL,263:T:LOOPG;cx-1循環(huán)處理64: RET65:P1ENDP66:CODEENDS67: ENDSTAR例9-3】利用8255A的A口方式0與微型打印機(jī)相連,將內(nèi)存緩沖區(qū)BUFF中的字符打印輸出。試完成相應(yīng)的軟硬件設(shè)計(jì)。(CPU為8088)■說(shuō)明:?由PC0充當(dāng)打印機(jī)的選通信號(hào),通過(guò)對(duì)PC0的置位/復(fù)位來(lái)產(chǎn)生選通。同時(shí),由PC7來(lái)接收打印機(jī)發(fā)出的“BUSY”信號(hào)作為能否輸出的查詢(xún)。8255A的控制字為:10001000即88HA口方式0,輸出;C口高位方式0輸入,低位方式0輸出PC0置位:00000001 即01HPC0復(fù)位:00000000 即00H8255A的4個(gè)口地址分別為:00H,01H,02H,03H。DADASEGMENTBUFFDB'Thisisaprintprogram!','$'DATAENDSCODESEGMENTASSUMECS:CODE,DS:DATASTART:MOVAX,DATAMOVDS,AXMOVSI,OFFSETBUFFMOVAL,88H ;8255A初始化,A口方式0,輸出OUT03H,AL;C口高位方式0輸入,低位方式0輸出MOVAL,01H;OUT03H,AL;使PC0置位,即使選通無(wú)效WAIT:INAL,02HTESTAL,80H;檢測(cè)PC7是否為1即是否忙JNZWAIT;為忙則等待MOVAL,[SI]CMPAL,'$';是否結(jié)束符JZDONE;是則輸出回車(chē)OUT00H,AL;不是結(jié)束符,則從A口輸出MOVAL,00HOUT03H,ALMOVAL,01HOUT03H,AL;產(chǎn)生選通信號(hào)INCSI;修改指針,指向下一個(gè)字符JMPWAITDONE:MOVAL,0DHOUT00H,AL;輸出回車(chē)符MOVAL,00HOUT03H,ALMOVAL,01HOUT03H,AL;產(chǎn)生選通WAIT1:INAL,02HTESTAL,80H;檢測(cè)PC7是否為1JNZWAIT1;為忙則等待MOVAL,0AHOUT00H,AL;輸出換行符MOVAL,00HOUT03H,ALMOVAL,01HOUT03H,ALMOVAH,4CHINT21HCODEENDSENDSTART利用8086、8255A、輸入開(kāi)關(guān)、發(fā)光二極管,完成如下功能8255A的A口讀取開(kāi)關(guān)K1狀態(tài),B口連接發(fā)光二極管L1~L8。設(shè)開(kāi)關(guān)閉合時(shí)讀入的值為1,開(kāi)關(guān)斷開(kāi)時(shí)讀入的值為0;端口輸出為0時(shí)燈亮。若開(kāi)關(guān)K1=0,發(fā)光二極管全滅;若開(kāi)關(guān)K1=1,發(fā)光二極管從左向右循環(huán)點(diǎn)亮;(1)若用IOYa(有效時(shí)A15-A4的狀態(tài)為000000101001)選通8255A,用8086的A0A1信號(hào)進(jìn)行口選擇,給出8255A的四個(gè)口地址。(2)為完成上述實(shí)驗(yàn)功能,請(qǐng)?jiān)趫D上畫(huà)出接線(xiàn)圖。(3)編寫(xiě)匯編程序,完成上述功能。(主程序可調(diào)用延時(shí)1秒子程序DELAY和按任意鍵退出子程序BREAK,假定這兩個(gè)子程序已存在,不需編寫(xiě))(1)8255A的四個(gè)口地址:290H,291H,292H,293H(2)連線(xiàn)D7-D0PC7-PC0ZRD PA7AO PA0A1PBOPBD7-D0PC7-PC0ZRD PA7AO PA0A1PBOPB1 PB6PB7D7-D0ZRD北VRA0A18086CPUA4Al5MIOMY_STACKSEGMENTDB100DUP(?)MY_STACKENDSMY_DATASEGMENTTOC\o"1-5"\h\zP8255_A DW 0290HP8255_B DW 0291HP8255_C DW 0292HP8255_MDW0293HLADB?MY_DATAENDS

MY_CODESEGMENTASSUMECS:MY_CODE,DS:MY_DATA,SS:MY_STACKSTART:MOVAX,MY_DATAMOVDS,AXMOVDX,P8255_M ;設(shè)置8255控制字MOVAL,90H ;10010000OUTDX,ALMOVLA,FEH ;初值11111110AA:MOVDX,P8255_A;讀取A口狀態(tài)INAL,DXTESTAL,01HJZALL1 ;K1=0跳轉(zhuǎn)ALL1MOVAL,LAROLAL,1MOVLA,ALMOVDX,P8255_BOUTDX,AL ;輸出CALLDELAYCALLBREAKJMPAAALL1:MOVDX,P8255_BMOVAL,0FFH ;燈全滅OUTDX,ALCALLDELAYCALLBREAKJMPAAMY_CODEENDSENDSTART?:?【例10-1]若要查詢(xún)8251A接收器是否準(zhǔn)備好,則可用下列程序段完成MOVDX,0FFF2H;狀態(tài)口L:INAL,DX;讀狀態(tài)口;查Dl=1;查Dl=1?準(zhǔn)備好了嗎?;未準(zhǔn)備好,則等待;數(shù)據(jù)口;已準(zhǔn)備好則輸入數(shù)據(jù)JZLMOVDX,0FFF0HINAL,DX異步模式下的初始化程序舉例?設(shè)8251A工作在異步模式,波特率系數(shù)(因子)為16,7個(gè)數(shù)據(jù)位/字符,偶校驗(yàn),2個(gè)停止位,發(fā)送、接收允許,設(shè)端口地址為00E2H和00E4H。完成初始化程序?根據(jù)題目,可確定模式字為:11111010B即FAH,控制字為:00110111B 即37H,初始化程序如下:;送模式字;異步,7位;送模式字;異步,7位/字符,偶校驗(yàn),2個(gè)停止位;設(shè)置控制字,使發(fā)送、接收允許,清出錯(cuò)標(biāo)志MOVDX,00E2HOUTDX,ALMOVAL,37H

?OUTDX,AL;有效同步模式下的初始化程序舉例?:?設(shè)端口地址為52H,采用內(nèi)同步方式,2個(gè)同步字符(設(shè)同步字符為16H),偶校驗(yàn),7位數(shù)據(jù)位/字符?根據(jù)題目,可確定模式字為:00111000B即38H,控制字為:10010111B即97H。它使8251A對(duì)同步字符進(jìn)行檢索;同時(shí)使?fàn)顟B(tài)寄存器中的3個(gè)出錯(cuò)標(biāo)志復(fù)位;使據(jù)傳輸。初始化程序如下:MOVAL,38HOUT52H,AL據(jù)傳輸。初始化程序如下:MOVAL,38HOUT52H,ALMOVAL,16HOUT52H,ALOUT52H,ALMOVAL, 97HOUT52H,AL;設(shè)置模式字,同步,用2個(gè)同步字符,;7個(gè)數(shù)據(jù)位,偶校驗(yàn);送同步字符16H;設(shè)置控制字,使發(fā)送器和接收器啟動(dòng)利用狀態(tài)字進(jìn)行編程的舉例?先對(duì)8251A進(jìn)行初始化,然后對(duì)狀態(tài)字

溫馨提示

  • 1. 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶(hù)所有。
  • 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ì)用戶(hù)上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶(hù)上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶(hù)因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。

評(píng)論

0/150

提交評(píng)論