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è),還剩15頁(yè)未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

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

文檔簡(jiǎn)介

1、1,原碼:0表示 “+”,1表示“”,數(shù)值位與真值數(shù)值位相同。反碼:正數(shù)的反碼與原碼表示相同。負(fù)數(shù)反碼符號(hào)位為1,數(shù)值位為原碼數(shù)值各位取反。補(bǔ)碼:正數(shù)的補(bǔ)碼表示與原碼相同。負(fù)數(shù)補(bǔ)碼的符號(hào)位為1,數(shù)值位等于反碼加1。 X補(bǔ)= X反+1 負(fù)數(shù)直接求補(bǔ): 從最低位起,到出現(xiàn)第一個(gè)1以前原碼中的 數(shù)字不變,以后逐位取反,但符號(hào)位不變。2,各種編碼方法的表數(shù)范圍: n+1位二進(jìn)制編碼x表示的整數(shù)范圍: 原碼、反碼:-2nx2n 補(bǔ)碼:-2nx2n8位原碼、反碼的表數(shù)范圍是-127+127,補(bǔ)碼的表數(shù)范圍是-128+127;16位原碼、反碼的表數(shù)范圍是-32767+32767,補(bǔ)碼的表數(shù)范圍是-32768

2、+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)位),再在最低位+1 4,進(jìn)位標(biāo)志CF(Carry Flag):運(yùn)算結(jié)果的最高位產(chǎn)生進(jìn)位或借位時(shí),或循環(huán)指令也會(huì)影響該位。奇偶標(biāo)志PF(Parity Flag):運(yùn)算結(jié)果的低8位中所含1的個(gè)數(shù)為偶數(shù)個(gè),則該位置1。輔助進(jìn)位標(biāo)志AF(Auxiliary Carry Flag):加減法運(yùn)算時(shí),如果第

3、3位與第4位之間有進(jìn)位或借位產(chǎn)生,則該位置1。一般用于BCD運(yùn)算中是否進(jìn)行十進(jìn)制調(diào)整的判斷依據(jù)。零標(biāo)志ZF(Zero Flag):運(yùn)算結(jié)果為零,則該位置1。符號(hào)標(biāo)志SF(Sign Flag):與運(yùn)算結(jié)果符號(hào)位(即最高位)相同。溢出標(biāo)志OF(Overflow Flag):當(dāng)運(yùn)算結(jié)果超出結(jié)果寄存器的表達(dá)范圍時(shí),該位置1。 跟蹤標(biāo)志TF(Trap Flag):控制CPU按調(diào)試的單步方式執(zhí)行指令。中斷允許標(biāo)志IF(Interrupt Enable Flag):控制CPU對(duì)外部可屏蔽中斷(INTR)的響應(yīng)。當(dāng)IF=1時(shí),允許CPU響應(yīng)外部可屏蔽中斷;當(dāng)IF=0時(shí),禁止響應(yīng)INTR,但不禁止CPU對(duì)非屏蔽

4、中斷(NMI)的響應(yīng)。方向標(biāo)志DF(Direction Flag):用于控制串操作指令中的地址變化方向 。 5,立即尋址方式:8086 CPU指令系統(tǒng)中,有一部分指令所用的8位或16位操作數(shù)就在指令中提供,這種方式叫立即尋址方式。n 例如:MOV AL,80H;將十六進(jìn)制數(shù)80H送入ALMOV AX,1090H;將1090H送AX,AH中為10H,AL中為90H寄存器尋址方式:如果操作數(shù)在CPU的內(nèi)部寄存器中,那么寄存器名可在指令中指出。這種尋址方式就叫寄存器尋址方式。n 例如:INCCX;將CX的內(nèi)容加1 MOVAX, BX ;將BX內(nèi)容送AX,BX內(nèi)容不變ROLAH,1;將AH中的內(nèi)容不帶

