版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進行舉報或認領(lǐng)
文檔簡介
1、第三章 8086/8088 指令系統(tǒng)和尋址方式 習題答案3.1 總結(jié)計算機中十進制、二進制、八進制及十六進制數(shù)的書寫形式。123D、0AFH、77Q、1001110B 分別表示什么計數(shù)制的數(shù)?答案:123D、0AFH、77Q、1001110B 分別表示十進制、十六進制、八進制、二進制。3.2 字長為8 位、16 位二進制數(shù)的原碼、補碼表示的最大數(shù)和最小數(shù)分別是什么?答案:8 位原碼表示的最大數(shù):(27-1)、8 位補碼表示的最大數(shù):(27-1)、8 位原碼表示的最小數(shù):-(27-1)、8 位補碼表示的最小數(shù)-27。16 位原碼表示的最大數(shù):(215-1)、16 位補碼表示的最大數(shù):(215-1
2、)、16 位原碼表示的最小數(shù):-(215-1)、16 位補碼表示的最小數(shù)-215。3.3 把下列十進制數(shù)分別轉(zhuǎn)換為二進制數(shù)和十六進制數(shù)。(1)125 (2)255 (3)72 (4)5090答案:(1) 125 二進制數(shù):0111 1101B;十六進制數(shù):7DH。(2)255 二進制數(shù):1111 1111B;十六進制數(shù):0FFH。(3)72 二進制數(shù):0100 1000B;十六進制數(shù):48H。(4)5090 二進制數(shù):0001 0011 1110 0010B;十六進制數(shù):13E2H。3.4 把下列無符號二進制數(shù)分別轉(zhuǎn)換為十進制數(shù)和十六進制數(shù)。(1)1111 0000 (2)1000 0000
3、(3)1111 1111 (4)0101 0101答案:(1)1111 0000 十進制數(shù):240D;十六進制數(shù):0F0H。(2)1000 0000 十進制數(shù):128D;十六進制數(shù):80H。(3)1111 1111 十進制數(shù):255D;十六進制數(shù):0FFH。(4)0101 0101 十進制數(shù):85D;十六進制數(shù):55H。3.5 把下列無符號十六進制數(shù)分別轉(zhuǎn)換為十進制數(shù)和二進制數(shù)。(1)FF (2)ABCD (3)123 (4)FFFF答案:(1)FF 十進制數(shù):255D;二進制數(shù);1111 1111B。(2)ABCD 十進制數(shù):43981D;二進制數(shù);1010 1011 1100 1101B。
4、(3)123 十進制數(shù):291D;二進制數(shù);0001 0010 0011B。(4)FFFF 十進制數(shù):65535D;二進制數(shù);1111 1111 1111 1111B。3.6 分別用8 位二進制數(shù)和16 位二進制數(shù)寫出下列十進制數(shù)的原碼和補碼。(1)16 (2)-16 (3)+0 (4)-0 (5)127 (6)-128 (7)121 (8)-9答案:(1)16 8 位二進制數(shù)原碼:0001 0000 補碼:0001 0000;16 位二進制數(shù)原碼:0000 00000001 0000 補碼: 0000 0000 0001 0000。(2)-16 8 位二進制數(shù)原碼:1001 0000 補碼:
5、1111 0000;16 位二進制數(shù)原碼:1000 00000001 0000 補碼:1111 1111 1111 0000。(3)+0 8 位二進制數(shù)原碼:0000 0000 補碼:0000 0000;16 位二進制數(shù)原碼:0000 00000000 0000 補碼:0000 0000 0000 0000。(4)-0 8 位二進制數(shù)原碼:1000 0000 補碼:0000 0000;16 位二進制數(shù)原碼:1000 00000000 0000 補碼: 0000 0000 0000 0000。(5)127 8 位二進制數(shù)原碼:0111 1111 補碼: 0111 1111;16 位二進制數(shù)原碼:
6、0000 00000111 1111 補碼: 0000 0000 0111 1111。(6)-128 8 位二進制數(shù)原碼:無 補碼: 1000 0000 ;16 位二進制數(shù)原碼:1000 00001000 0000 補碼:1111 1111 1000 0000。(7)121 8 位二進制數(shù)原碼:0111 1001 補碼: 0111 1001;16 位二進制數(shù)原碼:0000 00000111 1001 補碼: 0000 0000 0111 1001。(8)-9 8 位二進制數(shù)原碼:1000 1001 補碼:1111 0111;16 位二進制數(shù)原碼:1000 00001000 1001 補碼:11
7、11 1111 1111 0111。3.7 試實現(xiàn)下列轉(zhuǎn)換。(1)原10111110B,求補 (2)補11110011B,求-補(3)補10111110B,求原 (4)補10111110B,求反答案:(1) 1100 0010 (2) 0000 1101 (3) 1100 0010 (4) 1011 11013.8 假設(shè)兩個二進制數(shù)A01101010,B10001100,試比較它們的大小。(1)A、B 兩數(shù)均為帶符號的補碼數(shù) (2)A、B 兩數(shù)均為無符號數(shù)答案:(1)A、B 兩數(shù)均為帶符號的補碼數(shù):AB(2)A、B 兩數(shù)均為無符號數(shù):AB3.9 下列各數(shù)均為十進制數(shù),請用8 位二進制數(shù)補碼計算
8、下列各題,用十六進制數(shù)表示其運算結(jié)果,并判斷是否溢出,驗證教材中所給的判斷依據(jù)。(1)90+71 (2)90-71 (3)-90-71 (4)-90+71 (5)-90-(-71)答案:(1)90+71=161127 溢出90補+71補=0101 1010+0100 0111=1010 0001=0A1H=-91補(2)90-71=19127 無溢出90補+-71補=0101 1010+1011 1001=0001 0011=13H=19補(3)-90-71=-161-128 溢出-90補+-71補=1010 0110+1011 1001=0101 1111=5FH=95補(4)-90+71=
9、-19-128 無溢出-90補+71補=1010 0110+0100 0111=1110 1101=0EDH=-19補(5)-90-(-71)=-19-128 無溢出-90補+71補=1010 0110+0100 0111=1110 1101=0EDH=-19補3.10 完成下列8 位二進制數(shù)的邏輯運算。(1)1100110010101010 (2)1100110010101010(3)1100110010101010 (4)1010110010101100(5)1010110010101100 (6)1010110010101100(7)10101100答案:(1)1100110010101
10、010=1000 1000 (2)1100110010101010=1110 1110(3)1100110010101010=0110 0110 (4)1010110010101100=1010 1100(5)1010110010101100=0000 0000 (6)1010110010101100=1010 1100(7)10101100=0101 00113.11 以下均為2 位十六進制數(shù),試說明當把它們分別看作無符號數(shù)或字符的ASCII 碼值,它們所表示的十進制數(shù)和字符是什么?(1)30H (2)39H (3)42H (4)62H (5)20H (6)7H答案:(1)30H 所表示的十
11、進制數(shù)是:48D;字符是:0。(2)39H 所表示的十進制數(shù)是:57D;字符是:9。(3)42H 所表示的十進制數(shù)是:66D;字符是:B。(4)62H 所表示的十進制數(shù)是:98D;字符是:b。(5)20H 所表示的十進制數(shù)是:32D;字符是:sp 空格。(6)7H 所表示的十進制數(shù)是:7D;字符是:BEL 報警。3.12 把以下十進制數(shù)分別以壓縮BCD 碼、非壓縮BCD 碼、ASCII 碼串表示。(1)2 (2)78答案:(1)2 壓縮BCD 碼:0010、非壓縮BCD 碼:0000 0010、ASCII 碼:011 0010(2)78 壓縮BCD 碼:0111 1000、非壓縮BCD 碼:0
12、000 0111 0000 1000、ASCII 碼:01101110111003.13 設(shè)浮點數(shù)格式如下圖所示:階碼、尾數(shù)均以補碼表示,基數(shù)為2,求:+25.6 和-361.25 的規(guī)格化浮點數(shù)。答案:1) +25.6D=11001.1001100110B=0.110011001100110×25+5=0101B,補碼:0101,尾數(shù): 0.110011001100110補=0.110011001100110規(guī)格化浮點數(shù):0 0000101 0 1100110011001102) -361.25D=-101101001.01B=29×(-0.101101001010000
13、)+9=1001,補碼:1001,尾數(shù): -0.101101001010000補=1.010010110110000規(guī)格化浮點數(shù):0 0001001 1 0100101101100003.14 設(shè)某計算機用12 位表示一個浮點數(shù),該浮點數(shù)從高位到低位依次為:階符1 位、階碼3 位(原碼表示)、數(shù)符1 位、尾數(shù)7 位(補碼表示),則0 100 1 0110011 的真值是多少?答案:-9.6253.15 8086 匯編語言指令的尋址方式有哪幾類?哪種尋址方式的指令執(zhí)行速度最快?解:尋址方式分為:立即數(shù)尋址方式、寄存器操作數(shù)尋址方式和存儲器操作數(shù)尋址方式。其中,寄存器操作數(shù)尋址方式的指令執(zhí)行速度最
14、快。3.16 在直接尋址方式中,一般只指出操作數(shù)的偏移地址,那么,段地址如何確定?如果要用某個段寄存器指出段地址,指令中應(yīng)該如何表示?解:默認的數(shù)據(jù)訪問,操作數(shù)在DS 段;堆棧操作在SS 段;串操作源操作數(shù)(SI)在DS段,目的操作數(shù)(DI)在ES 段;用BP 作為指針在SS 段。如果要顯式地指定段地址,則在操作數(shù)中規(guī)定段寄存器。例如:MOV AX, ES:(BX+10H)3.17 8086 系統(tǒng)中,設(shè)DS=1000H,ES=2000H,SS=1200H,BX=0300H,SI=0200H,BP=0100H,VAR 的偏移量為0600H,請指出下列指令的目標操作數(shù)的尋址方式,若目標操作數(shù)為存儲
15、器操作數(shù),計算它們的物理地址。(1)MOV BX,12 ;目標操作數(shù)為寄存器尋址(2)MOV BX,12 ;目標操作數(shù)為寄存器間址 PA=10300H(3)MOV ES:SI,AX ;目標操作數(shù)為寄存器間址 PA=20200H(4)MOV VAR,8 ;目標操作數(shù)為存儲器直接尋址 PA=10600H(5)MOV BXSI,AX ;目標操作數(shù)為基址加變址尋址 PA=10500H(6)MOV 6BPSI,AL ;目標操作數(shù)為相對的基址加變址尋址 PA=12306H(7)MOV 1000H,DX ;目標操作數(shù)為存儲器直接尋址 PA=11000H(8)MOV 6BX,CX ;目標操作數(shù)為寄存器相對尋址
16、 PA=10306H(9)MOV VAR+5,AX ;目標操作數(shù)為存儲器直接尋址 PA=10605H3.18 下面這些指令中哪些是正確的?那些是錯誤的?如果是錯誤的,請說明原因。(1)XCHG CS,AX ;錯,CS 不能參與交換(2)MOV BX,1000 ;錯,存儲器之不能交換(3)XCHG BX,IP ;錯,IP 不能參與交換(4)PUSH CS ;錯,CS 不能為PUSH 的操作數(shù)(5)POP CS ;錯,不能將數(shù)據(jù)彈到CS 中(6)IN BX,DX ;輸入/輸出只能通過AL/AX(7)MOV BYTEBX,1000 ;1000 大于255,不能裝入字節(jié)單元(8)MOV CS,1000
17、 ;CS 不能作為目標寄存器(9)MOV BX,OFFSET VARSI ;OFFSET 只能取變量的偏移地址(10)MOV AX,SIDI ;SI、DI 不能成為基址加變址(11)MOV COUNTBXSI,ES:AX ;AX 是寄存器,不能加段前綴3.19 試述以下指令的區(qū)別: MOV AX,3000H 與 MOV AX,3000H答案: MOV AX,3000H 指令源操作數(shù)的尋址方式為立即尋址方式,指令執(zhí)行結(jié)果為:(AX)=3000H。 而MOV AX,3000H指令源操作數(shù)的尋址方式為直接尋址方式,指令執(zhí)行結(jié)果為:DS:3000H)_AX。 MOV AX,MEM 與 MOV AX,O
18、FFSET MEM答案: MOV AX,MEM 指令源操作數(shù)的尋址方式為直接尋址方式,指令執(zhí)行結(jié)果為:DS:MEM)_AX。 而MOV AX,OFFSET MEM 指令的執(zhí)行結(jié)果是把MEM 的偏移量送AX。 MOV AX,MEM 與 LEA AX,MEM答案: MOV AX,MEM 指令的執(zhí)行結(jié)果是LDS:MEM)_AX。 而LEA AX,MEM的執(zhí)行結(jié)果是把MEM 的偏移量送AX。(4) JMP SHORT L1 與 JMP NEAR PTR L1答案:JMP SHORT L1 為段內(nèi)無條件短程轉(zhuǎn)移,跳轉(zhuǎn)的范圍不得超過帶符號的8 位二進制數(shù)表示的字節(jié)范圍;JMP NEAR PTR L1 為段
19、內(nèi)無條件近程轉(zhuǎn)移,跳轉(zhuǎn)的范圍不得超過帶符號的16 位二進制數(shù)表示的字節(jié)范圍。(5) CMP DX,CX 與 SUB DX ,CX答案:CMP DX,CX 是比較,也是利用減法比較,但是dx 中的值不變,標志寄存器改變。SUB DX ,CX 是做減法運算,dx 中為減后的值,標志寄存器改變(6)MOV BPSI,CL 與 MOV DS: BPSI,CL答案:BP 默認的段基址是SS,物理地址PA=SS+BP+SI;第二個重定義為DS 段基址,物理地址PA=DS+BP+SI3.20 設(shè)DS=2100H,SS=5200H,BX=1400H,BP=6200H,說明下面兩條指令所進行的具體操作:MOV
20、BYTE PTR BP, 20HMOV WORD PTR BX, 20H解:前一條指令是把立即數(shù)20H,傳送至堆棧段(BP 的默認段)偏移量由BP 規(guī)定的字節(jié)單元,地址為:52000H+6200H=58200H第二條指令是把立即數(shù)20H,傳送至數(shù)據(jù)段(BX 的默認段)偏移量由BX 規(guī)定的字單元,地址為:21000H+1400H = 22400H。3.21 設(shè)當前 SS=2010H,SP=FE00H,BX=3457H,計算當前棧頂?shù)牡刂窞槎嗌??當?zhí)行 PUSH BX 指令后,棧頂?shù)刂泛蜅m? 個字節(jié)的內(nèi)容分別是什么?答案:當前棧頂?shù)牡刂?2FF00H當執(zhí)行PUSH BX 指令后,棧頂?shù)刂?2FE
21、FEH(2FEFEH)=57H(2FEFFH)=34H3.22 設(shè)DX=78C5H,CL=5,CF=1,確定下列各條指令執(zhí)行后,DX 和CF 中的值。(1) SHR DX,1 ;DX=3C62H CF=1(2) SAR DX,CL ;DX=03C6H CF=0(3) SHL DX,CL ;DX=18A0H CF=1(4) ROR DX,CL ;DX=2BC6H CF=0(5) RCL DX,CL ;DX=18B7H CF=1(6) RCR DH,1 ;DX=BCC5H CF=03.23 設(shè)AX=0A69H,VALUE 字變量中存放的內(nèi)容為1927H,寫出下列各條指令執(zhí)行后寄存器和CF、ZF、O
22、F、SF、PF 的值。AX CF ZF OF SF PF(1)XOR AX,VALUE ; 134EH 0 0 0 0 1(2)AND AX,VALUE ; 0821H 0 0 0 0 1(3)SUB AX,VALUE ; F142H 1 0 0 1 1(4)CMP AX,VALUE ; 0A69H 1 0 0 1 1(5)NOT AX ; F596H X X X X X(6)TEST AX,VALUE ; 0A69H 0 0 0 0 13.24 設(shè)AX 和BX 中是符號數(shù),CX 和DX 是無符號數(shù),請分別為下列各項確定CMP和條件轉(zhuǎn)移指令。CX 值超過DX 轉(zhuǎn)移。AX 未超過BX 轉(zhuǎn)移。DX
23、 為0 轉(zhuǎn)移。CX 值等于小于DX 轉(zhuǎn)移。答案:(1) CMP CX,DXJA NEXT(2) CMP AX,BXJLE NEXT(3) CMP DX,0JZ NEXT(4) CMP CX,DXJBE NEXT3.25 閱讀分析下列指令序列:ADD AX,BXJNO L1JNC L2SUB AX,BXJNC L3JNO L4JMP L5若AX 和BX 的初值分別為以下5 種情況,則執(zhí)行該指令序列后,程序?qū)⒎謩e轉(zhuǎn)向何處(L1L5 中的一個)。AX=13C6H, BX=80DCHAX=0B568H,BX=54B7HAX=42C8H, BX=608DHAX=0D023H,BX=9FD0HAX=9FD
24、0H, BX=0D023H答案:(1)轉(zhuǎn)L1:不溢出,轉(zhuǎn)移到L1 處;(2)轉(zhuǎn)L1:不溢出,轉(zhuǎn)移到L1 處;(3)轉(zhuǎn)L2:溢出,不轉(zhuǎn)移到L1 處,進位CF=0,轉(zhuǎn)移到L2 處;(4)轉(zhuǎn)L3:溢出,不轉(zhuǎn)移到L1 處,進位CF=1,不轉(zhuǎn)移到L2 處,減法借位CF=0,轉(zhuǎn)移到L3 處;(5)轉(zhuǎn)L5:溢出,不轉(zhuǎn)移到L1 處,進位CF=1,不轉(zhuǎn)移到L2 處,減法借位CF=1,不轉(zhuǎn)移到L3 處,不溢出OF=0,轉(zhuǎn)移到L4 處;3.26 用普通運算指令執(zhí)行BCD 碼運算時,為什么要進行十進制調(diào)整?具體地講,在進行BCD 碼的加、減、乘、除運算時,程序段的什么位置必須加上十進制調(diào)整指令?解:因為8086 指令
25、把操作數(shù)作為二進制數(shù)進行二進制運算,要得到正確的BCD 結(jié)果,需要進行調(diào)整。在加、減、乘法指令之后加上BCD 調(diào)整指令,而在除法指令之前先用BCD 調(diào)整指令再用除法指令。3.27 在編寫乘除法程序時,為什么常用移位指令來代替乘除法指令?編寫一段程序,實現(xiàn)將BX 中的數(shù)除以10,結(jié)果仍然放在BX 中。解:用移位指令時,左移l 位相當于將操作數(shù)乘2,右移1 位相當于將操作數(shù)除2。用移位指令實現(xiàn)一些簡單的乘除法程序,比用乘法指令和除法指令進行乘、除運算要快得多。用除法指令實現(xiàn):MOV CL 0AHMOV AX,BXIDIV CLMOV BX,AX3.28 串操作指令使用時特別要注意和SI,DI 這兩
26、個寄存器及方向標志DF 密切相關(guān)。請具體就指令MOVSB/MOVSW、CMPSB/CMPSW、SCASB/SCASW、LODSB/LODSW、STOSB/STOSW 列表說明和SI、DI 及DF 的關(guān)系。解答:SI DI DFMOVSB/MOVSW 指出源地址指出目的地址不帶 REP 重復(fù)前綴時,DF=0,每傳送一次,SI、DI 加1 或加2,DF=1,SI、DI 則減1 或減2CMPSB/CMPSW存放源字符串首地址存放目的字符串首地址DF=0,每次比較后,SI、DI 加1 或加2,CX 減1,DF=1,SI、DI 減1 或減2,CX 減1SCASB/SCASW 無 指出字符串首址偏移量 無
27、LODSB/LODSW 作為地址指針存放處理結(jié)果DF=1 時,地址作增量修改,DF=0 時,地址作減量修改STOSB/STOSW 無 存放目的地址 無3.29 用串操作指令設(shè)計實現(xiàn)以下功能的程序段:首先將100H 個數(shù)從2170H 處搬到1000H 處,然后,從中檢索相等于VAL 中字符的單元,并將此單元值換成空格符。解答:START:MOV AX, DSMOV ES, AXMOV SI, 2170HMOV DI, 1000HMOV CX, 100HCLDREP MOVSBANOTHER:MOV DI, 1000HMOV AL, VALMOV CX, 100HCLDAGE: SCASBJZ F
28、INDEC CXJNZ AGEJMP OVERFIN: MOV BYTE PTRDI-1,20HCMP CX,0JNZ AGEOVER: RET3.30 求雙字長數(shù)DXAX 的相反數(shù)。答:NEG DXNEG AXSBB DX,03.31 試對數(shù)據(jù)段偏移地址為101H 單元中的單字節(jié)數(shù)求補后存入102H,最高位不變,低7 位取反存入103H,高4 位置1,低4 位不變,存入104H。答:MOV AX,0101HMOV BX,AXMOV CX,AXNOT AXMOV 0102H,AXXOR BX,7FHMOV 0103H,BXAND CX,0F0HMOV 0104H3.32 試編寫一個程序,比較兩
29、個同長字符串STRING1 和STRING2 所含字符是否相同,若相同MATCH 單元賦值1,若不相同MATCH 單元賦值0。答案:程序段為:;數(shù)據(jù)定義STRING1 DB ABCDEFGHIJK ;串1,作為源串STRING2 DB ABCDFGKJ ;串2,作為目標串MATCH DB ? ;定義MATCH 單元;功能代碼MOV AX,SEG STRING1MOV DS,AX ;源串段地址送DSMOV AX,SEG STRING2MOV ES,AX ;目標串段地址送ESLEA SI, STRING1 ;源串偏移地址送SILEA DI, STRING2 ;目標串偏移地址送DIMOV CX, S
30、TRING1- STRING2 ;重復(fù)次數(shù)送CXCLD ;地址增REPE CMPSB ;相等繼續(xù)比較,不相等退出JZ EQUAL ;退出時,若ZF=1,表示兩串相等MOV MATCH,0 ;不相同,MATCH 單元賦值0JMP OVEREQUAL:MOV MATCH,1 ;相同MATCH 單元賦值1OVER:HLT3.34 編寫代碼,計算a+10b+100c+20d,其中a、b、c、d 均為單字節(jié)無符號數(shù),結(jié)果為16位,存入SUM 開始的兩單元中。data segmentma db 12mb db 21mc db 86md db 150SUM dw 0data endscode segment
31、assume ds:data,cs:codestart:mov ax,datamov ds,axmov dh,0mov dl,mamov ah,0mov al,10mul mbadd dx,axmov ah,0mov al,100mul mcadd dx,axmov ah,0mov al,20mul mdadd dx,axmov SUM,dxcode endsend start3.35 試_編寫一段程序把LIST 到LIST+100 中的內(nèi)容傳到BLK 到BLK+100 中去。答案:程序段為:MOV AX,SEG LISTMOV DS,AX ;源串段地址送DSMOV AX,SEG BLKMOV
32、 ES,AX ;目標串段地址送ESLEA SI, LIST ;源串偏移地址送SILEA DI, BLK ;目標串偏移地址送DIMOV CX, 101 ;重復(fù)次數(shù)送CXCLD ;地址增REP MOVSB3.36 設(shè)CS:0100H 單元有一條兩字節(jié)的JMP SHORT LAB 指令,若其中的位移量為:56H 80H 78H (4)0E0H試寫出轉(zhuǎn)向目標的物理地址是多少?答:因為CS:0100H 處存放兩字節(jié)指令JMP SHORT LAB,所以當執(zhí)行該指令時(IP)=0102H(1) 轉(zhuǎn)向目標的物理地址是:(CS)*10H+(IP)+0056H=CS:0058H(2) 轉(zhuǎn)向目標的物理地址是:(CS
33、)*10H+(IP)+0FF80H=CS:0082H;80H 對應(yīng)的負數(shù)為-80H(向上轉(zhuǎn)移,負位移量)(3) 轉(zhuǎn)向目標的物理地址是:(CS)*10H+(IP)+0078H=CS:0180H(4) 轉(zhuǎn)向目標的物理地址是:(CS)*10H+(IP)+0FFE0H=CS:00E2H;E2H 對應(yīng)的負數(shù)為-1EH(向上轉(zhuǎn)移,負位移量)3.37 不使用除法指令,將堆棧段中10H、11H 單元中的雙字節(jié)帶符號數(shù)除以,結(jié)果存入12H、13H 單元(注:多字節(jié)數(shù)存放格式均為低位在前,高位在后)。POP AXPOP BXTEST AX,8000H ;測試被除數(shù)符號位MOV CL,3JZ ZS ;若為正數(shù),跳轉(zhuǎn)
34、到ZSSAR AX,CLJMP OVERZS: SHR AX,CLOVER:PUSH AX3.38 數(shù)據(jù)段中3030H 起有兩個16 位的帶符號數(shù),試求它們的積,存入3034H-3036H 單元中。答案:MOV AX,3030HMOV BX,3032HIMUL BXMOV 3034H,AXMOV 3036H3.39 考慮以下調(diào)用序列:(1)MAIN 調(diào)用NEAR 的SUBA 過程(返回的偏移地址為150BH);(2)SUBA 調(diào)用NEAR 的SUBB 過程(返回的偏移地址為1A70H);(3)SUBB 調(diào)用FAR 的SUBC 過程(返回的偏移地址為1B50H,段地址為1000H);(4)從SU
35、BC 返回SUBB;(5)從SUBB 返回SUBA;(6)從SUBA 返回MAIN。請畫出每次調(diào)用或返回時,堆棧內(nèi)容和堆棧指針變化情況。答:*(SP) 150BH*150BH(SP)*150BH(SP)*150BH(SP)*(SP) 150BH(SP) *(1) (2) (3)(4) (5) (6)1A70H 1A70H1000H1B50H1A70H第四章 匯編語言程序設(shè)計 習題答案(部分)4.1 什么是標號?它有哪些屬性?答:標號是一種特殊的標識符,它代表代碼段中的某個具體位置,它主要用于表明轉(zhuǎn)移的目標位置。源程序中的標號都有三種屬性:段、偏移及類型。4.2 什么是變量?它有哪些屬性?答:變
36、量名代表存儲器中的一個數(shù)據(jù)區(qū)的名字。源程序中的變量有五種屬性:段、偏移、類型、長度、規(guī)模。4.3 什么是偽指令?什么是宏指令?偽指令在什么時候被執(zhí)行?宏指令在程序中如何被調(diào)用?答:偽指令語句是一種不產(chǎn)生目標代碼的語句,它僅僅在匯編過程中告訴匯編程序應(yīng)如何匯編。偽指令語句是在匯編程序?qū)υ闯绦騾R編期間由匯編程序處理的操作。宏是若干語句組成的程序段,宏指令語句用來定義宏。一旦把某程序段定義成宏,則可以用宏名代替那段程序。在匯編時,要對宏進行宏展開,展開的過程是將宏名用程序段代替。4.4 匯編語言表達式中有哪些運算符?它們所完成的運算是在什么時候進行的?答:匯編語言表達式中的運算符有:算術(shù)運算符 +、
37、*、/、MOD邏輯運算符 AND、OR、NOT、XOR關(guān)系運算符 EQ、NE、LT、GT、LT、LE、GE分析運算符 SEG、OFFSET、TYPE、LENGTH、SIZE屬性運算符 PTR、THIS、SHORT其 它 LOW、HIGH這些運算符都是在在匯編時由匯編程序?qū)ζ溥\算的。4.5 畫出下列語句中的數(shù)據(jù)在存儲器中的存儲情況。ORG 100HVARB DB 34,34H,GOOD,2 DUP(1,2 DUP(0)VARW DW 5678H,CD,$+2,2 DUP(100)VARC EQU 12VARB DS:0100H 22H DS:010BH 00HDS:0101H 34H VARW
38、DS:010CH 78HDS:0102H 47H DS:010DH 56HDS:0103H 4FH DS:010EH 44HDS:0104H 4FH DS:010FH 43HDS:0105H 44H DS:0110H 12HDS:0106H 01H DS:0111H 01HDS:0107H 00H DS:0112H 64HDS:0108H 00H DS:0113H 00HDS:0109H 01H DS:0114H 64HDS:010AH 00H DS:0115H 00H46 按下列要求,寫出各數(shù)據(jù)定義語句。DB1 為10H 個重復(fù)的字節(jié)數(shù)據(jù)序列:1,2,5 個3,4。DB2 為字符串STUDE
39、NTSDB3 為十六進制數(shù)序列:12H,ABCDH用等值語句給符號COUNT 賦以DB1 數(shù)據(jù)區(qū)所占字節(jié)數(shù),該語句寫在最后。解答:DB1 DB 16 DUP(1,2,5 DUP(3),4)DB2 DB STUDENTSDB3 DW 12H,0ABCDHCOUNT EQU DB2DB14.7 指令OR AX,1234H OR 0FFH 中兩個OR 有什么差別?這兩個操作數(shù)分別在什么時候執(zhí)行?解答:(1)指令OR AX,1234H OR 0FFH 中的第一個OR 是指令系統(tǒng)中的“或”指令,而第二個OR 是表達式中表示邏輯“或”關(guān)系的。(2)指令OR AX,1234H OR 0FFH 中的第一個OR
40、 是在CPU 執(zhí)行指令操作時才會執(zhí)行。而第二個OR 是在匯編時就會將1234H 和0FFH 作邏輯“或”運算,得到結(jié)果12FFH。然后執(zhí)行第一個OR 指令,完成AX 的內(nèi)容與12FFH 的邏輯“或”運算。48 對于下面的數(shù)據(jù)定義,各條MOV 指令單獨執(zhí)行后,有關(guān)寄存器的內(nèi)容是什么?PREP DB ?TABA DW 5 DUP(?)TABB DB NEXTTABC DD 12345678H(1)MOV AX,TYPE PREP ;AX=1(2)MOV AX,TYPE TABA ;AX=2(3)MOV AX,LENGTH TABA ;AX=5(4)MOV AX,SIZE TABA ;AX=10(5
41、)MOV AX,LENGTH TABB ;AX=1(6)MOV DX,SIZE TABC ;AX=44.9 設(shè)數(shù)據(jù)段DSEG 中符號及數(shù)據(jù)定義如下,試寫出數(shù)據(jù)在內(nèi)存中的存儲示意圖。(數(shù)據(jù)段DSEG 定義略)解答:DAB DS:0100H 2FH DS:0113HDS:0101H 47H DS:0114HDS:0102H 4FH DS:0115HDS:0103H 54H DS:0116HDS:0104H 4FH DS:0117HDS:0105H 2FH DS:0118HDS:0106H 0DH DS:0119HDS:0107H 0AH DS:011AHDBB DS:0108H 05H DS:01
42、1BHDS:0109H 13H DDW DS:011CH 32HDS:010AH 61H DS:011DH 31HCCB DS:010BH DS:011EH 64HDS:010CH DS:011FH 00HDS:010DH DS:0120H 33HDS:010EH DS:0121H 03HDS:010FH DS:0122H 78HDS:0110H DS:0123H 00HDS:0111H DS:0124H 64HDS:0112H DS:0125H 00H4.10 若自STRING 單元開始存放有一個字符串(以字符$結(jié)束),試完成:(1)編程統(tǒng)計該字符串長度(不包含 $ 字符,并假設(shè)長度為兩字節(jié)
43、)。(2)把字符串長度放在STRING 單元,把整個字符串往下移兩個單元。程序段為:(1)MOV SI, OFFSET STRINGXOR BX, BXCONT:MOV AL, SICMP AL, $JZ NEXTINC BXINC SIJMP CONTNEXT:MOV AH, 4CHINT 21H(2)STRING DB $COUNT EQU $-STRINGMOV SI, OFFSET STRINGMOV CX, COUNTADD SI, CXCONT: DEC SIMOV AL, SIMOV SI+2, ALLOOP CONTMOV CX, COUNTMOV STRING, CXMOV
44、AH, 4CHINT 21H4.11 將字符串STRING 中的&字符用空格代替,字符串STRING“It is FEB&03”。解答程序為:DATA SEGMENTSTRING DB It is FEB&03COUNT EQU $-STRINGDATA ENDSCODE SEGMENTASSUME CS:CODE,DS:DATASTART:MOV AX,DATAMOV DS,AXMOV SI,OFFSET STRINGMOV CX,COUNTMOV AL,$CONT:CMP AL,SIJNZ NEXTMOV BYTE PTRSI, NEXT: INC SILOOP C
45、ONTMOV AH,4CHINT 21HCODE ENDSEND START4.12 設(shè)BLOCK 起有20 個單字節(jié)的數(shù),試將它們按降序排列。解答程序為:DATA SEGMENTORG 0100HBLOCK DB 12H,87H,51H,68H,00H,02H,0FFH,0D6H,45H,77H,80H,9FHLEN EQU $-BLOCKDATA ENDSCODE SEGMENTASSUME CS:CODE,DS:DATASTART: MOV AX,DATAMOV DS,AXMOV BX,LEN-1 ;BX_比較輪數(shù)LOP0: MOV SI,LEN-1 ;SI_第N 個數(shù)在數(shù)據(jù)表中的偏移量
46、MOV CX,BX ;CX_比較次數(shù)計數(shù)值MOV DX,0 ;DX_置交換標志為第N 個數(shù)在數(shù)據(jù)表中偏移量LOP1: MOV AL,BLOCKSICMP AL,BLOCKSI-1 ;比較相鄰兩數(shù)JLE NEXTMOV AH,BLOCKSI-1 ;交換兩數(shù)MOV BLOCKSI-1,ALMOV BLOCKSI,AHMOV DX,1 ;DX_發(fā)生交換處的位置NEXT: DEC SI ;修改數(shù)據(jù)地址LOOP LOP1 ;一輪比較完嗎?CMP DX,0 ;本輪發(fā)生交換嗎?JZ STOP ;已全部排好序,轉(zhuǎn)程序結(jié)束DEC BX ;所有輪都比較完否?JNZ LOP0 ;未完繼續(xù)STOP: MOV AH,4
47、CHINT 21HCODE ENDSEND START4.14 試編寫一個匯編語言程序,要求對鍵盤輸入的小寫字母用大寫字母顯示出來。解答程序為:data segmentmessage db 'please enter the small letter:',0ah,0dh,'$'message2 db 'the capital letter is:',0ah,0dh,'$'error db 'enter must be small!please enter again:',0ah,0dh,'$'mes
48、sage3 db 'the capital letter is:','$'letter db ?data endsstack segmentdb 100h dup(?)stack endscode segmentassume cs:code,ds:data,ss:stackstart:mov ax,datamov ds,axjmp l1xor ax,axerror1:lea dx,errormov ah,09hint 21hl1:lea dx,messagemov ah,09hint 21hlea dx,lettermov ah,01hint 21hpush a
49、xmov dl,0ahmov ah,02hint 21hmov dl,0dhint 21hlea dx,message3mov ah,09hint 21hpop axcmp al,'z' ;比較,判斷是否小寫字母ja error1cmp al,'a'jb error1 ;大寫字母重新輸入sub al,20H ;減20H 轉(zhuǎn)換為大寫字母mov dl,almov ah,02hint 21hmov ax,4c00hint 21hcode endsend start415 鍵盤輸入十個學生的成績,試編制一個程序統(tǒng)計6969 分,7079 分,8089 分,9099 分及
50、100 分的人數(shù),分別存放到S6,S7,S8,S9 及S10 單元中。解答程序為:DATA SEGMENTBUF DB 10 DUP(?)S6 DB ?S7 DB ?S8 DB ?S9 DB ?S10 DB ?DATA ENDSCODE SEGMENTASSUME CS:CODE,DS:DATASTART: MOV AX,DATAMOV DS,AXMOV SI,OFFSET S6XOR AL,ALMOV CX,0504HCONT: MOV SI,ALINC SILOOP CONTMOV CX,10MOV SI,OFFSET BUFCONT1: MOV AH,1INT 21HSHL AL,CLM
51、OV BL,ALMOV AH,1INT 21HSUB AL,30HOR AL,BLMOV SI,ALCMP AL,70HJAE NEXT1INC BYTE PTR S6NEXT1: CMP AL,80HJAE NEXT2INC BYTE PTR S7NEXT2: CMP AL,90HJAE NEXT3INC BYTE PTR S8NEXT3: CMP AL,99HJA NEXT4INC BYTE PTR S9JMP NEXT5NEXT4: INC BYTE PTR S10NEXT5: INC SILOOP CONT1MOV AH,4CHINT 21HCODE ENDSEND START4.17
52、 在有序表“11,22,33,44,55,66,77,88,99,00”中查找44。若找到置find 為其在表中的位置;未找到,find 置0。4.18 分別實現(xiàn)滿足下面要求的宏定義:(1)可對任一寄存器實現(xiàn)任意次數(shù)的左移操作。(2)任意兩個單元中的數(shù)據(jù)相加存入第三個單元中。(3)將任意一個8位寄存器中的壓縮BCD碼轉(zhuǎn)為兩個ASCII碼,并在屏幕上顯示。(2)宏定義的代碼段如下:ADDM MACRO M1,M2,M3MOV AX,M1ADD AX,M2MOV M3,AXENDM第五章 8086 系統(tǒng)時序和微機總線 習題答案(部分)5.1 什么是時鐘周期、總線周期、指令周期?答:8086CPU
53、執(zhí)行一條指令是由取指令、譯碼和執(zhí)行等操作組成的,為了使 8086CPU的各種操作協(xié)調(diào)同步進行,8086CPU 必須在時鐘信號 CLK 控制下工作,時鐘信號是一個周期性的脈沖信號,一個時鐘脈沖的時間長度稱為一個時鐘周期(Clock Cycle),是時鐘頻率(主頻)的倒數(shù),時鐘周期是計算機系統(tǒng)中的時間基準。8086CPU 要通過總線才能與外部交換信息,CPU 通過總線接口單元與外部交換一次信息,稱為一次總線操作,所耗用的時間稱為一個總線周期(Bus Cycle),也稱機器周期(MachineCycle)。一個總線周期由若干個時鐘周期組成,總線操作的類型不同,總線周期也不同。一個總線周期內(nèi)完成的數(shù)據(jù)
54、傳輸,一般有傳送地址和傳送數(shù)據(jù)兩個過程。8086CPU 執(zhí)行一條指令所需要的時間稱為指令周期(Instruction Cycle),一個指令周期由若干個總線周期組成,5.2 8086 微處理器各個T 狀態(tài)的主要功能。答:(1)在T1 狀態(tài),CPU 往多路復(fù)用總線上發(fā)出地址信息,以指出要尋址的存儲單元或外設(shè)端口的地址。(2)在T2 狀態(tài),CPU 從總線上撤消地址,而使總線的低16 位浮空,置成高阻狀態(tài),為傳輸數(shù)據(jù)作準備??偩€的最高4 位(A1916)用來輸出本總線周期狀態(tài)信息。在這些狀態(tài)信息用來表示中斷允許狀態(tài),當前正在使用的段寄存器名等。(3)在T3 狀態(tài),多路總線的高4 位繼續(xù)提供狀態(tài)信息,而多路總線的低16 位(8088 則為低8 位)上出現(xiàn)由CPU 寫出的數(shù)據(jù)或者CPU 從存儲器或端口讀入的數(shù)據(jù)。(4)在有些情況下,外設(shè)或存儲器速度較慢,不能及時地配合CPU 傳送數(shù)據(jù)。這時,外設(shè)或存儲器會通過“READY”信號線在T3 狀態(tài)啟動之前向CPU 發(fā)一個“數(shù)據(jù)未準備好”信號,于是CPU 會在T3 之后插入1 個或多個附加的時鐘周期Tw。Tw 也叫等待狀態(tài),在Tw 狀態(tài),總線上的信息情況和T3 狀態(tài)的信息情況一樣。當指定的存儲器或
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負責。
- 6. 下載文件中如有侵權(quán)或不適當內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 安全技術(shù)服務(wù)承包責任書
- 信報箱采購合作協(xié)議
- 購銷合同的合同糾紛
- 汽車保養(yǎng)加盟合同范本
- 家庭養(yǎng)老全程陪伴
- 施工單位分包合同范本
- 還建房購買合同協(xié)議書
- 抖音服務(wù)合同簽訂流程詳解
- 購銷合同樣式設(shè)計指南
- 藝人簽約演出代理
- 小班語言《蘿卜回來了》課件
- 《金融統(tǒng)計介紹》課件
- 孤獨癥譜系障礙培訓課件
- 人工智能與物聯(lián)網(wǎng)技術(shù)的融合發(fā)展
- 試驗樣機項目總結(jié)匯報
- 2022版新課標下如何立足課程教學做好幼小銜接解讀
- 河南省鄭州市二中共同體2023-2024學年八年級上學期期末數(shù)學試卷(含解析)
- 洛陽市2023-2024學年九年級上學期期末考試英語試題和答案
- 砂漿行業(yè)銷售技巧分析
- 腸道門診管理課件
- 小學禁毒教育教學大綱
評論
0/150
提交評論