《微機原理與接口技術》(第四版)周何琴課后習題答案.doc
_第1章 緒論作業(yè)1. 將下列二進制數轉換成十進制數。(1)11001010B=202 (2)00111101B=61(3)01001101B=77 (4)10100100B=1643. 將下列十進制數分別轉換為二進制數和十六進制數。(2)76= 100 1100B =4CH(4)134= 1000 0110B =86H4. 求下列十進制數的BCD碼(1)327=11 0010 0111(BCD碼)(2)1256=1 0010 0101 0110(BCD碼)6. 求出下列10進制數的原碼、反碼和補碼(2)+85 (4)-85解:85=0101 0101B原碼:+85= 0101 0101B -85= 1101 0101B反碼:+85= 0101 0101B -85= 1010 1010B補碼:+85= 0101 0101B -85= 1010 1011B10. 畫出微型計算機的基本結構框圖,說明各部分的主要功能是什么?解:微型計算機的基本結構框圖如下:地址總線I/O總線微處理器CPU存儲器I/O接口I/O設備數據總線控制總線微處理器CPU:控制微處理器與存儲器或I/O設備間的數據交換;進行算術和邏輯運算等操作;判定和控制程序流向。微處理器主要完成:(1)指令控制:從存儲器中取指令,指令譯碼;(2)數據加工:簡單的算術邏輯運算;(3)操作控制:在微處理器和存儲器或者I/O之間傳送數據;(4)時間控制:程序流向控制。存儲器:用來存放數據和指令。I/O接口:主機和外設間的橋梁,提供數據緩沖驅動、信號電平轉換、信息轉換、地址譯碼、定時控制等各種功能。I/O設備:輸入原始數據和程序,轉換成計算機能識別的信息,送入存儲器去等待處理。輸出運算結果??偩€:連接計算機系統中各功能部件的信息通道。第2章 8086CPU作業(yè)2. 8086CPU內部由哪兩部分組成?它們的大致是如何工作的?答:(1)8086CPU由指令執(zhí)行部件EU和總線接口部件BIU兩部分組成。(2) BIU先執(zhí)行讀存儲器操作,從給定地址單元中取出指令,送到先進先出的指令隊列中等待執(zhí)行。 存儲器的物理地址=CS´16+IP,在地址加法器S中形成。 EU從指令隊列中取走指令,經EU控制器譯碼分析后,向各部件發(fā)控制命令,以完成執(zhí)行指令的操作。BIU與EU是并行工作方式。 當指令隊列已滿,EU在執(zhí)行指令,未向總線接口單元BIU申請讀/寫內存或I/O操作時,BIU處于空閑狀態(tài)。 指令執(zhí)行過程中,若需對存儲器或I/O端口存取數據,EU就要求BIU去完成相應的總線周期。 5. 兩個帶符號數1011 0100B和1100 0111B相加,運算后各標志位的值等于多少?哪些標志位是有意義的?如果把這兩個數當成無符號數,相加后哪些標志位是有意義的?解:(1)兩個帶符號數:不考慮CF標志 1011 0100 + 1100 0111 1 0111 1011運算后各標志位狀態(tài)如下: CF=1,有進位,對于帶符號數,無意義。PF=1,結果有偶數個1 AF=0,無半進位,非BCD碼運算,無意義。ZF=0,結果非0 SF =0,結果為正數 OF=1,溢出(兩個負數相加,結果變成了正數)(2)兩個無符號數:不考慮SF和OF標志 1011 0100 + 1100 0111 1 0111 1011運算后各標志位狀態(tài)如下: CF=1,有進位PF=1,結果有偶數個1 ZF=0,結果非0AF、SF、 OF無意義。20. 簡要解釋下列名詞的意義。CPU:中央處理單元CPU (Control Processing Unit)也稱微處理器,是微型計算機的核心部件,由運算器ALU、控制器、寄存器組以及總線接口等部件組成。主要完成各種運算,負責對整機的控制。存儲器:用于存儲程序和數據的硬件設備。堆棧:堆棧是一種數據結構,是內部RAM的一段區(qū)域。設置堆棧的目的是用于數據的暫存,中斷、子程序調用時斷點和現場的保護與恢復。IP:指令指針寄存器,用于控制CPU的指令執(zhí)行順序(只存放偏移量),只能和代碼段寄存器CS配合使用,可以確定當前所要取的指令的內存地址,且始終指向代碼段中下一條將要讀取到CPU指令隊列的那條指令。順序執(zhí)行程序時,CPU每取一個指令字節(jié),IP自動加1,指向下一個要讀取的字節(jié)。SP:堆棧指針寄存器,用于指示堆棧的棧頂地址偏移量的寄存器,它決定了堆棧在內部RAM中的物理位置。只能和SS段寄存器配合使用,且始終指向堆棧的棧頂,在堆棧指令中隱含的使用它來定位棧頂數據。BP:基址指針寄存器。用于存放偏移量,通常和SS段寄存器配合使用,在間接尋址中用于定位堆棧段中的內存單元。段寄存器:由于CPU內部的寄存器都是16位的,為了能夠提供20位的物理地址,8086系統中采用了存儲器分段的方法。規(guī)定存儲器的一個段為64KB,由段寄存器來確定存儲單元的段基址,由指令提供該單元相對于相應段起始地址的16位偏移量。狀態(tài)標志:表示前一步操作(如加、減等)執(zhí)行以后,ALU所處的狀態(tài),后續(xù)操作可以根據這些狀態(tài)標志進行判斷,實現轉移??刂茦酥荆嚎梢酝ㄟ^指令人為設置,用以對某一種特定的功能起控制作用(如中斷屏蔽等),反映了人們對微機系統工作方式的可控制性。物理地址:存儲器的實際地址,它是指CPU和存儲器進行數據交換時所使用的地址。物理地址是由段地址與偏移地址共同決定的,計算物理地址的表達式為:物理地址 = 段地址 × 16 + 偏移地址 邏輯地址:是在程序中使用的地址,它由段地址和偏移地 址兩部分組成。邏輯地址的表示形式為“段地址:偏移地址”。 機器語言:直接用二進制編碼表述的指令系統語言,通常稱為機器語言,機器語言指令是計算機惟一能直接識別和執(zhí)行的指令。匯編語言:便于記憶和使用,通常使用匯編語言(符號指令或指令助記符)來描述計算機的指令系統。指令:讓計算機完成某種操作的命令稱為指令。指令系統:一臺計算機所能識別、執(zhí)行的指令的集合就是它的指令系統??偩€:連接計算機系統中其他主要功能部件的橋梁,是計算機系統中信息輸送的樞紐,只有通過總線,計算機系統的各部件才能實現相互通信。內部總線:微處理器內部各個器件之間傳送信息的通路。系統總線:微處理機機箱內的底板總線??煞譃椋篒SA、EISA、VESA局部總線、PCI局部總線等。時鐘周期:CPU時鐘頻率的倒數稱為時鐘周期,也稱T狀態(tài)??偩€周期:BIU完成一次訪問存儲器或I/O端口操作所需要的時間稱為總線周期。一個基本的總線周期是由4個(或4個以上)時鐘周期組成的。指令周期:執(zhí)行一條指令所需要的時間稱為指令周期,不同指令的指令周期的長短是不同的。一個指令周期是由幾個總線周期組成的。21. 要完成下列運算和控制,用什么標志判別?其值是什么?(1)比較兩數是否相等? (2)兩數運算后結果是正數還是負數? (3)兩數相加后是否溢出? (4)奇偶校驗判斷。(5)兩數相減后比較大小。(6)中斷信號能否允許? 答:(1)比較兩數是否相等:兩數相減后用零標志ZF判斷,ZF=1,則相等。(2)兩數運算后結果是正數還是負數:用符號標志SF判斷, SF=1,則結果為負數。(3)兩數相加后是否溢出:用溢出標志OF判斷,OF=1,則有溢出。(4)奇偶校驗判斷:采用偶校驗方式,判定是否要補“1”?用奇偶標志PF判斷,若數據結果低8位中含有偶數個“1”,則PF=1;不用補“1”。(5)兩數相減后比較大?。篫F=1,兩數相等。對于無符號數,CF=1,則被減數小于減數;CF=0,則被減數大于減數;ZF=1,則兩數相等。對于帶符號數,SFOF=1,則被減數小于減數;SFOF=0,則被減數大于減數。(6)中斷信號能否允許:用中斷允許標志IF判斷,IF=1,則能允許可屏蔽中斷。22. 說明8086系統中“最小模式”和“最大模式”兩種工作方式的主要區(qū)別。最小模式(最小工作方式 ):單微處理器系統(系統中只有一個8086微處理器),所有的總線控制信號,都是直接由8086CPU產生的,適用于規(guī)模較小的微機應用系統。當把8086的33腳MN/MX接+5V時,8086 CPU就處于最小工作方式。最大模式(最大工作方式 ):多微處理器系統(包含有兩個或多個微處理器,一個主處理器8086CPU,其他的處理器稱為協處理器它們是協助主處理器工作的。 ),主要用在中等或大規(guī)模的8086系統中。當把8086的33腳MN/MX接地時, 8086 CPU就處于最大模式。第3章 作業(yè)1分別說明下列指令的源操作數和目的操作數各采用什么尋址方式。 源 目的(1)MOV AX, 2048H 立即尋址 寄存器尋址(2) MOV CL, 0FFH 立即尋址 寄存器尋址(3) MOV BX, SI 寄存器間接尋址 寄存器尋址(4) MOV 5BX, BL 寄存器尋址 寄存器相對尋址(5) MOV BP+100H, AX 寄存器尋址 寄存器相對尋址(6) MOV BX+DI, $ 立即尋址 基址變址尋址(7) MOV DX, ES:BX+SI 基址變址尋址 寄存器尋址(8) MOV VALBP+DI, DX 寄存器尋址 相對基址加變址尋址(9) IN AL, 05H I/O端口尋址(或直接尋址) 寄存器尋址(10) MOV DS, AX 寄存器尋址 寄存器尋址2 已知:DS=1000H, BX=0200H, SI=02H, 內存10200H10205H單元的內容分別為10H, 2AH, 3CH, 46H, 59H, 6BH。下列每條指令執(zhí)行完后AX寄存器的內容各是什么? AX 內容(1)MOV AX, 0200H; (AX)=0200H(2) MOV AX, 200H; (AX)=2A10H(3) MOV AX, BX ; (AX)=0200H(4) MOV AX, 3BX ; (AX)=5946H(5) MOV AX, BX+SI; (AX)=463CH(6) MOV AX, 2BX+SI ; (AX)=6B59H6指出下列指令中哪些是錯誤的,錯在什么地方(1)MOV DL, AX 錯誤,源和目的操作數類型不匹配,DL是8位寄存器,AX是16位寄存器。(2)MOV 8650H, AX 錯誤,立即數不能作為目的操作數。(3)MOV DS, 0200H 錯誤,不能用立即數直接給段寄存器賦值。(4)MOV BX, 1200H 錯誤,不能在兩個存儲單元之間直接傳送數據(5)MOV IP, 0FFH 錯誤,IP不能作目的操作數或不能用立即數直接給IP寄存器賦值。(6)MOV BX+SI+3, IP 錯誤,IP不能作源操作數。(7) MOV AX, BXBP 錯誤,基址變址尋址方式必須是一個基址寄存器與一個變址寄存器,不能兩個同時為基址寄存器(BX、BP均為基址寄存器)。 (8)MOV AL, ES:BP 正確。(9)MOV DL, SIDI 錯誤,基址變址尋址方式必須是一個基址寄存器與一個變址寄存器,不能兩個同時為變址寄存器(SI、DI均為變址寄存器)。(10)MOV AX, OFFSET 0A20H 錯誤,OFFSET后必須是存儲單元標號地址,不能是立即數。(11) MOV AL, OFFSET TABLE 錯誤,操作數類型不匹配,AL為8位, TABLE為16位。(12)XCHG AL, 50H 錯誤,交換指令XCHG的操作數不能是立即數。(13)IN BL, 05H 錯誤,IN指令的目的操作數必須是累加器(14)OUT AL, 0FFEH 錯誤,OUT指令的源操作數必須是累加器,目的操作數為8位I/O端口地址或用DX做橋梁的16位I/O端口地址。10. 已知AX=2508H,BX=0F36H,CX=0004H,DX=1864H,求下列每條指令執(zhí)行后的結果是什么?標志位CF等于什么?(1)AND AH,CL (AH)=04H CF=0(2)OR BL,30H (BL)=36H CF=0(3)NOT AX (AX)=0DAF7H CF不變(不影響CF)(4)XOR CX,0FFF0H (CX)=0FFF4H CF=0(5)TEST DH,0FH (DH)=18H CF=0(6)CMP CX,00H (CX)=0004H CF=0(7)SHR DX,CL (DX)=0186H CF=0(8)SAR AL,1 (AL)=04H CF=0(9)SHL BH,CL (BH)=0F0H CF=0(10)SAL AX,1 (AX)=4A10H CF=0(11)RCL BX,1 CF=1,(BX)=1E6DH, CF=0,(BX)=1E6CH CF=0(12)ROR DX,CL (DX)=4186H CF=011. 假設數據定義如下: DATA SEGMENT STRING DB The Personal Computer & TV DATA ENDS試用字符串操作指令編程完成以下功能:(1)把該字符串傳送到附加段中偏移地址為GET_CHAR開始的內存單元中。解:程序段如下: LEA SI,STRING ;置源串偏移地址 LEA DI,GET_CHAR ;置目的串偏移地址 MOV CX,26 ;置串長度 CLD ;方向標志復位 REP MOVSB ;字符串傳送12編程將AX寄存器中的內容以相反的次序傳送到DX寄存器中,并要求AX中的內容不被破壞,然后統計DX寄存器中1的個數是多少。解:將AX的內容用ROR循環(huán)右移,16次之后AX的內容不變(如果用算術/邏輯右移SHL/SAL,則AX的內容破壞,需要用堆棧PUSHU AX/POP AX保護),其最低位移入CF中,再使用RCL循環(huán)左移將CF中的值移入DX中。并且,如果CF的值為1,則將BL加1。MOV CX, 16XOR BL, BLLP1: ROR AX, 1JNC LP2INC BLLP2: RCL DX,1LOOP LP1HLT調試程序:STACK SEGMENT STACKDB 100 DUP(?)STACK ENDSDATA SEGMENT BUF DW 12 BUF1 DW 100 DUP (?) DATA ENDSCODE SEGMENT ASSUME CS:CODE,DS:DATA,SS:STACKSTART: PUSH DSMOV AX,DATA MOV DS,AX MOV AX,1234H MOV CX, 16 XOR BL, BLLP1: ROR AX, 1 JNC LP2 INC BLLP2: RCL DX,1 LOOP LP1 HLTCODE ENDSEND START15. 某班有七個同學的英語成績低于80分,分數存在ARRAY數組中,試編程完成以下工作:給每人加5分,結果存到NEW數組中.解: STACK SEGMENT STACKDB 100 DUP(?)STACK ENDSDATA SEGMENT ARRAY DB 7 DUP(?)NEW DB 7 DUP(?)DATA ENDSCODE SEGMENT ASSUME CS:CODE,DS:DATA,SS:STACKSTART: MOV CX, 7 MOV BX, 0LP1: MOV AL, ARRAYBX ADD AL, 05H DAA MOV NEWBXI, AL INC BX LOOP LP1 HLTCODE ENDSEND START調試程序:STACK SEGMENT STACKDB 100 DUP(?)STACK ENDSDATA SEGMENT ARRAY DB 65H,76H,78H,54H,90H,85H,68H NEW DB 7 DUP(?) BUF1 DW 100 DUP (?) DATA ENDSCODE SEGMENT ASSUME CS:CODE,DS:DATA,SS:STACKSTART: PUSH DSMOV AX,DATA MOV DS,AX MOV CX, 7 MOV BX, 0LP1: MOV AL, ARRAYBX ADD AL, 05H DAA MOV NEWBXI, AL INC BX LOOP LP1 HLTCODE ENDSEND START某班有七個同學的英語成績低于80分,分數存在ARRAY數組中,試編程完成以下工作:(1)給每人加5分,結果存到NEW數組中(2)把總分存到SUM單元中(3)把平均分存到AVERAGE單元中解:STACK SEGMENT STACKDB 100 DUP(?)STACK ENDSDATA SEGMENT ARRAY DB 7 DUP(?)NEW DB 7 DUP(?)SUM DW 0AVG DB 0DATA ENDSCODE SEGMENT ASSUME CS:CODE,DS:DATA,SS:STACKSTART: MOV CX, 7 MOV SI, 0 MOV SUM, 0 MOV AH, 0LP1: MOV AL, ARRAYSI ADD AL, 05H DAA MOV NEWSI, AL ADD AL ,SUM DAA MOV SUM,AL ADC AH, 0 DAA MOV SUM+1, AH INC SI LOOP LP1 MOV AX, SUM MOV BL,07H DIV BL MOV AVG, AL HLTCODE ENDSEND START調試程序:STACK SEGMENT STACKDB 100 DUP(?)STACK ENDSDATA SEGMENT ARRAY DB 65H,76H,78H,54H,90H,85H,68H NEW DB 7 DUP(?) SUM DB 00H,00H AVG DB 0 BUF1 DW 100 DUP (?) DATA ENDSCODE SEGMENT ASSUME CS:CODE,DS:DATA,SS:STACKSTART: PUSH DSMOV AX,DATA MOV DS,AX MOV CX, 7 MOV SI, 0 MOV SUM, 0 MOV AH, 0LP1: MOV AL, ARRAYSI ADD AL, 05H DAA MOV NEWSI, AL ADD AL , SUM DAA MOV SUM,AL ADC AH, 0 MOV SUM+1, AH INC SI LOOP LP1 MOV AL, SUM MOV AH,SUM+1 MOV BL,07H DIV BL MOV AVG, AL HLTCODE ENDSEND START13. 設CS=1200H, IP=0100H, SS=5000H, SP=0400H, DS=2000H, SI=3000H, BX=0300H, (20300H)=4800H, (20302H)=00FFH, TABLE=0500H, PROG_N標號的地址為1200:0278 H,PROG_F標號的地址為3400:0ABCH。說明下列每條指令執(zhí)行完后,程序分別轉移到何處執(zhí)行?JMP指令(1)JMP PROG_N 段內直接近轉移,目的地址為1200H:0278H(或12278H)(2)JMP BX 段內寄存器間接轉移,目的地址為1200H:0300H(或12300H) (3)JMP BX 物理地址DS×10H+BX=2000H×10H+0300H=20300H (20300H)=4800HIP 段內存儲器間接轉移,目的地址為1200H:4800H(或16800H)(4)JMP FAR PROG_F 段間直接轉移,目的地址為3400H:0ABCH(或34ABCH)(5)JMP DWORD PTRBX 物理地址DS×10H+BX=2000H×10H+0300H=20300H (20300H)=4800HIP, (20302H)=00FFHCS 段間存儲器間接轉移,目的地址為00FFH:4800H(或057F0H) JMP改為CALL后,目的地址與JMP相同。 (1)CALL PROG_N 段內直接調用,3字節(jié)指令,目的地址為1200H:0278H(或12278H),0103H入棧,SP=03FEH (2)CALL BX 段內寄存器間接調用,2字節(jié)指令,目的地址為1200H:0300H(或12300H) ,0102H入棧,SP=03FEH (3)CALL BX 段內存儲器間接調用,2字節(jié)指令,目的地址為1200H:4800H(或16800H),0102H入棧,SP=03FEH (4)CALL FAR PROG_F 段間直接調用,5字節(jié)指令,目的地址為3400H:0ABCH(或34ABCH),1200H和0105H分別入棧,SP=03FCH (5)CALL DWORD PTRBX 段間間接調用,2字節(jié)指令,目的地址為00FFH:4800H(或057F0H),1200H和0102H分別入棧,SP=03FCH部分調試程序:STACK SEGMENT STACKDB 100 DUP(?)STACK ENDSDATA SEGMENT BUF DW 12 BUF1 DW 100 DUP (?) ORG 300H DB 00H,48H,0FFH,00H DATA ENDSCODE SEGMENT ASSUME CS:CODE,DS:DATA,SS:STACKSTART: PUSH DSMOV AX,DATA MOV DS,AX MOV BX,0300H CALL PROG_N CALL BX CALL BX ORG 0278 PROG_N:RET ORG 0300H RET ORG 4800H RET HLTCODE ENDSEND START14. 如在下列程序段的括號中分別填入以下指令:(1)LOOP NEXT(2) LOOPE NEXT(3) LOOPNE NEXT試說明在這三種情況下,程序段執(zhí)行完后,AX, BX, CX, DX寄存器的內容分別是什么START: MOV AX, 01H MOV BX, 02H MOV DX, 03H MOV CX, 04HNEXT: INC AX ADD BX, AX SHR DX, 1 ( )解: LOOP過程: AX BX CXDX初始值01H02H 04H 03 H循環(huán)1次02H04H 03H 01H循環(huán)2次03H 07H 02H 00H循環(huán)3次04H0BH01H00H循環(huán)4次05H10H00H00H結果: AX BX CXDX(1)05H10H00H00H(2)02H04H03H01H執(zhí)行一次,ZF=0,退出循環(huán)。(3)03H07H02H00H執(zhí)行兩次,ZF=1,退出循環(huán)。 20. 設8086CPU的時鐘頻率為5MHz,請編寫延時5ms的子程序。解:微機的主頻率為5MHz 則:時鐘周期=主頻率的倒數=1/(5×10-6)=0.2µs延時5ms需要的時鐘周期數= 5ms/ 0.2µs=25000延時子程序如下:DELAY5:MOV CX,N 4 DLY1:NOP 3 ×N LOOP DLY1 17 ×(N-1)+ 5 RET 16 應該有25000=4+ 3 ×N+ 17 ×(N-1)+ 5+16,才能實現要求的延時。則: N=1250=04E2H延時子程為:DELAY5:MOV CX,04E2H DLY1:NOP LOOP DLY1 RET第4章作業(yè)P1535. 閱讀下列程序,說明每條指令執(zhí)行后的結果是什么?X1 DB 65H, 78HX2 DW 06FFH, 5200HX3 DD ?GO: MOV AL, TYPE X1 MOV BL, TYPE X2 MOV CL, TYPE X3MOV AH, TYPE GO MOV BH, SIZE X2MOV CH, LENGTH X3解:(1)前三條語句的功能是設置數據于數據段中,從數據段偏移地址0000H開始存放。變量偏移地址數據X10000H65H0001H78HX20002HFFH0003H06H0004H78H0005H00HX30006H隨機數0007H隨機數0008H隨機數0009H隨機數程序匯編后結果如下:六條程序執(zhí)行結果如下:(AL)=01H;設置變量類型屬性,字節(jié)數(BL)=02H;設置變量類型屬性,字節(jié)數(CL)=04H;設置變量類型屬性,字節(jié)數(AH)=0FFH;設置GO顯示類型,近標號,為-1,補碼表示(BH)=02H;設置數據類型,無DUP時,返回數據類型的字節(jié)數 (CH)=01H;無DUP時,返回1。程序執(zhí)行后結果如下: 調試程序如下:STACK SEGMENT STACK DB 100 DUP(?) STACK ENDSDATA SEGMENT X1 DB 65H, 78H X2 DW 06FFH, 5200H X3 DD ?DATA ENDSCODE SEGMENT ASSUME CS:CODE,DS:DATA,SS:STACKSTART: PUSH DS MOV AX,DATA MOV DS,AXGO: MOV AL, TYPE X1 MOV BL, TYPE X2 MOV CL, TYPE X3 MOV AH, TYPE GO MOV BH, SIZE X2 MOV CH, LENGTH X3 POP DS HLTCODE ENDS END START6. 畫出示意圖,說明下列變量在內存中如何讓存放?A1 DB 12H, 34HA2 DB Right.A3 DW 5678HA4 DB 3 DUP(?)(1)設置數據于數據段中,從數據段偏移地址0000H開始存放。變量偏移地址數據A10000H12H0001H34HA20002H52H0003H69H0004H67H0005H68H0006H74H0007H2EHA30008H78H0009H56HA4000AH隨機數000BH隨機數000CH隨機數調試程序如下:STACK SEGMENT STACK DB 100 DUP(?) STACK ENDSDATA SEGMENT A1 DB 12H, 34H A2 DB 'Right.' A3 DW 5678H A4 DB 3 DUP(?)DATA ENDSCODE SEGMENT ASSUME CS:CODE,DS:DATA,SS:STACKSTART: PUSH DS MOV AX,DATA MOV DS,AX POP DS HLTCODE ENDS END START程序匯編后結果如下: 12. 編程實現,從鍵盤輸入一個十進制數09,查表求鍵入數字的七段代碼(共陽極LED顯示器的段碼),存入DL中,并在鍵入數字之前,顯示提示信息“Please input a number(09):”。解:STACK SEGMENT STACKDB 100 DUP(?)STACK ENDSDATA SEGMENT TABLE DB 0C0H, 0F9H, 0A4H, 0B0H, 99H, 92H, 82H, 0F8H, 80H, 90H BUF DB 'Please input one number(09):',0DH,0AH,'$'DATA ENDSCODESEGMENT ASSUME CS:CODE,DS:DATA,SS:STACK,ES:DATASTART: PUSH DS MOV AX,DATA MOV DS,AX MOV DX,OFFSET BUF MOV AH,09H INT 21H MOV AH,1 INT 21H AND AL,0FH MOV BX,OFFSET TABLE XLAT MOV DL,AL POP DS HLTCODEENDSEND START調試結果:數字5的共陽極LED七段碼為92H。15. 已知:在內存BUF開始的單元中,存在一串數據:58,75,36,42,89。編程找出其中的最小值存入MIN單元中,并將這個數顯示在屏幕上。解:STACK SEGMENT STACKDB 100 DUP(?)STACK ENDSDATA SEGMENT BUF DB 58H, 75H, 36H, 42H, 89H MIN DB 0DATA ENDSCODE SEGMENT ASSUME CS:CODE, DS:DATA, SS:STACKSTART: PUSH DS MOV AX, DATA MOV DS, AX MOV CX, 4 MOV BX, OFFSET BUF MOV AL, BX ST1: INC BX CMP AL, BX JBE NEXT MOV AL, BX NEXT:LOOP ST1 MOV MIN, AL AND AL, 0F0H MOV CL,4 ROR AL, CL ADD AL, 30H MOV DL, AL MOV AH, 02H INT 21H MOV AL, MIN AND AL, 0FH ADD AL, 30H MOV DL, AL MOV AH, 02H INT 21H POP DS MOV AH, 4CH INT 21H HLTCODEENDS END START18. 某班有20個同學的微機原理成績存放在LIST開始的單元中,要求編程先從高到低的次序排列好,再求出總分和平均值,分別存放在SUM和AVER開始的單元中。解:STACK ENDSDATA SEGMENT LIST DB 65H,76H,78H,54H,90H,85H,68H,66H,77H,88H DB 99H, 89H, 79H, 69H,75H,85H,63H,73H,83H,93H SUM DW 0 AVER DB 0 BUF DB 100 DUP (?) DATA ENDSCODE SEGMENT ASSUME CS:CODE,DS:DATA,SS:STACKSTART: PUSH DS MOV AX,DATA MOV DS,AX MOV DI, OFFSET LIST MOV BX, 19 LP0: MOV SI, DI MOV CX, BX LP1: MOV AL, SI INC SI CMP AL, SI JNC LP2 MOV DL, SI MOV SI-1, DL MOV SI, AL LP2: LOOP LP1 DEC BX JNZ LP0 LP3: MOV CX, 20 MOV BX, OFFSET LIST MOV SUM, 0 XOR AX, AX LP4: ADD AL, BX DAA ADC AH, 0 INC BX LOOP LP4 MOV SUM, AX MOV BL, 20H DIV BL ADD AL,0 DAA MOV AVER AL POP DS HLTCODE ENDSEND START20. 編程將存放在AL中的無符號二進制數,轉化成十六進制數,再轉換成ASII碼并顯示在屏幕上。解:程序如下:STACK SEGMENT STACK DB 100 DUP(?)STACK ENDSDATA SEGMENT DB 100 DUP(?)DATA ENDSCODE SEGMENT ASSUME CS:CODE, DS:DATA, SS:STACKSTART: PUSH DS MOV AX, DATA MOV DS, AX MOV DH, AL MOV CH, 02HST1: MOV CL, 4 ROR DH, CL MOV AL, DH AND AL, 0FH ADD AL, 30H CMP AL, 39H JBE DISP ADD AL, 07HDISP: MOV DL, AL MOV AH, 02H INT 21H DEC CH JNZ ST1 POP DS MOV AH, 4CH INT 21H HLTCODE ENDS END START調試程序如下:STACK SEGMENT STACK BUF DB 01111000BDB 100 DUP(?)STACK ENDSDATA SEGMENT DB 100 DUP(?)DATA ENDSCODE SEGMENT ASSUME CS:CODE, DS:DATA, SS:STACKSTART: PUSH DS MOV AX, DATA MOV DS, AX MOV AL, BUF MOV DH, AL MOV CH, 02HST1: MOV CL, 4 ROR DH, CL MOV AL, DH AND AL, 0FH ADD AL, 30H CMP AL, 39H JBE DISP ADD AL, 07HDISP: MOV DL, AL MOV AH, 02H INT 21H DEC CH JNZ ST1 POP DS MOV AH, 4CH INT 21H HLTCODE ENDS END START21. 編寫程序,使用三種以上的方法,將存儲器中2000H開始的地址單元中的100字節(jié)數據復制到3000H開始的存儲器地址單元中。解:(1)利用通用傳送指令MOVMOV SI,2000H 注意這里如果是標號地址 ,則必須用OFFSETMOV DI,3000HMOV CX,100LP1: MOV AL,SIMOV DI,ALINC SIINC DILOOP LP1 HLTMOV CX,100MOV BX,0 LP0:MOV AL,2000BXMOV 3000BX,ALINC BXLOOP LP0HLT(2)利用交換指令XCHGMOV SI,2000HMOV DI,3000HMOV CX,100LP2: MOV AL,SIXCHG DI,ALINC SIINC DILOOP LP2 HLT(3)利用換碼指令XLATMOV BX,2000HMOV DI,3000HMOV CX,100 LP3: XOR AL,AL XLATMOV DI, ALINC BX INC DILOOP LP3HLT(4)利用堆棧實現數據傳送MOV SI,2000HMOV DI,3000HMOV CX,50LP4: PUSH SIPOP DIINC SIINC SIINC DIINC DILOOP LP4 HLT(5)利用串操作指令REP MOVSBMOV SI,2000HMOV DI,3000HMOV CX,100CLD ;DF=0,SI、DI自動+1REP MOVSBHLT調試程序:STACK SEGMENT STACK DB 100 DUP(?) STACK ENDSDATA SEGMENT ORG 2000HDB 11H,22H,33H,44H,55H.66H,77H,88H,99HDB 100 DUP(?)ORG 3000HDB 100 DUP(?)DATA ENDSCODE SEGMENT ASSUME CS:CODE,DS:DATA,SS:STACKSTART:PUSH DS MOV AX,DATA MOV DS,AX MOV SI,2000H MOV DI,3000H MOV CX,100LP1: MOV AL,SI MOV DI,AL INC SI INC DI LOOP LP1 POP DS HLTCODE ENDS END START22. 在DATA開始的4個單元中存放著一個32位數,求出其中的“1”的個數,并存入COUNT單元中。