5、進(jìn)位循環(huán)左移一位采用寄存器尋址方式的指令在執(zhí)行時(shí),操作就在CPU內(nèi)部進(jìn)行,不需要使用總線周期,執(zhí)行速度快。直接尋址方式:使用直接尋址方式,數(shù)據(jù)在存儲(chǔ)器中,存儲(chǔ)單元有效地址EA由指令直接指出,所以直接尋址是對(duì)存儲(chǔ)器進(jìn)行訪問(wèn)時(shí)最簡(jiǎn)單的方式例如:MOV AX, 2000H 寄存器間接尋址方式:采用寄存器間接尋址方式時(shí),操作數(shù)一定在存儲(chǔ)器中,存儲(chǔ)單元的有效地址由寄存器指出。這些寄存器可以是BX,BP,SI和DI,即有效地址等于其中某一個(gè)寄存器的值寄存器相對(duì)尋址方式(直接變址尋址): 操作數(shù)有效地址EA為基址或變址寄存器內(nèi)容與指令中指定位移量之和,操作數(shù)在存儲(chǔ)器中??捎眉拇嫫骷捌鋵?duì)應(yīng)的默認(rèn)段情況與寄存器

6、間接尋址方式相同?;纷冎穼ぶ贩绞? 用這種尋址方式時(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、MOV BL, 2035H; MOV CL, 2045H; MOV 2045H, BL; MOV 2035H, CL;2、MOV AL, 2035H; XCHG AL, 2045H; MOV 2035H, AL; 測(cè)試某狀態(tài)寄存器(端口號(hào)27H)的第2位是否為1 INAL,

7、27H TESTAL, 00000100B JNZERROR ;若第2位為1,轉(zhuǎn)ERROR處理設(shè)數(shù)據(jù)段:ADDR1 DF 1234567890ABH 則 LES EBX,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,CX ADC DX,BX 則第一條指令執(zhí)行后,(AX)=0D389H,SF=1,

8、ZF=0,CF=1,OF=0 第二條指令執(zhí)行后,(DX)=0008H,SF=0,ZF=0,CF=0,OF=0 【例題】比較AL的內(nèi)容數(shù)值大小。 CMPAL,100;(AL)100 JBBELOW ;(AL)<100,轉(zhuǎn)到BELOW處執(zhí)行 SUBAL,100;(AL)>=100,(AL)100AL INCAH ;(AH)+1AH BELOW:【例題】設(shè)x、y、z均為雙字長(zhǎng)數(shù),它們分別存放在地址為X,X+2;Y,Y+2;Z,Z+2的存儲(chǔ)單元中,存放時(shí)高位字在高地址中,低位字在低地址中,編寫指令序列實(shí)現(xiàn) w x+y+24 z,并用w和w+2單元存放運(yùn)算結(jié)果。MOV AX,XMOV DX,

9、X+2ADD AX,YADC DX,Y+2ADD AX,24ADC DX,0SUB AX,ZSBB DX,Z+2MOV W,AXMOV W+2,DX【例題】無(wú)符號(hào)數(shù)0A3H與11H相乘。 MOVAL,0A3H ;(AL)=0A3H MOVBL, 11H ;(BL)=11H MULBL ;(AX)=0AD3H【例題】若(AL)= 0B4H,(BL)=11H,求執(zhí)行指令I(lǐng)MUL BL 和 MUL BL 后的乘積值。 (AL)= 0B4H為無(wú)符號(hào)數(shù)的180D,帶符號(hào)數(shù)的-76D (BL)=11H為無(wú)符號(hào)數(shù)的17D,帶符號(hào)數(shù)的17D 則執(zhí)行IMUL BL 的結(jié)果為(AX)=0FAF4H =-1292D

10、,CF=OF=1 執(zhí)行MUL BL 的結(jié)果為(AX)= 0BF4H = 3060D,CF=OF=1【例題】寫出實(shí)現(xiàn)無(wú)符號(hào)數(shù)0400H/0B4H運(yùn)算的程序段。 MOVAX,0400H;(AX)=0400H MOVBL,0B4H;(BL)=0B4H DIVBL ;商(AL)=05H,余數(shù)(AH)=7CH 【例題】寫出實(shí)現(xiàn)有符號(hào)數(shù)0400H /0B4H運(yùn)算的程序段。 MOV AX,0400H ;(AX)=0400H MOV BL,0B4H ;(BL)=0B4H IDIV BL ;(AL)=0F3H,(AH)=24H算術(shù)運(yùn)算綜合舉例【例3-36】計(jì)算:(C120 + A*B) / C,保存商和余數(shù)到X

11、和Y中,其中A、B、C、X和Y都是有符號(hào)的字變量 。編制程序如下:MOV AX, C SUB AX, 120 CWD MOV CX, DX MOV BX, AX ;(CX, BX)(DX, AX)MOV AX, A IMUL B ; (DX, AX)A*B ADD AX, BX ;計(jì)算32位二進(jìn)制之和ADC DX, CX IDIV C ;AX是商,DX是余數(shù) MOV X, AX ;保存商到指定單元 MOV Y, 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寄存器。編制程序如下:

12、mov ax, ximul ymov cx, axmov bx, dxmov ax, zcwdadd cx, axadc bx, dxsub cx, 540sbb bx, 0mov ax, vcwdsub ax, cxsbb dx, bxidiv x【例題】壓縮BCD碼的加法運(yùn)算。 MOV AL,68H;(AL)=68H,表示壓縮BCD碼68 MOV BL,28H;(BL)=28H,表示壓縮BCD碼28 ADD AL,BL;二進(jìn)制加法:(AL)=68H+28H=90H DAA ;十進(jìn)制調(diào)整:(AL)=96H ;實(shí)現(xiàn)壓縮BCD碼加法:68+28=96【例題】壓縮BCD碼的減法運(yùn)算。MOVAL,6

13、8H ;(AL)=68H,表示壓縮BCD碼68MOVBL,28H ;(BL)=28H,表示壓縮BCD碼28SUBAL,BL;二進(jìn)制減法:(AL)=68H28H=40HDAS ;十進(jìn)制調(diào)整:(AL)=40H ;實(shí)現(xiàn)壓縮BCD碼減法:6828=40【例題】 AND AL,77H ;將AL中第3位和第7位清零。 AND AX,BX ;兩個(gè)寄存器邏輯與 AND AL,1111 0000B ;屏蔽AL寄存器低4位 AND MEM-BYTE,AL;存儲(chǔ)單元和寄存器邏輯與例題】OR AL,88H ;將AL寄存器中第3位和第7位置1OR BX,0C000H ;將BX中第15位和第14位置1【例題】邏輯非運(yùn)算。

14、MOV AX,878AH;(AX)=878AHNOT AX ;(AX)=7875HNOTWORD PTR1000H;將1000H和1001H兩單 ;元中的內(nèi)容求反碼,再送回這兩單元中【例題】測(cè)試AX中的第12位是否為0,不為0則轉(zhuǎn)L。 TESTAX,1000H JNEL / JNZL 例3-54:(BX)=84F1H,把 (BX) 中的 16 位數(shù)每 4 位壓入堆棧MOV CH, 2 ; 循環(huán)次數(shù)MOV CL, 4 ; 移位次數(shù)NEXT: ROL BX, CLMOV AH, BLAND AH, 0FH ROL BX, CL MOV AL, BL AND AL, 0FHPUSH AXDEC CH

15、JNZ NEXT例題:設(shè)BLOCK數(shù)據(jù)塊中存儲(chǔ)有正數(shù)和負(fù)數(shù),試編寫程序?qū)⒄?fù)數(shù)分開(kāi),分別存放在Dplus和Dminus開(kāi)始的存儲(chǔ)區(qū)域mov si,offset blockmov di,offset dplusmov bx,offset dminusmov ax,dsmov es,ax;數(shù)據(jù)都在一個(gè)段中,所以設(shè)置es=dsmov cx,count;cx字節(jié)數(shù)cldgo_on: lodsb;從block取出一個(gè)數(shù)據(jù)test al,80h;檢測(cè)符號(hào)位,判斷是正是負(fù)jnz minus;符號(hào)位為1,是負(fù)數(shù),轉(zhuǎn)向minusstosb;符號(hào)位為0,是正數(shù),存入dplusjmp again;程序轉(zhuǎn)移到agai

