版權說明:本文檔由用戶提供并上傳,收益歸屬內容提供方,若內容存在侵權,請進行舉報或認領
文檔簡介
1、微機原理習題 第一章 緒論習題與答案1. 把下列二進制數轉換成十進制數、十六進制數及BCD碼形式。(1) 10110010B =(2) 01011101.101B = 解:(1) 10110010B = 178D = B2H = (0001 0111 1000)BCD(2)
2、60; 01011101.101B = 93.625D = 5D.AH= (1001 0011.0110 0010 0101)BCD 2. 把下列十進制數轉換成二進制數。(1) 100D =(2) 1000D =(3) 67.21D = 解:(1) 100D = 01100100B(2) 1000D = 1111101000B(3) 67.21D = 10000
3、11.0011B 3. 把下列十六進制數轉換成十進制數、二進制數。(1) 2B5H =(2) 4CD.A5H =解: (1) 2B5H
4、; = 693D = 0010 1011 0101B (2) 4CD.A5H = 1229.6445D = 0100 1100 1101.1010 0101 B 4. 計算下列各式。(1) A7H+B8H =(2) E4H-A6H
5、 = 解:(1) A7H+B8H = 15FH(2) E4H-A6H = 3EH 5. 寫出下列十進制數的原碼、反碼和補碼。(1) +89(2) -37 解:(1) +89 原碼、反碼和補碼為: 01011001B(2) -37 原碼 = 10100101 B -37 反碼 = 1
6、1011010 B-37 補碼 = 11011011 B 6求下列用二進制補碼表示的十進制數 (1)(01001101)補 = (2)(10110101)補 = 解: (1)(01001101)補 = 77D (2)(10110101)補 = -75D 7請用8位二進制數寫出下列字符帶奇校驗的ASCII碼。 (1)C: 1000011 (2)O:&
7、#160; 1001111 (3)M: 1001101 (4)P: 1010000 解: (1)C:0 1000011 (2)O: 0 1001111 (3)M:1 1001101 (4)P: 1 1010000 8請用8位二進制數寫出下列字符帶偶校驗的ASCII碼。 (1)+:0101011
8、; (2)=: 0111101 (3)#:0100011 (4)>: 0111110 解: (1)+:0 0101011 (2)=: 1 0111101 (3)#:1 0100011 (4)>: 1 0111110 9敘述 CPU 中PC的作用。解:PC是CPU中的程
9、序計數器,其作用是提供要執(zhí)行指令的地址。 第二章 微處理器體系與結構習題與答案1. 80868088 CPU 由哪兩大部分組成?請分別敘述它們的功能。解:8086/8088 CPU均由兩個獨立的邏輯單元組成,一個稱為總線接口單元BIU(Bus Interface Unit),另一個稱為執(zhí)行單元EU(Execution Unit)。總線接口單元BIU取指令時,從存儲器指定地址取出指令送入指令隊列排隊;執(zhí)行指令時,根據EU命令對指定存儲器單元或I/O端口存取數據。執(zhí)行單元EU任務是執(zhí)行指令,
10、進行全部算術邏輯運算、完全偏移地址的計算,向總線接口單元BIU提供指令執(zhí)行結果的數據和偏移地址,并對通用寄存器和標志寄存器進行管理。 2. 80868088與傳統的計算機相比在執(zhí)行指令方面有什么不同?這樣的設計思想有什么優(yōu)點?解:總線接口部分和執(zhí)行部分是分開的,每當EU執(zhí)行一條指令時,造成指令隊列空出2個或空出一個指令字節(jié)時 ,BIU馬上從內存中取出下面一條或幾條指令,以添滿他的指令隊列。這樣,一般情況下,CPU在執(zhí)行完一條指令后,便可馬上執(zhí)行下一條指令,不像以往8位CPU那樣,執(zhí)行完一條
11、指令后,需等待下一條指令。即EU從指令隊列中取指令、執(zhí)行指令和BIU補充指令隊列的工作是同時進行的。這樣大大提高了CPU利用率,降低了系統都對存儲器速度的要求。 3. 狀態(tài)標志和控制標志有何不同?80868088的狀態(tài)標志和控制標志分別有哪些?解:8086/8088 CPU設立了一個兩字節(jié)的標志寄存器,共九個標志。其中標志位O、S、Z、A、P、C是反映前一次涉及ALU操作結果的狀態(tài)標志,D、I、T是控制CPU操作特征的控制標志。 4.
12、0; 80868088 CPU尋址存儲器時,什么是物理地址?邏輯地址?它們之間有何關系?解:8086/8088系統中每個存儲單元都有一個物理地址,物理地址就是存儲單元的實際地址編碼。在CPU與存貯器之間進行任何信息交換時,需利用物理地址來查找所需要的訪問的存儲單元。邏輯地址由段地址和偏移地址兩部分組成。邏輯地址的表示格式為:段地址:偏移地址。知道了邏輯地址,可以求出它對應的物理地址:物理地址=段地址×10H+偏移地址。 5. 段寄存
13、器CS1200H,指令指針寄存器IPFF00H,此時,指令的物理地址為多少?指向這一物理地址的CS值和IP值是唯一的嗎?解:根據:物理地址=段地址×10H+偏移地址,指令的物理地址為21F00H。指向這一物理地址的CS值和IP值不唯一。 6. 8086 CPU中 信號和A0信號是通過怎樣的組合解決存儲器和外設端口的讀寫的?這種組合決定了8086系統中存儲器偶地址體及奇地址體之間應該用什么信號區(qū)分?怎樣區(qū)分?解:若存取一個字節(jié)的數據,總是用一個總線周期來完成該操作;若存取一個字,則
14、依該字是規(guī)則字還是不規(guī)則字需用一個或兩個總線周期來完成。對規(guī)則字,只用一個總線周期來完成16位數據的傳送,而對于非規(guī)則字則用相鄰兩個總線周期來完成該字的存儲操作,先取其奇地址字節(jié)(即數據的低位字節(jié)),然后存取偶地址字節(jié)。在組成存儲系統時,總是偶地址單元的數據通過AD0AD7傳送,而奇地址單元的數據通過AD8AD15傳送,即通過總線高字節(jié)傳送。 信號和A0信號控制存儲器讀寫見下表: 操作A0 使用的數據總線存取規(guī)則字 00AD15AD0傳送偶地址的一個字節(jié)10AD7AD0傳送奇地址的一個字節(jié)01AD15AD8存取非規(guī)則字 01AD15AD8(第一個總線周期)10AD7AD0(第二個總線
15、周期) 11為非法碼 7什么叫總線?為什么各種微型計算機系統中普遍采用總線結構?答:總線是模塊與模塊之間傳送信息的一組公用信號線??偩€標準的建立使得各種符合標準的模塊可以很方便地掛在總線上,使系統擴展和升級變得高效、簡單、易行。因此微型計算機系統中普遍采用總線結構。8微型計算機系統總線從功能上分為哪三類?它們各自的功能是什么?答:微型計算機系統總線從功能上分為地址總線、數據總線和控制總線三類。地址總線用于指出數據的來源或去向,單向;數據總線提供了模塊間數據傳輸的路徑,雙向;控制總線用來傳送各種控制信號或狀態(tài)信息以便更好協調各功能部件的工作。98086/8088 CPU 分為
16、哪兩個部分?如何協調工作?答:EU是執(zhí)行部件,主要的功能是執(zhí)行指令和形成有效地址。BIU是總線接口部件,與片外存儲器及I/O接口電路傳輸數據,主要功能是形成實際地址、預取指令和存取操作數。EU經過BIU進行片外操作數的訪問,BIU為EU提供將要執(zhí)行的指令。EU與BIU可分別獨立工作,當EU不需BIU提供服務時,BIU可進行填充指令隊列的操作。108086/8088 CPU的地址總線有多少位?其尋址范圍是多少?答:8086/8088 CPU的地址總線共20 位,最大可尋址1MB空間。118086/8088 CPU使用的存儲器為什么要分段?怎么分段?答:8086/8088為16位CPU,其內部的A
17、LU、相關的地址寄存器(如SP、IP以及BX、BP、SI、DI)等都是16位的,因而對存儲器地址的處理也只能是16位操作,即8086/8088的直接尋址能力在64KB范圍內。而實際上8086/8088有20條地址線,它的最大尋址空間為1MB。這就產生了一個矛盾,即如何用16位的地址寄存器去表示一個20位的存儲器物理地址?實際使用的解決辦法是:將1MB大小的存儲空間分為若干“段”,每段不超過64KB。這樣,一個20位的物理地址就可以用“16位段基址:16位偏移量”的形式(稱為邏輯地址)來表示了,其中段地址存放在8086/8088的段寄存器中。128086/8088 CPU 中有幾個通用寄存器?有
18、幾個變址寄存器?有幾個指針寄存器?通常哪幾個寄存器亦可作為地址寄存器使用?答:8086/8088 CPU 中共有:8個16位的通用寄存器AX、BX、CX、DX 、BP、SP、SI、DI;2個變址寄存器SI、DI;2個指針寄存器BP、SP;其中BX、BP、SI、DI 亦可作地址寄存器。13Intel 8086與8088有何區(qū)別?答:8086與8088的區(qū)別主要表現在以下幾個方面:第一、8086的指令隊列可以容納6個字節(jié),每個總線周期在存儲器中取出2個字節(jié)指令代碼填入隊列。而8088只能容納4個字節(jié),且每個總線周期只能取出1個字節(jié)指令代碼。第二、8086外部數據總線寬度為16位,8088外部數據總
19、線寬度只有8位。注意:8086和8088外部數據總線的寬度不同將導致擴展主存儲器及輸入/輸出接口時系統地址線和數據線連接方式的不同。第三、其他不同的引腳定義:(1)AD15AD0,在8086中為地址/數據復用,而在8088中AD15AD8 改為A15A8只作地址線用;(2)34、28號引腳定義不同。148086/8088CPU工作在最小模式時:當CPU訪問存儲器時,要利用哪些信號?當CPU訪問外設接口時,要利用哪些信號?答:8086/8088 CPU工作在最小模式時,若訪問存儲器,需用到以下信號:、ALE、DEN、READY、AD0AD15、A19/S6A16/S3。若訪問外設,需用到以下信號
20、:、ALE、DEN、READY、AD0AD15。15試指出下列運算后的各個狀態(tài)標志,并說明進位標志和溢出標志的區(qū)別:(1)1278H3469H答:CF=0 AF=1 ZF=0 SF=0 OF=0 PF=1(2)54E3H27A0H答:CF=0 AF=0 ZF=0 SF=0 OF=0 PF=0(3)3881H3597H答:CF=0 AF=0 ZF=0 SF=0 OF=0 PF=1(4)01E3H01E3H答:CF=0 AF=0 ZF=1 SF=0 OF=0 PF=1其中,進位標志CF 用于判別無符號數運算是否超出數的表示范圍,而溢出標志OF 用于判別帶符號數運算是否超出數的表示范圍。奇偶標志PF
21、 只能判斷結果低8 位中“1”的個數為奇數還是偶數。16什么是邏輯地址?什么是物理地址?它們之間有什么聯系?各用在何處?答:邏輯地址由兩個16 位的部分即段基址和偏移量組成,一般在程序中出現的地址都表示為邏輯地址形式;物理地址是一個20 位的地址,它是唯一能代表存儲空間每個字節(jié)單元的地址,一般只出現在地址總線上。由于8086/8088CPU 中的寄存器只有16 位長,所以程序不能直接存放20 位的物理地址,而必須借助邏輯地址,即用兩個16 位的寄存器來表示物理地址。他們之間的關系是:物理地址段基址*16偏移量;另外,一個物理地址可對應多個邏輯地址。17設現行數據段位于存儲器0B0000H0BF
22、FFFH 單元,DS 段寄存器內容為多少?答: DS 段寄存器內容為0B000H。18在8086中,邏輯地址、偏移地址、物理地址分別指的是什么? 答:邏輯地址是在程序中對存儲器地址的一種表示方法,由段基址和段內偏移地址兩部分組成,都是16位的二進制代碼,如1234H:0088H。偏移地址是指段內某個存儲單元相對該段首地址的差值。物理地址是8086芯片引線送出的20位地址碼,物理地址=段基址*16+偏移地址,用來指出一個特定的存儲單元。19給定一個存放數據的內存單元的偏移地址是20C0H,(DS)=0C0E0H,求出該內存單元的物理地址。答:物理地址:0C2EC0H。208086/8088為什么
23、采用地址/數據引線復用技術?答:考慮到芯片成本和體積,8086/8088采用40條引線的封裝結構。40條引線引出8086/8088的所有信號是不夠用的,采用地址/數據線復用引線方法可以解決這一矛盾,從邏輯角度,地址與數據信號不會同時出現,二者可以分時復用同一組引線。21怎樣確定8086的最大或最小工作模式? 答:引線的邏輯狀態(tài)決定8086的工作模式,引線接高電平,8086被設定為最小模式,引線接低電平,8086被設定為最大模式。228086基本總線周期是如何組成的?答:基本總線周期由4個時鐘(CLK)周期組成,按時間順序定義為T1、T2、T3、T4。23在基于8086的微計算機系統中,存儲器是
24、如何組織的?存儲器是如何與處理器總線連接的?信號起什么作用?答:8086為16位微處理器,可訪問1M字節(jié)的存儲器空間;1M字節(jié)的存儲器分為兩個512K字節(jié)的存儲體,分別命名為偶存儲體和奇存儲體;偶體的數據線連接D7D0,“體選”信號接地址線A0;奇體的數據線連接D15D8,“體選”信號接信號;A0信號有效時允許訪問偶體中的低字節(jié)存儲單元,信號有效時允許訪問奇體中的高字節(jié)存儲單元,實現8086的低字節(jié)訪問、高字節(jié)訪問及字訪問。24有一個由20個字組成的數據區(qū),其起始地址為610AH:1CE7H。試寫出該數據區(qū)首末單元的實際地址PA。首單元地址:610A0H+1CE7H=62D87H末單元地址:6
25、2D87H27H=62DAEH25有兩個16位的字31DAH、5E7FH,它們在8086系統存儲器中的地址為00130H和00135H,試畫出它們的存儲器示意圖。地址內容00130H0DAH00131H31H00132H00133H00134H00135H7F00136H5E26試說明8086CPU的控制引腳ALE的作用。答:8086的低位地址線與數據線復用,為保證地址線維持足夠的時間,需使用ALE信號將低位地址線通過鎖存器保存,以形成系統地址總線。 第三章 80x86指令系統習題與答案1、指出下列指令中操作數的尋址方式(8086系統)。(1) MOV AX,
26、100 (2) MOV AX,100(3) MOV DL,BP+SI (4) MOV BX,CX(5) MOV DX,SI
27、; (6) MOV 1234HBX,DS(7) MOV DI+5678H,AL (8) MOV 12BPDI,BH(9) POP CX
28、; (10)MOV AX,BX+SI+10解: 目的操作數源操作數(1) MOV AX,100寄存器尋址立即數尋址(2) MOV AX,100寄存器尋址直接尋址(3) MOV DL,BP+SI寄存器尋址基址變址尋址(4) MOV BX,CX寄存器間接尋址寄存器尋址(5) MOV DX,SI寄存器尋址寄存器間接尋址(6) M
29、OV 1234HBX,DS寄存器相對尋址寄存器尋址(7) MOV DI+5678H,AL寄存器相對尋址寄存器尋址(8) MOV 12BPDI,BH相對基址變址尋址寄存器尋址(9) POP CX隱含為堆棧寄存器尋址(10)MOV AX,BX+SI+10寄存器尋址相對基址變址尋址 2、指出下列指令中操作數的尋址方式(80386系統)。(1) MOV EBX+12H,AX
30、60; (2) MOV EBP+EDI*2,EBX(3) MOV EBX*4,BX (4) MOV EDX,EAX+ESI*8-12H解:目的操作數源操作數(1)寄存器相對尋址 寄存器尋址 (2)基址比例變址尋址寄存器尋址(3)比例變址尋址 寄存器尋址(4)寄存器尋址相對基址比例變址尋址
31、 3、指出以下指令中,哪些指令是非法的,并說明為什么(8086系統)。(1) PUSH 1234H (2) MOV CS,AX(3) IN AX, 300
32、 (4) MOV AX,DX+12(5) MOV BX,BX (6) MOV DS,1000H(7) XCHG AL,AL
33、; (8) MOV AL,100H(9) MOV DX,AL (10)LEA BL,BX+5(11)LEA DX,BX &
34、#160; (12)MOV 1000H,12H(13)ADD AX,DS (14)SUB 0100H,BYTE PTR 0001(15)SHL BL,2
35、160; (16)SHR CL,CL(17)MUL AL,BL (18)INT 400 解:(1)非法,8086系統不允許PUSH指令的操作數為立即數;(2)
36、非法,MOV指令中CS不能作為目的操作數;(3)非法,端口號大于0FFH;(4)非法,DX不能出現在中括號內;(5)合法;(6)非法,不能把立即數賦給段寄存器;(7)合法;(8)非法,源操作數大于0FFH,不能賦給8位寄存器AL;(9)非法,源操作數是8位寄存器,目的操作數卻是16位寄存器,不匹配;(10)非法,LEA指令得到的是16位偏移量,但目的操作數是8位寄存器;(11)非法,LEA指令的源操作數只能是存儲器操作數;(12)非法,指令存在歧義,無法確定傳送的是字節(jié)還是字;(13)非法,段寄存器不能參與算術運算;(14)非法,源和目的寄存器不能同為存儲器操作數;(15)非法,在8086系統
37、中,移位次數大于1時需要將移位次數存放到CL中;(16)合法;(17)非法,在8086系統中MUL指令沒有雙操作數的用法;(18)非法,中斷類型號大于0FFH。 4、指出以下指令中,哪些指令是非法的,并說明為什么(80386系統)。(1) MOV AX,12EBXSI*16 (2) RCR EAX,10(3) PUSH 5678H
38、160; (4) POP 1000H(5) MOV EAX+EAX,EAX (6) MOV AL,ESP+ESP*2(7) MOV BL,AX+12 (8) IMUL AL,BL,
39、12 解:(1)非法,比例因子只能是1、2、4、8,不能是16;(2)合法;(3)合法;(4)非法,POP指令的目的操作數不能是立即數;(5)合法;(6)非法,ESP只能作為基址寄存器,不能作為變址寄存器;(7)非法,在386系統中AX不能作為基址寄存器,也不能作為變址寄存器;(8)合法。 5、假設(AX)=1234H,(BX)=5678H,(SP)=1000H,指出執(zhí)行下面的程序段后,各相關寄存器及堆棧段中的內容。PUSH AX ;(AX)=?,(BX)=?,(SP)=?,棧頂字節(jié)SP=?, 棧頂第二字節(jié)SP+1
40、=?PUSH BX ;(AX)=?,(BX)=?,(SP)=?,棧頂字節(jié)SP=?, 棧頂第二字節(jié)SP+1=?POP AX ;(AX)=?,(BX)=?,(SP)=?,棧頂字節(jié)SP=?, 棧頂第二字節(jié)SP+1=? 解:(AX)=1234H,(BX)=5678H,(SP)=0FFEH,棧頂字節(jié)SP=34H,棧頂第二字節(jié)SP+1=12H(AX)=1234H,(BX)=5678H,(SP)=0FFCH,棧頂字節(jié)SP=78H,棧頂第二字節(jié)SP+1=56H(AX)=
41、5678H,(BX)=5678H,(SP)=0FFEH,棧頂字節(jié)SP=34H,棧頂第二字節(jié)SP+1=12H 6、假設A、B、C、D、X、Y為字節(jié)變量,AA、BB、YY為字變量,試利用算術運算指令編寫程序段,完成以下各算術運算題。(1)計算YYA+B*C,其中A、B、C都是無符號數;(2)計算(AA+BB)/(C-D),商賦給X,余數賦給Y,其中AA、BB、C、D都是帶符號數;(3)計算YY(A-B)*C,其中A、B、C都是未組合BCD碼。解:(1)MOV AL,B &
42、#160; MUL C ADD AL,A ADC AH,0 MOV YY,AX(2)MOV AX,AA
43、60; ADD AX,BB MOV BL,C SUB BL,D IDIV BL
44、60; MOV X,AL MOV Y,AH(3)MOV AL,A SUB AL,B AAS
45、60; MUL CAAMMOV YY, AX 7、利用移位指令編寫程序段,實現以下運算。(1)計算AXAX*10,其中AX為無符號數;(2)32位帶符號數存放在寄存器DX和AX中,其中DX存放高16位,AX存放低16位計算(DX,AX)(DX,AX)*2。(3)32位帶符號數存放在寄存器DX和AX中,其中DX存放高16位,AX存放低16位計算(DX,AX)(DX,AX)/2。解:(1)SHL
46、160; AX,1 MOV BX,AX SHL AX,1 SHL AX,1 ADD &
47、#160; AX,BX(2)SAL AX,1 RCL DX,1(3)SAR DX,1RCR AX,1 8、指出以下指令執(zhí)行后,標志寄存器OF、SF、ZF、AF、PF、CF的狀態(tài)。(1)(AL)=0FFH,(BL)=20H,執(zhí)行指令:ADD AL,BL(2)(AL)=01H, (BL)=02H,執(zhí)行
48、指令:CMP AL,BL(3)(AL)=0FFH,執(zhí)行指令:INC AL(4)(AL)=0,執(zhí)行指令:DEC AL(5)(AL)=0F0H,(BL)=04H,執(zhí)行指令:IMUL BL(6)(AX)=1F0H,(BL)=08H,執(zhí)行指令:DIV BL(7)(AL)=12H, (BL)=34H,執(zhí)行指令:TEST AL,BL(8)(AL)=98H,執(zhí)行指令:SAL AL,1解: OFSFZFAFPFCF(1)000001(2)010111(3)0
49、0111×(4)01011×(5)00(6)(7)00000(8)10011注:0表示結果為0,1表示結果為1,×表示結果不變,表示結果不確定。 9、在8086系統下,編寫實現如下功能的程序段:(1)從地址為80H的端口中讀入一個字節(jié);(2)如果該字節(jié)最高位為“1”,則將字節(jié)0FFH送到地址為81H的端口中,并退出程序;(3)如果該字節(jié)最高位為“0”,則轉向第(1)步,繼續(xù)循環(huán)掃描。 解: 參考程序段:AGAIN: IN AL, 80HTEST AL
50、, 80HJZ AGAINMOV AL, 0FFHOUT 81H, AL 10、我們知道,MOV指令并不能直接修改CS、IP的值,但事實上,我們還可以通過其他方法來達到修改CS、IP的目的。試編寫一個程序段,使該程序段運行后,(CS)=0100H,(IP)=0000H。解:方法一、利用段間返回指令RETF:MOV AX,0100HPUSH AX
51、160; ;段基址入棧MOV AX,0PUSH AX ;偏移量入棧RETF方法二、利用JMP指令實現段間跳轉,假設ADDR為雙字變量:MOV WORD PTR ADDR,0
52、0; ;WORD PTR ADDR偏移量MOV WORD PTR ADDR+2, 0100H ;WORD PTR ADDR+2段基址JMP DWORD PTR ADDR 11.寫出能完成下述操作的指令。 (1)將立即數 1234H 送至 DS 寄存器。 (2)將存儲單元 3000H 和內容送至 4000H 單元。 (3)將累加器 AX 與寄存器 CX 中的內容對調。 答案: (1)MOV AX, 123
53、4H MOV DS, AX (2) MOV AX, 3000H MOV 4000H, AX (3) XCHG AX, CX 12.編程:將數據段中以 BX 為偏移地址的連續(xù) 4 單元的內容顛倒過來。 答案: MOV AL, BX XCHG AL, BX+3 MOV BX, AL MOV AL,BX+1 XCHG AL, BX+2 MOV BX+1, AL 13.將 AX 寄存器清零有 4 種方法,試寫出這 4 條指令。 答案:MOV AX, 00H SUB AX, AX AND AX, 00H XOR AX, AX 14.使用一條邏輯運算指令實現下列要求: (1)使 AL 高 4 位不變,低
54、4 位為 0。 (2)使 AL 最高位置 1,后 7 位不變。 (3)使 AL 中的 bit3、bit4 變反,其余位不變。 (4)測試判斷 CL 中的 bit2、bit5、bit7 是否都為 1。 答案: (1) AND AL, 0F0H (2)OR AL, 80H (3)XOR AL 18H (4)TEST AL, 0A4H 15.試分析下面的程序段完成什么功能。 MOV CL, 4 SHL AX, CL SHL BL, CL MOV AL, BL SHR DH, CL OR AL, DH 答案:將 AX 中間 8 位,BX 的低 4 位,DX 的高 4 位組成一個新字存放在 AX 中。
55、16.若要將源串 100 個字節(jié)數據傳送到目標串單元中去,設源串首址的偏移地址為 2500H, 目標串首址的偏移地址為 1400H,請編寫程序實現以下功能。 (1)完成源串到目標串的搬移。 (2)比較兩串是否完全相同,若兩串相同,則 BX 寄存器內容為 0;若兩串不同,則 BX 指向 源串中第一個不相同字節(jié)的地址,且該字節(jié)的內容保留在 AL 的寄存器中。 答案: (1) CLD MOV CX, 100 MOV SI, 2500H MOV DI, 1400H REP MOVSB (2) CLD MOV CX, 100 MOV SI, 2500 MOV DI, 1400 REPE CMPSB JZ
56、 EQQ DEC SI MOV BX, SI MOV AL, SI JMP STOP EQQ: MOV BX, 0 STOP: HLT 17設若標志寄存器原值為0A11H,(SP)=0060H,(AL)=4。下列幾條指令執(zhí)行后,標志寄存器、AX、SP的值分別是多少?PUSHFLAHFXCHG AH,ALPUSH AXSAHFPOPF答:指令執(zhí)行后標志寄存器的值為0411H,AX=0411H ,SP=005EH。18假如在程序的括號中分別填入指令:(1) LOOP L20(2) LOOPNE L20(3) LOOPE L20試說明在三種情況下, 當程序執(zhí)行完后, AX、BX、CX、DX四個寄存器
57、的內容分別是什么? BEGIN:MOVAX,01MOVBX,02MOVDX,03MOVCX,04L20:INC AXADDBX,AXSHR DX,1( )答案: (1)(AX)= 5 (BX)= 16 (CX)= 0 (DX)= 0(2)(AX)= 3 (BX)= 7 (CX)= 2 (DX)= 0(3)(AX)= 2 (BX)= 4 (CX)= 3 (DX)= 119變量N1和N2均為2字節(jié)的非壓縮BCD數碼,請寫出計算N1與N2之差的指令序列。答案:MOVAX, 0MOVAL, N1SUB AL, N2AASMOVDL, ALMOVAL, N1+1SBBAL, N2+1AASMOVDH,
58、AL20在已學的指令中,可實現累加器清0的單條指令有哪些?比較它們的功能。答:(1)MOVAX,0;僅將累加器清0,不會影響任何標志位(2)SUBAX,AX;累加器清0的同時影響所有狀態(tài)標志,具體地有:ZF、PF置1,CF、AF、SF、OF均清0(3)ANDAX,0;將累加器清0,ZF、PF置1,CF、OF、SF清0(4)XORAX,AX;將累加器清0,ZF、PF置1,CF、OF、SF清021已知(DS)=2000H,有關的內存單元值為:(21000H)=00H,(21001H)=12H,(21200H)=00H,(21201H)=10H,(23200H)=20H,(23201H)=30H,(
59、23400H)=40H,(23401H)=30H,(23600H)=60H,(23601H)=30H,符號COUNT的偏移地址為1200H。執(zhí)行下列指令后,寄存器AX、BX、SI的值分別是多少?MOVBX,OFFSET COUNTMOVSI,BXMOVAX,COUNTSIBX答:執(zhí)行結果為(BX)=1200H,(SI)=1000H,(AX)=3040H。22設若內存單元DATA在數據段中偏移量為24C0H處,24C0H24C3H單元中依次存放著55H、66H、77H、88H。下列幾條指令執(zhí)行后,寄存器AX、BX、CL、SI、DS的值分別是多少?MOVAX,DATALEASI,DATAMOVCL
60、,SILDSBX,DATA答:執(zhí)行結果為(AX)=6655H,(BX)=6655H,(CL)=55H,(SI)=24C0H,(DS)=8877H。23若(AX)=26D3H,(CX)=7908H,CF=1,執(zhí)行下列指令后,寄存器AX、CX的值分別是多少?CF=?OF=?SALCH,1RCRAX,CLROLAL,1答:執(zhí)行結果為(AX)=0A64CH,(CX)=0F208H,CF=OF=0。24已知有程序段如下:MOVAL,35HMOVDL,ALANDDL,0FHANDAL,0F0HMOVCL,4SHRAL,CLMOVBL,10MULBLADDAL,DL執(zhí)行之后,AL的值等于多少?該程序段完成了
61、什么功能?答:程序段執(zhí)行后(AL)=23H。該程序段實現了將AL中的1個組合BCD碼轉換為十六進制數并存回AL中的功能。25下面的程序執(zhí)行后,DX、AX的值分別是多少?;以X為首址的字單元中的數據依次為1234H、5678H;以Y為首址的字單元中的數據依次為8765H、4321HLEASI,XLEADI,YMOVDX,SI2MOVAX,XADDAX,XADCDX,SI2CMPDX,DI2JLL2CMPAX,YJLL1JMPEXITL1: MOVAX,1JMPEXITL2: MOVAX,2EXIT:答:執(zhí)行結果為(AX)=2,(DX)=0ACF0H。26設VAR字單元的值為x,F1字單元的值為y
62、,試編程按以下要求給y賦值: 2x>30 y = 0 30x12x<1答:一種可能的程序段實現如下:MOVAX,VAR ;AX ¬ xCMPAX,30JGPLUS2;x>30,則轉PLUS2CMPAX,1JLMIN2;x<1,則轉MIN2MOVF1,0;30x1,y=0JMPGOPLUS2:MOVF1,2;y=2JMPGOMIN2: MOV F1,-2;y = -2或00FEHGO:;后續(xù)處理簡析:本例中并未說明VAR字節(jié)單元是帶符號數還是無符號數,讀者在使用判斷轉移指令時可任意選用。若當作帶符號數,應使用JG、JL、JGE、JLE等指令,如參考程序;若當作無
63、符號數,則應使用JA、JB、JAE、JBE等指令。第四章 80x86匯編語言程序設計習題與答案1、指出以下數據定義偽指令所分配的字節(jié)數(8086系統)。(1)DATA1DB10,?,A(2)DATA2DW10 DUP(2,3 DUP(?),1)(3)DATA3DBHELLO,WORLD!,$(4)DATA4DWDATA4 解:(1)3字節(jié);(2)100字節(jié);(3)13字節(jié);(4)2字節(jié)。 2、指出以下數據定義偽指令所分配的字節(jié)數(80386系統)。(1)DATA1DF12,34,56(2)DATA2DFDATA2(3)DATA3DQ0,10 DUP(?)(4)DATA4DT
64、0,1,2 解:(1)18字節(jié);(3)6字節(jié);(3)88字節(jié);(4)30字節(jié)。 3、指出以下指令中哪些是無效的,并說明原因。(1)ADDRDB$(2)DATADBF0H,12H(3)1_DATADW1234H(4)VARDWVAR1;VAR1為一個字節(jié)變量(5)MOVAX,10-VAR1;VAR1為一個字變量(6)MOVBX,VAR2*2+1;VAR2為一個字變量解:(1)非法,地址計數器$是32位數;(2)非法,以字母開頭的16進制數應在前面加“0”,即應為“0F0H”;(3)非法,變量名非法,不能以數字開頭;(4)合法;(5)非法,地址表達式不能是“常數-地址”;(6)
65、非法,地址表達式不能出現乘法。 4、假設已定義數據段如下:DATASEGMENTORG100HDATA1DB10 DUP(1,2,3)DATA2DWDATA1,$DATAENDS且段寄存器DS已初始化為該數據段的段基址(假設段基址為1234H)。請指出以下指令執(zhí)行后,相應的寄存器中的內容。(1)MOVAX,WORD PTR DATA1;(AX)=?(2)MOVBX,DATA2;(BX)=?(3)MOVCX,DATA2+2;(CX)=?(4)MOVDX,OFFSETDATA2;(DX)=?(5)MOVSI,SEGDATA1;(SI)=?(6)MOVDI,LENGTHDATA1;(DI)
66、=?(7)MOVSP,TYPE DATA1;(SP)=?(8)MOVBP,SIZE DATA2;(BP)=? 解:(1)(AX)=0201H;(2)(BX)=0100H;(3)(CX)=0120H;(4)(DX)=011EH;(5)(SI)=1234H;(6)(DI)=000AH;(7)(SP)=0001H;(8)(BP)=0002H。 5、在8086系統下,編寫完整程序,實現從鍵盤上輸入8位二進制數,從顯示器上顯示相應的16進制數,例如從鍵盤上輸入“00010010”,應在顯示器上顯示“12H”。解:參考程序:DATASEGMENTMSG1DB'Input bin
67、ary number(ESC to exit):','$'MSG2DB0AH,0DH,'Input error!',0AH,0DH,'$'DATAENDSOUTPUTMACROASC;定義輸出一個字符的宏MOVDL, ASCMOVAH, 2INT21HENDMCODESEGMENTASSUMECS:CODE, DS:DATAMAINPROCFARPUSHDSMOVAX, 0PUSHAXMOVAX, DATAMOVDS, AXAGAIN:LEADX, MSG1MOVAH, 9INT21H;提示輸入信息MOVCX, 8;輸入8位二進制數MOVBL, 0L:MOVAH, 1INT21HSHLBL, 1CMPAL, 1BH;ESC鍵退出JZDONECMPAL, '0';輸入“0”JZNEXTCMPAL, '1';輸入“1”JNZERROR;輸入其他則出錯INCBLNEXT:LOOPLOUTPUT0AHO
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯系上傳者。文件的所有權益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網頁內容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
- 4. 未經權益所有人同意不得將文件中的內容挪作商業(yè)或盈利用途。
- 5. 人人文庫網僅提供信息存儲空間,僅對用戶上傳內容的表現方式做保護處理,對用戶上傳分享的文檔內容本身不做任何修改或編輯,并不能對任何下載內容負責。
- 6. 下載文件中如有侵權或不適當內容,請與我們聯系,我們立即糾正。
- 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
評論
0/150
提交評論