16、n處繼續(xù)執(zhí)行minus: xchg bx,distosb;把負(fù)數(shù)存入dminusxchg bx,diagain: loop go_on;字節(jié)數(shù)減1· 例:檢驗(yàn)一段被傳送過(guò)的數(shù)據(jù)是否與源串完全相 同,程序如下:CLDMOV CX,100初始化MOV SI,2400HMOV DI,1200H;REPECMPSB ;串比較,直到ZF0或CX0JZ EQQDEC SIMOV BX,SI;第一個(gè)不相同字節(jié)偏移地址BXMOV AL,SI;第一個(gè)不相同字節(jié)內(nèi)容ALJMP STOPEQQ: MOV BX,0 ;兩串完全相同,BX0STOP:HLTv 例題:在某字符串中查找是否存在“”字符。若存在,則

17、將“”字符所在地址送入BX寄存器中,否則將BX寄存器清“0”。程序如下:CLD ;清除方向標(biāo)志DFMOV DI,0100H ;送目標(biāo)串首元素偏移地址 MOV CX,100 ;字串長(zhǎng)度MOV AL,;關(guān)鍵字ALREPNESCASB ;找關(guān)鍵字 JNZ ZER ;判斷是否找到DEC DIMOV BX,DI ;關(guān)鍵字所在地址BXJMP ST0 ZER: MOV BX,0 ;未找到,0BX ST0: HLT例題:比較兩個(gè)長(zhǎng)度為count的字符串是否完全相同,若相同置al=0,不相同置al=0ffhmov si,offset string1mov di,offset string2mov cx,coun

18、tcldmov al,0ffh;標(biāo)記初始為不同mov al,0;字符串相等,設(shè)置00houtput:mov result,al;輸出結(jié)果標(biāo)記n 例3.61 若AL最高位為0,設(shè)置(AH)0;若AL最高位為1,則設(shè)置(AH)FFH。即編程實(shí)現(xiàn)符號(hào)擴(kuò)展指令CBW功能 v 方法一:用JZ指令實(shí)現(xiàn)。testal,80h;測(cè)試最高位jzset0;最高位為0則轉(zhuǎn)到set0movah,0ffh;最高位為1,則將AH置0FFHjmpnext;無(wú)條件轉(zhuǎn)向next set0:movah,0 next: v 方法二:用JNZ指令實(shí)現(xiàn)。testal,80h;測(cè)試最高位jnzset1;最高位為1則轉(zhuǎn)到set1movah

19、,0h;最高位為0,則將AH置0jmpnext;無(wú)條件轉(zhuǎn)向next set1:movah,0ffh next: n 例3.62 計(jì)算|XY|,X和Y是存放于X單元和Y單元的16位操作數(shù),結(jié)果存入result mov ax,Xsubax,Y;XY送AX,下面求絕對(duì)值jnsnext ;絕對(duì)值為正,不需處理,轉(zhuǎn)向next保存結(jié)果negax ;絕對(duì)值為負(fù),進(jìn)行求補(bǔ)得到絕對(duì)值 next: movresult, ax;保存結(jié)果 n 例3.63 編寫程序段判斷DX中1的個(gè)數(shù) xoral,alagain:testdx,offffh;等價(jià)于cmp bx,0jenextshldx,1jncagainincaljm

20、pagainnext:;AL保存1的個(gè)數(shù)例3.64 比較AX和BX中兩個(gè)無(wú)符號(hào)數(shù)的大小,將較小的存放到AX中 cmpax,bx;比較ax和bxJBnext;若axbx,則轉(zhuǎn)移到nextxchgax,bx;若axbx,則兩者交換next:例3.65 比較AX和BX中兩個(gè)有符號(hào)數(shù)的大小,將較小的存放到AX中 cmpax,bx;比較ax和bxJLnext;若axbx,則轉(zhuǎn)移到nextxchgax,bx;若axbx,則兩者交換next:例3.66 a、b是雙精度數(shù),分別存于DX,AX 及BX,CX 中,a > b時(shí)轉(zhuǎn) L1,否則轉(zhuǎn)L2 cmpdx, bx;比較dx和bx JGl1;若dxbx,則

21、轉(zhuǎn)移到l1 JLl2;若dxbx,則轉(zhuǎn)移到l2 cmpax, cx;若dx=bx,則比較ax和cx JAl1;若axcx,則轉(zhuǎn)移到l1l2: l1: 例3-67:求首地址為 ARRAY 的 n個(gè)字之和,結(jié)果存入 sum單元mov cx,n ;將計(jì)數(shù)值n送CXxor ax,ax ;累加器AX清零xordx,dx ;DX清零xorsi,si ;SI清零again: addax,arraysi ;將下一個(gè)數(shù)據(jù)累加到AXadcdx,0 ;將產(chǎn)生的進(jìn)位累加到DXadd si,2 ;SI加2,指向下一個(gè)數(shù)據(jù)loop again ;若CX不為0,繼續(xù)循環(huán)mov sum,ax ;結(jié)果低16位送sum單元例4.

22、21】 p (1)編寫程序把 BX 中的二進(jìn)制數(shù)以十六進(jìn)制數(shù)的形式顯示在屏幕上 。CODE SEGMENT ASSUMECS:CODESTART: MOVCH,4;設(shè)置循環(huán)初值為4ROTAT: MOVCL,4 ROLBX,CL;BX循環(huán)左移4位 MOVAL,BL ANDAL,0FH;把最右面要顯示的4位取到AL中 ADDAL,30H ;將其加30H轉(zhuǎn)換為ASCII碼CMP AL,3AH;判斷是否大于9 JLPRINT;“0”“9”,轉(zhuǎn)向PRINTIT直接顯示 ADDAL,7H ;“A” “F”, ASCII 值再加7PRINT: MOVDL,AL;2號(hào)功能調(diào)用,顯示該字符 MOVAH,2 IN

23、T21H DECCH JNZROTAT;若循環(huán)次數(shù)未到,則繼續(xù)循環(huán) MOVAH,4CH INT21H;程序結(jié)束,返回DOSCODE ENDS ENDSTART【例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單元中 DATA SEGMENT BUFDW12DW5,-4,0,3,100,-51,69,-21,-5,255,33,150 MAXDW? MINDW? SUMDW?DATAENDSCODESEGMENT ASSUMECS:CODE,DS:DATASTAR

24、T: MOVAX,DATA MOVDS,AX MOVSI,2;初始化SI、AX、BX、DX MOVAX,BUFSI MOV BX,BUFSI MOVDX,BUFSI MOVCX,BUF;初始化循環(huán)計(jì)數(shù)器CXDECCXL:ADDSI,2 CMPBX,BUFSI;比較 JLLESS CMPDX,BUFSI JGGREATER JMPSLESS: MOVBX,BUFSI;大數(shù)送入BX JMPSGREATER:MOVDX,BUFSI;小數(shù)送入DXS: ADDAX,BUFSI;求累加和,送入AX LOOPL MOVMAX,BX;最大值、最小值及總和分別存 MOVMIN,DX;入MAX、MIN、SUM單元

25、 MOVSUM,AX MOVAH,4CH INT21HCODEENDS ENDSTART例4.25】字符串STRING以回車符作為結(jié)束標(biāo)志,編程統(tǒng)計(jì)該字符串的長(zhǎng)度 DATASEGMENTLEN DB?STRING DBcomputer science and technology,0DHDATAENDSCODESEGMENTASSUMECS:CODE, DS:DATA, ES:DATASTART:MOVAX,DATAMOVDS,AXMOVES,AXLEADI,STRING ;串的首地址送入DIMOVDL,0;置串長(zhǎng)度初值為0MOVAL,0DH;串結(jié)束標(biāo)志送入ALAGAIN:SCASB;搜索串J

26、EDONE;找到結(jié)束標(biāo)志,轉(zhuǎn)向DONE結(jié)束INCDL;否則,串長(zhǎng)度加1JMPAGAINDONE:MOVLEN,DL;串長(zhǎng)度送入LENMOVAH,4CHINT21HCODEENDSENDSTART 【例4.20】從鍵盤接收兩個(gè)有符號(hào)十進(jìn)制數(shù),并求它們的和,再將結(jié)果以有符號(hào)十進(jìn)制數(shù)的形式在屏幕上顯示輸出。DATASEGMENTMES1DBinput the first number:$MES2DBinput the second number:$MES3DBthe sum is:$XDW?YDW?SUMDW?DATAENDSCODESEGMENTASSUMECS:CODE,DS:DATASTART

27、:MOVAX,DATAMOVDS,AX MOVDX,OFFSET MES1MOVAH,9INT21H;顯示輸入提示信息CALL READ;調(diào)用子程序READ,輸入第一個(gè)數(shù)MOVX,AX;將輸入的第一個(gè)數(shù)送入變量XCALL CRLF;調(diào)用子程序CRLFMOVDX,OFFSET MES2MOVAH,9INT21H;顯示輸入提示信息CALL READ;調(diào)用子程序READ,輸入第二個(gè)數(shù)MOVY,AX;將輸入的第二個(gè)數(shù)送入變量YADDAX,X;兩數(shù)相加MOVSUM,AX;和送到SUM,入口參數(shù)MOVDX,OFFSET MES3MOVAH,9INT21H;顯示輸出提示信息CALL WRITE;調(diào)用子程序W

28、RITE,顯示結(jié)果MOVAH,4CHINT21HREADPROCNEAR;輸入有符號(hào)十進(jìn)制數(shù)的子程序READPUSH BXPUSH CXPUSH DXXORBX,BX;用BX保存結(jié)果XOR CX,CX;正負(fù)標(biāo)志,0為正,1為負(fù)MOV AH,1;輸入一個(gè)字符INT 21HCMP AL, +;比較是否為“”JZ READ1;是“”,轉(zhuǎn)向READ1繼續(xù)輸入CMP AL,;否則,比較是否為“”JNZ READ2;不是“”和“”,轉(zhuǎn)向READ2MOV CX,1;是“”,設(shè)置1標(biāo)志Read1: Read2: Read3: Read4: READENDPREAD1:MOV AH,1;繼續(xù)輸入字符INT 21

29、HREAD2:CMP AL,0;是否在09之間JB READ3;數(shù)據(jù)結(jié)束CMP AL,9JA READ3SUB AL,30H;在09之間,轉(zhuǎn)換為對(duì)應(yīng)數(shù)值SHL BX,1;用移位指令實(shí)現(xiàn)已輸入數(shù)值乘10MOV DX,BX;即:(BX)(BX)×10SHL BX,1SHL BX,1ADD BX,DXMOV AH,0;已輸入數(shù)值乘10+新輸入值A(chǔ)DD BX,AX;相加JMP READ1;繼續(xù)輸入字符 READ3: CMP CX,0;判斷該數(shù)值正負(fù)JZ READ4;是正數(shù),轉(zhuǎn)向READ4 NEG BX;是負(fù)數(shù),進(jìn)行求補(bǔ)READ4:MOV AX,BX;出口參數(shù),數(shù)值送入AXPOP DXPOP

30、CXPOP BXRET;子程序返回READENDPWRITEPROCNEAR;顯示有符號(hào)十進(jìn)制數(shù)的子程序WRITEPUSH AXPUSH BXPUSH DXMOV AX,SUM;取出要顯示的數(shù)據(jù)TEST AX,AX;判斷零、正數(shù)或負(fù)數(shù)JNZ WRITE1MOV DL,0;是零,顯示“0”后退出MOV AH,2INT 21HJMP WRITE5WRITE1:JNS WRITE2;是正數(shù),轉(zhuǎn)向WRITE2MOV BX,AX ;是負(fù)數(shù), AX數(shù)據(jù)暫存于BX以免被修改MOV DL,- ;顯示“”MOV AH,2INT 21HMOV AX,BX ;恢復(fù) AX數(shù)據(jù)NEG AX;數(shù)據(jù)求補(bǔ)(求絕對(duì)值)WRIT

31、E2:MOV BX,10PUSH BX;10壓入堆棧,作為退出標(biāo)志W(wǎng)RITE3:CMP AX,0;數(shù)據(jù)(商)是否為零JZ WRITE4;為零轉(zhuǎn)向顯示SUB DX, DX;擴(kuò)展被除數(shù)(DX,AX),DX清零DIV BX;數(shù)據(jù)除以10:(DX,AX)÷10ADD DL, 30H;余數(shù)(09)轉(zhuǎn)換為ASCII碼PUSH DX;數(shù)據(jù)各位先低位后高位壓入堆棧JMP WRITE3WRITE4:POP DX;數(shù)據(jù)各位先高位后低位彈出堆棧CMP DL, 10;是結(jié)束標(biāo)志10,則退出JE WRITE5MOV AH, 2;進(jìn)行顯示INT 21HJMP WRITE4 WRITE5:POP DXPOP BX

32、POP AXRET;子程序返回WRITEENDPCRLF PROCNEAR;使光標(biāo)回車換行的子程序 PUSH AX PUSH DX MOVAH,2 MOVDL,0DH INT21H;顯示回車符 MOVDL,0AH INT21H;顯示換行符 POPDX POPAX RETCRLF ENDPCODEENDSENDSTART(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:NAME EX1 ;程序命名偽指令,程序名為EX12:P

33、AGE 50,70;列表文件每頁(yè)50行每行70字符 3:;-4:DAT SEGMENT PARA DAT5:A1 DB 12H,34H,56H,78H,9AH6: DB0BCH,0DEH,0F0H7:B1=-A1 ;賦值偽指令,求A1(符號(hào)地址)到當(dāng) 前匯編指針地址()的字節(jié)數(shù)8: B2=B1*2 ;求2倍B19: A2 DB B2 DUP (?); 數(shù)據(jù)重復(fù)定義偽指令,定 義ASCII碼字符區(qū)10:DAT ENDS11:;-11:;-12:STAC SEGMENT PARA STACK STA13:STA1 DW 100DUP(?)14:STAC ENDS15:;-16:CODE SEGME

34、NT PARA CODE17: ASSUMECS:CODE,DS:DAT18: ASSUMESS:STAC,ES:DAT19:STAR PROC FAR20: PUSHDS21: XORAX,AX22: PUSHAX23:MOVAX,DAT24:MOVDS,AX ;段寄存器賦值25:MOVES,AX26:LEASI,A1 ;取有效地址27:LEADI,A228:MOVCX,B1 ;循環(huán)次數(shù)29:G1:MOVBL,2 ;每個(gè)字節(jié)處理兩次30:MOVAL,SI ;被處理的字節(jié)送AL31:MOVBH,AL ; AL暫存到BH32:PUSHCX 33:MOVCL,434:RORAL,CL ;循環(huán)右移4

35、位35:POPCX36:G2:ANDAL,0FH ;取AL低4位,高4位清零37: ADD AL, 30H38: CMP AL, 3AH JB AA 39: ADDAL,740:AA: MOVDI,AL ;處理完畢送目標(biāo)地址41: INCDI42: MOVAL,BH43: DECBL44: JNZG245: INCSI46: LOOPG1 ;CX-1,若CX0則返回G147:MOVSIOFFSET A2;A2的偏移地址送SI寄存器48:MOVCX,B249:CALLP150:RET顯示ASCII碼字符子程序如下:51:P1PROC52: MOVBL,253:G: MOVDL,SI54:MOVA

36、H,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)n 說(shuō)明: 由PC0充當(dāng)打印機(jī)的選通信號(hào),通過(guò)對(duì)PC0的置位/復(fù)位來(lái)產(chǎn)生選通。同時(shí),由PC7來(lái)接收打印機(jī)發(fā)出的“BUSY”信號(hào)作為能否輸出的查詢。 8255A的控制字為:10001000 即8

37、8H A口方式0,輸出;C口高位方式0輸入,低位方式0輸出 PC0置位: 00000001 即 01H PC0復(fù)位: 00000000 即 00H 8255A的4個(gè)口地址分別為:00H,01H,02H,03H。n DADA SEGMENT BUFF DB 'This is a print program!','$'n DATA ENDSn CODE SEGMENT ASSUME CS:CODE, DS:DATA START:MOV AX, DATA MOV DS, AX MOV SI,OFFSET BUFF MOV AL, 88H ;8255A初始化,A口方式0

38、,輸出 OUT 03H, AL ; C口高位方式0輸入,低位方式0輸出 MOV AL, 01H; OUT 03H,AL ;使PC0置位,即使選通無(wú)效WAIT: IN AL, 02H TEST AL, 80H ;檢測(cè)PC7是否為1即是否忙 JNZ WAIT ; 為忙則等待 MOV AL,SI CMP AL,'$' ;是否結(jié)束符 JZ DONE ; 是則輸出回車 OUT 00H,AL ;不是結(jié)束符,則從A口輸出 MOV AL,00H OUT 03H, AL MOV AL, 01H OUT 03H,AL ;產(chǎn)生選通信號(hào) INC SI ;修改指針,指向下一個(gè)字符 JMP WAITDON

39、E: MOV AL,0DH OUT 00H,AL ;輸出回車符 MOV AL, 00H OUT 03H,AL MOV AL, 01H OUT 03H,AL ;產(chǎn)生選通WAIT1: IN AL, 02H TEST AL, 80H ;檢測(cè)PC7是否為1 JNZ WAIT1 ; 為忙則等待 MOV AL,0AH OUT 00H,AL ;輸出換行符 MOV AL, 00H OUT 03H,AL MOV AL, 01H OUT 03H,AL MOV AH,4CH INT 21H CODE ENDS END START n 利用8086、8255A、輸入開(kāi)關(guān)、發(fā)光二極管,完成如下功能n 8255A的A口讀

40、取開(kāi)關(guān)K1狀態(tài),B口連接發(fā)光二極管L1L8。設(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)亮;n (1)若用IOYa(有效時(shí)A15-A4的狀態(tài)為000000101001)選通8255A,用8086的A0 A1信號(hào)進(jìn)行口選擇,給出8255A的四個(gè)口地址。(2)為完成上述實(shí)驗(yàn)功能,請(qǐng)?jiān)趫D上畫出接線圖。 (3)編寫匯編程序,完成上述功能。(主程序可調(diào)用延時(shí)1秒子程序DELAY和按任意鍵退出子程序BREAK,假定這兩個(gè)子程序已存在,不需編寫)n (1)8255A的四個(gè)口地址:290H,291H,292H,2

41、93H n (2)連線 MY_STACKSEGMENTDB100 DUP(?)MY_STACKENDSMY_DATA SEGMENT P8255_A DW 0290H P8255_B DW 0291H P8255_C DW 0292H P8255_M DW 0293H LADB ?MY_DATA ENDSMY_CODE SEGMENT ASSUME CS:MY_CODE,DS:MY_DATA,SS:MY_STACK START:MOVAX,MY_DATAMOVDS,AX MOV DX,P8255_M ;設(shè)置8255控制字MOVAL,90H ;1001 0000OUT DX,AL MOVLA,F

42、EH ;初值1111 1110 AA: MOV DX,P8255_A;讀取A口狀態(tài)IN AL,DXTESTAL,01H JZALL1 ;K1=0跳轉(zhuǎn)ALL1 MOVAL,LA ROLAL,1MOVLA ,ALMOV DX,P8255_B OUT DX,AL ;輸出 CALLDELAY CALLBREAKJMPAAALL1:MOVDX,P8255_BMOVAL,0FFH ;燈全滅OUTDX,AL CALLDELAY CALLBREAKJMPAAMY_CODE ENDS ENDSTART v 【例10-1】 若要查詢8251A接收器是否準(zhǔn)備好,則可用下列程序段完成 MOV DX,0FFF2H ;狀

43、態(tài)口L:IN AL,DX ;讀狀態(tài)口AND AL,02H ;查Dl1?準(zhǔn)備好了嗎?JZ L ;未準(zhǔn)備好,則等待MOV DX, 0FFF0H ;數(shù)據(jù)口IN AL,DX ;已準(zhǔn)備好則輸入數(shù)據(jù)異步模式下的初始化程序舉例 v 設(shè)8251A工作在異步模式,波特率系數(shù)(因子)為16,7個(gè)數(shù)據(jù)位/字符,偶校驗(yàn),2個(gè)停止位,發(fā)送、接收允許,設(shè)端口地址為00E2H和00E4H。完成初始化程序 v 根據(jù)題目,可確定模式字為:11111010B即FAH,控制字為:00110111B 即37H,初始化程序如下:§ MOV AL, 0FAH ;送模式字§ MOV DX,00E2H§ OUT

44、 DX, AL ;異步,7位/字符,偶校驗(yàn),2個(gè)停止位§ MOV AL,37H ;設(shè)置控制字,使發(fā)送、接收允許,清出錯(cuò)標(biāo)志§ OUT DX, AL ;有效 同步模式下的初始化程序舉例 v 設(shè)端口地址為52H,采用內(nèi)同步方式,2個(gè)同步字符(設(shè)同步字符為16H),偶校驗(yàn),7位數(shù)據(jù)位/字符 v 根據(jù)題目,可確定模式字為:00111000B即38H,控制字為:10010111B即97H。它使8251A對(duì)同步字符進(jìn)行檢索;同時(shí)使?fàn)顟B(tài)寄存器中的3個(gè)出錯(cuò)標(biāo)志復(fù)位;使8251A的發(fā)送器、接收器啟動(dòng);控制字還通知8251A,CPU當(dāng)前已經(jīng)準(zhǔn)備好進(jìn)行數(shù)據(jù)傳輸。初始化程序如下:§ MO

45、V AL,38H ;設(shè)置模式字,同步,用2個(gè)同步字符,§ OUT 52H,AL ; 7個(gè)數(shù)據(jù)位,偶校驗(yàn)§ MOV AL,16H § OUT 52H,AL ;送同步字符16H§ OUT 52H,AL § MOV AL, 97H ;設(shè)置控制字,使發(fā)送器和接收器啟動(dòng)§ OUT 52H, AL利用狀態(tài)字進(jìn)行編程的舉例 v 先對(duì)8251A進(jìn)行初始化,然后對(duì)狀態(tài)字進(jìn)行測(cè)試,以便輸入字符。本程序段可用來(lái)輸入80個(gè)字符。 v 8251A的控制和狀態(tài)端口地址為52H,數(shù)據(jù)輸入和輸出端口地址為50H。字符輸入后,放在BUFFER標(biāo)號(hào)所指的內(nèi)存緩沖區(qū)中 。程序如下

溫馨提示

  • 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ì)自己和他人造成任何形式的傷害或損失。