第3章?8086/8088 指令系統(tǒng)和尋址方式?習(xí)題答案(部分)
1.1 總結(jié)計(jì)算機(jī)中十進(jìn)制、二進(jìn)制、八進(jìn)制及十六進(jìn)制數(shù)的書(shū)寫(xiě)形式。123D、0AFH、
77Q、1001110B 分別表示什么計(jì)數(shù)制的數(shù)?
答案:123D、0AFH、77Q、1001110B 分別表示十進(jìn)制、十六進(jìn)制、八進(jìn)制、二進(jìn)制。
1.2 ?字長(zhǎng)為8 位、16 位二進(jìn)制數(shù)的原碼、補(bǔ)碼表示的最大數(shù)和最小數(shù)分別是什么?
答案:8 位原碼表示的最大數(shù):(27-1)、8 位補(bǔ)碼表示的最大數(shù):(27-1)、8 位原碼表示的最小數(shù):-(27-1)、8 位補(bǔ)碼表示的最小數(shù)-27。
16 位原碼表示的最大數(shù):(215-1)、16 位補(bǔ)碼表示的最大數(shù):(215-1)、16 位原碼表示的最小數(shù):-(215-1)、16 位補(bǔ)碼表示的最小數(shù)-215。
1.3 把下列十進(jìn)制數(shù)分別轉(zhuǎn)換為二進(jìn)制數(shù)和十六進(jìn)制數(shù)。
(1)125 (2)255 (3)72 (4)5090
答案:(1) 125 二進(jìn)制數(shù):0111 1101B;十六進(jìn)制數(shù):7DH。
(2)255 二進(jìn)制數(shù):1111 1111B;十六進(jìn)制數(shù):0FFH。
(3)72 二進(jìn)制數(shù):0100 1000B;十六進(jìn)制數(shù):48H。
(4)5090 二進(jìn)制數(shù):0001 0011 1110 0010B;十六進(jìn)制數(shù):13E2H。
1.4 把下列無(wú)符號(hào)二進(jìn)制數(shù)分別轉(zhuǎn)換為十進(jìn)制數(shù)和十六進(jìn)制數(shù)。
(1)1111 0000 (2)1000 0000 (3)1111 1111 (4)0101 0101
答案:(1)1111 0000 十進(jìn)制數(shù):240D;十六進(jìn)制數(shù):0F0H。
(2)1000 0000 十進(jìn)制數(shù):128D;十六進(jìn)制數(shù):80H。
(3)1111 1111 十進(jìn)制數(shù):255D;十六進(jìn)制數(shù):0FFH。
(4)0101 0101 十進(jìn)制數(shù):85D;十六進(jìn)制數(shù):55H。
1.5 把下列無(wú)符號(hào)十六進(jìn)制數(shù)分別轉(zhuǎn)換為十進(jìn)制數(shù)和二進(jìn)制數(shù)。
(1)FF (2)ABCD (3)123 (4)FFFF
答案:(1)FF 十進(jìn)制數(shù):255D;二進(jìn)制數(shù);1111 1111B。
(2)ABCD 十進(jìn)制數(shù):43981D;二進(jìn)制數(shù);1010 1011 1100 1101B。
(3)123 十進(jìn)制數(shù):291D;二進(jìn)制數(shù);0001 0010 0011B。
(4)FFFF 十進(jìn)制數(shù):65535D;二進(jìn)制數(shù);1111 1111 1111 1111B。
1.6 分別用8 位二進(jìn)制數(shù)和16 位二進(jìn)制數(shù)寫(xiě)出下列十進(jìn)制數(shù)的原碼和補(bǔ)碼。
(1)16 (2)-16 (3)+0 (4)-0 (5)127 (6)-128 (7)121 (8)-9
答案:
(1)16 8 位二進(jìn)制數(shù)原碼:0001 0000 補(bǔ)碼:0001 0000;16 位二進(jìn)制數(shù)原碼:0000 0000
0001 0000 補(bǔ)碼: 0000 0000 0001 0000。
(2)-16 8 位二進(jìn)制數(shù)原碼:1001 0000 補(bǔ)碼:1111 0000;16 位二進(jìn)制數(shù)原碼:1000 0000
0001 0000 補(bǔ)碼:1111 1111 1111 0000。
(3)+0 8 位二進(jìn)制數(shù)原碼:0000 0000 補(bǔ)碼:0000 0000;16 位二進(jìn)制數(shù)原碼:0000 0000
0000 0000 補(bǔ)碼:0000 0000 0000 0000。
(4)-0 8 位二進(jìn)制數(shù)原碼:1000 0000 補(bǔ)碼:0000 0000;16 位二進(jìn)制數(shù)原碼:1000 0000
0000 0000 補(bǔ)碼: 0000 0000 0000 0000。
(5)127 8 位二進(jìn)制數(shù)原碼:0111 1111 補(bǔ)碼: 0111 1111;16 位二進(jìn)制數(shù)原碼:0000 0000
0111 1111 補(bǔ)碼: 0000 0000 0111 1111。
(6)-128 8 位二進(jìn)制數(shù)原碼:無(wú)?補(bǔ)碼: 1000 0000 ;16 位二進(jìn)制數(shù)原碼:1000 0000
1000 0000 補(bǔ)碼:1111 1111 1000 0000。
(7)121 8 位二進(jìn)制數(shù)原碼:0111 1001 補(bǔ)碼: 0111 1001;16 位二進(jìn)制數(shù)原碼:0000 0000
0111 1001 補(bǔ)碼: 0000 0000 0111 1001。
(8)-9 8 位二進(jìn)制數(shù)原碼:1000 1001 補(bǔ)碼:1111 0111;16 位二進(jìn)制數(shù)原碼:1000 0000
1000 1001 補(bǔ)碼:1111 1111 1111 0111。
1.7 試實(shí)現(xiàn)下列轉(zhuǎn)換。
(1)[X]原=10111110B,求[X]補(bǔ)?(2)[X]補(bǔ)=11110011B,求[-X]補(bǔ)
(3)[X]補(bǔ)=10111110B,求[X]原?(4)[X]補(bǔ)=10111110B,求[X]反
答案:(1) 1100 0010 (2) 0000 1101 (3) 1100 0010 (4) 1011 1101
1.8 假設(shè)兩個(gè)二進(jìn)制數(shù)A=01101010,B=10001100,試比較它們的大小。
(1)A、B 兩數(shù)均為帶符號(hào)的補(bǔ)碼數(shù)?(2)A、B 兩數(shù)均為無(wú)符號(hào)數(shù)
答案:(1)A、B 兩數(shù)均為帶符號(hào)的補(bǔ)碼數(shù):A>B
(2)A、B 兩數(shù)均為無(wú)符號(hào)數(shù):A<B
1.9 下列各數(shù)均為十進(jìn)制數(shù),請(qǐng)用8 位二進(jìn)制數(shù)補(bǔ)碼計(jì)算下列各題,用十六進(jìn)制數(shù)表示
其運(yùn)算結(jié)果,并判斷是否溢出,驗(yàn)證教材中所給的判斷依據(jù)。
(1)90+71 (2)90-71 (3)-90-71 (4)-90+71 (5)-90-(-71)
答案:(1)90+71=161>127 溢出
[90]補(bǔ)+[71]補(bǔ)=0101 1010+0100 0111=1010 0001=0A1H=[-91]補(bǔ)
(2)90-71=19<127 無(wú)溢出
[90]補(bǔ)+[-71]補(bǔ)=0101 1010+1011 1001=0001 0011=13H=[19]補(bǔ)
(3)-90-71=-161<-128 溢出
[-90]補(bǔ)+[-71]補(bǔ)=1010 0110+1011 1001=0101 1111=5FH=[95]補(bǔ)
(4)-90+71=-19>-128 無(wú)溢出
[-90]補(bǔ)+[71]補(bǔ)=1010 0110+0100 0111=1110 1101=0EDH=[-19]補(bǔ)
(5)-90-(-71)=-19>-128 無(wú)溢出
[-90]補(bǔ)+[71]補(bǔ)=1010 0110+0100 0111=1110 1101=0EDH=[-19]補(bǔ)
3.10 完成下列8 位二進(jìn)制數(shù)的邏輯運(yùn)算。
(1)11001100∧10101010 (2)11001100∨10101010
(3)11001100⊕10101010 (4)10101100∧10101100
(5)10101100⊕10101100 (6)10101100∨10101100
(7)10101100
答案:(1)11001100∧10101010=1000 1000 (2)11001100∨10101010=1110 1110
(3)11001100⊕10101010=0110 0110 (4)10101100∧10101100=1010 1100
(5)10101100⊕10101100=0000 0000 (6)10101100∨10101100=1010 1100
(7)10101100=0101 0011
1.11 以下均為2 位十六進(jìn)制數(shù),試說(shuō)明當(dāng)把它們分別看作無(wú)符號(hào)數(shù)或字符的ASCII 碼
值,它們所表示的十進(jìn)制數(shù)和字符是什么?
(1)30H (2)39H (3)42H (4)62H (5)20H (6)7H
答案:(1)30H 所表示的十進(jìn)制數(shù)是:48D;字符是:0。
(2)39H 所表示的十進(jìn)制數(shù)是:57D;字符是:9。
(3)42H 所表示的十進(jìn)制數(shù)是:66D;字符是:B。
(4)62H 所表示的十進(jìn)制數(shù)是:98D;字符是:b。
(5)20H 所表示的十進(jìn)制數(shù)是:32D;字符是:sp 空格。
(6)7H 所表示的十進(jìn)制數(shù)是:7D;字符是:BEL 報(bào)警。
1.12 把以下十進(jìn)制數(shù)分別以壓縮BCD 碼、非壓縮BCD 碼、ASCII 碼串表示。
(1)2 (2)78
答案:(1)2 壓縮BCD 碼:0010、非壓縮BCD 碼:0000 0010、ASCII 碼:011 0010
(2)78 壓縮BCD 碼:0111 1000、非壓縮BCD 碼:0000 0111 0000 1000、ASCII 碼:0110111
011100
1.13 設(shè)浮點(diǎn)數(shù)格式如下圖所示:
階碼、尾數(shù)均以補(bǔ)碼表示,基數(shù)為2,求:+25.6 和-361.25 的規(guī)格化浮點(diǎn)數(shù)。
答案:1) +25.6D=11001.1001100110B=0.110011001100110×25
+5=0101B,補(bǔ)碼:0101,尾數(shù):[ 0.110011001100110]補(bǔ)=0.110011001100110
規(guī)格化浮點(diǎn)數(shù):0 0000101 0 110011001100110
2) -361.25D=-101101001.01B=29×(-0.101101001010000)
+9=1001,補(bǔ)碼:1001,尾數(shù):[ -0.101101001010000]補(bǔ)=1.010010110110000
規(guī)格化浮點(diǎn)數(shù):0 0001001 1 010010110110000
1.14 設(shè)某計(jì)算機(jī)用12 位表示一個(gè)浮點(diǎn)數(shù),該浮點(diǎn)數(shù)從高位到低位依次為:階符1 位、
階碼3 位(原碼表示)、數(shù)符1 位、尾數(shù)7 位(補(bǔ)碼表示),則0 100 1 0110011 的真值是多少?
答案:-9.625
?3.1 8086 匯編語(yǔ)言指令的尋址方式有哪幾類?哪種尋址方式的指令執(zhí)行速度最快?
解:尋址方式分為:立即數(shù)尋址方式、寄存器操作數(shù)尋址方式和存儲(chǔ)器操作數(shù)尋址方式。
其中,寄存器操作數(shù)尋址方式的指令執(zhí)行速度最快。
3.2?在直接尋址方式中,一般只指出操作數(shù)的偏移地址,那么,段地址如何確定?如果要用
某個(gè)段寄存器指出段地址,指令中應(yīng)該如何表示?
解:默認(rèn)的數(shù)據(jù)訪問(wèn),操作數(shù)在DS 段;堆棧操作在SS 段;串操作源操作數(shù)(SI)在DS
段,目的操作數(shù)(DI)在ES 段;用BP 作為指針在SS 段。如果要顯式地指定段地址,則在操作
數(shù)中規(guī)定段寄存器。例如:
MOV AX,?ES:(BX+10H)
3.3 ?8086 系統(tǒng)中,設(shè)DS=1000H,ES=2000H,SS=1200H,BX=0300H,SI=0200H,
BP=0100H,VAR 的偏移量為0600H,請(qǐng)指出下列指令的目標(biāo)操作數(shù)的尋址方式,若目
標(biāo)操作數(shù)為存儲(chǔ)器操作數(shù),計(jì)算它們的物理地址。
(1)MOV BX,12 ;目標(biāo)操作數(shù)為寄存器尋址
(2)MOV [BX],12 ;目標(biāo)操作數(shù)為寄存器間址?PA=10300H
(3)MOV ES:[SI],AX ;目標(biāo)操作數(shù)為寄存器間址?PA=20200H
(4)MOV VAR,8 ;目標(biāo)操作數(shù)為存儲(chǔ)器直接尋址?PA=10600H
(5)MOV [BX][SI],AX ;目標(biāo)操作數(shù)為基址加變址尋址?PA=10500H
(6)MOV 6[BP][SI],AL ;目標(biāo)操作數(shù)為相對(duì)的基址加變址尋址?PA=12306H
(7)MOV [1000H],DX ;目標(biāo)操作數(shù)為存儲(chǔ)器直接尋址?PA=11000H
(8)MOV 6[BX],CX ;目標(biāo)操作數(shù)為寄存器相對(duì)尋址?PA=10306H
(9)MOV VAR+5,AX ;目標(biāo)操作數(shù)為存儲(chǔ)器直接尋址?PA=10605H
3.4下面這些指令中哪些是正確的?那些是錯(cuò)誤的?如果是錯(cuò)誤的,請(qǐng)說(shuō)明原因。
(1)XCHG CS,AX ;錯(cuò),CS 不能參與交換
(2)MOV [BX],[1000] ;錯(cuò),存儲(chǔ)器之不能交換
(3)XCHG BX,IP ;錯(cuò),IP 不能參與交換
(4)PUSH CS ;錯(cuò),CS 不能為PUSH 的操作數(shù)
(5)POP CS ;錯(cuò),不能將數(shù)據(jù)彈到CS 中
(6)IN BX,DX ;輸入/輸出只能通過(guò)AL/AX
(7)MOV BYTE[BX],1000 ;1000 大于255,不能裝入字節(jié)單元
(8)MOV CS,[1000] ;CS 不能作為目標(biāo)寄存器
(9)MOV BX,OFFSET VAR[SI] ;OFFSET 只能取變量的偏移地址
(10)MOV AX,[SI][DI] ;SI、DI 不能成為基址加變址
(11)MOV COUNT[BX][SI],ES:AX ;AX 是寄存器,不能加段前綴
3.5?試述以下指令的區(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,OFFSET 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)無(wú)條件短程轉(zhuǎn)移,跳轉(zhuǎn)的范圍不得超過(guò)帶符號(hào)的8 位二進(jìn)
制數(shù)表示的字節(jié)范圍;JMP NEAR PTR L1 為段內(nèi)無(wú)條件近程轉(zhuǎn)移,跳轉(zhuǎn)的范圍不得超過(guò)帶
符號(hào)的16 位二進(jìn)制數(shù)表示的字節(jié)范圍。
(5) CMP DX,CX 與?SUB DX ,CX
答案:CMP DX,CX 是比較,也是利用減法比較,但是dx 中的值不變,標(biāo)志寄存器改
變。SUB DX ,CX 是做減法運(yùn)算,dx 中為減后的值,標(biāo)志寄存器改變
(6)MOV [BP][SI],CL 與?MOV DS:[ BP][SI],CL
答案:BP 默認(rèn)的段基址是SS,物理地址PA=SS+BP+SI;第二個(gè)重定義為DS 段基址,
物理地址PA=DS+BP+SI
3.6?設(shè)DS=2100H,SS=5200H,BX=1400H,BP=6200H,說(shuō)明下面兩條指令所進(jìn)行的
具體操作:
MOV BYTE PTR [BP], 20H
MOV WORD PTR [BX], 20H
解:前一條指令是把立即數(shù)20H,傳送至堆棧段(BP 的默認(rèn)段)偏移量由BP 規(guī)定的字節(jié)單
元,地址為:52000H+6200H=58200H
第二條指令是把立即數(shù)20H,傳送至數(shù)據(jù)段(BX 的默認(rèn)段)偏移量由BX 規(guī)定的字單元,地
址為:21000H+1400H = 22400H。
3.7?設(shè)當(dāng)前?SS=2010H,SP=FE00H,BX=3457H,計(jì)算當(dāng)前棧頂?shù)牡刂窞槎嗌???dāng)執(zhí)
行?PUSH BX 指令后,棧頂?shù)刂泛蜅m?/span>2 個(gè)字節(jié)的內(nèi)容分別是什么?
答案:當(dāng)前棧頂?shù)牡刂?/span>=2FF00H
當(dāng)執(zhí)行PUSH BX 指令后,棧頂?shù)刂?/span>=2FEFEH
(2FEFEH)=57H
(2FEFFH)=34H
3.8?設(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=0
3.9?設(shè)AX=0A69H,VALUE 字變量中存放的內(nèi)容為1927H,寫(xiě)出下列各條指令執(zhí)行
后寄存器和CF、ZF、OF、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 1
3.10?設(shè)AX 和BX 中是符號(hào)數(shù),CX 和DX 是無(wú)符號(hào)數(shù),請(qǐng)分別為下列各項(xiàng)確定CMP
和條件轉(zhuǎn)移指令。
CX 值超過(guò)DX 轉(zhuǎn)移。
AX 未超過(guò)BX 轉(zhuǎn)移。
DX 為0 轉(zhuǎn)移。
CX 值等于小于DX 轉(zhuǎn)移。
答案:
(1)?CMP CX,DX
JA NEXT
(2)?CMP AX,BX
JLE NEXT
(3)?CMP DX,0
JZ NEXT
(4)?CMP CX,DX
JBE NEXT
3.11?閱讀分析下列指令序列:
ADD AX,BX
JNO L1
JNC L2
SUB AX,BX
JNC L3
JNO L4
JMP L5
若AX 和BX 的初值分別為以下5 種情況,則執(zhí)行該指令序列后,程序?qū)⒎謩e轉(zhuǎn)向何處
(L1~L5 中的一個(gè))。
AX=13C6H,?BX=80DCH
AX=0B568H,BX=54B7H
AX=42C8H,?BX=608DH
AX=0D023H,BX=9FD0H
AX=9FD0H,?BX=0D023H
答案:(1)轉(zhuǎn)L1:不溢出,轉(zhuǎn)移到L1 處;
(2)轉(zhuǎn)L1:不溢出,轉(zhuǎn)移到L1 處;
(3)轉(zhuǎn)L2:溢出,不轉(zhuǎn)移到L1 處,進(jìn)位CF=0,轉(zhuǎn)移到L2 處;
(4)轉(zhuǎn)L3:溢出,不轉(zhuǎn)移到L1 處,進(jìn)位CF=1,不轉(zhuǎn)移到L2 處,減法借位CF=0,轉(zhuǎn)移
到L3 處;
(5)轉(zhuǎn)L5:溢出,不轉(zhuǎn)移到L1 處,進(jìn)位CF=1,不轉(zhuǎn)移到L2 處,減法借位CF=1,不轉(zhuǎn)
移到L3 處,不溢出OF=0,轉(zhuǎn)移到L4 處;
3.12?用普通運(yùn)算指令執(zhí)行BCD 碼運(yùn)算時(shí),為什么要進(jìn)行十進(jìn)制調(diào)整?具體地講,在進(jìn)行
BCD 碼的加、減、乘、除運(yùn)算時(shí),程序段的什么位置必須加上十進(jìn)制調(diào)整指令?
解:因?yàn)?/span>8086 指令把操作數(shù)作為二進(jìn)制數(shù)進(jìn)行二進(jìn)制運(yùn)算,要得到正確的BCD 結(jié)果,需
要進(jìn)行調(diào)整。在加、減、乘法指令之后加上BCD 調(diào)整指令,而在除法指令之前先用BCD 調(diào)
整指令再用除法指令。
3.13?在編寫(xiě)乘除法程序時(shí),為什么常用移位指令來(lái)代替乘除法指令?編寫(xiě)一段程序,實(shí)
現(xiàn)將BX 中的數(shù)除以10,結(jié)果仍然放在BX 中。
解:用移位指令時(shí),左移l 位相當(dāng)于將操作數(shù)乘2,右移1 位相當(dāng)于將操作數(shù)除2。用
移位指令實(shí)現(xiàn)一些簡(jiǎn)單的乘除法程序,比用乘法指令和除法指令進(jìn)行乘、除運(yùn)算要快得多。
用除法指令實(shí)現(xiàn):
MOV CL 0AH
MOV AX,BX
IDIV CL
MOV BX,AX
3.14?串操作指令使用時(shí)特別要注意和SI,DI 這兩個(gè)寄存器及方向標(biāo)志DF 密切相關(guān)。請(qǐng)
具體就指令MOVSB/MOVSW、CMPSB/CMPSW、SCASB/SCASW、LODSB/LODSW、
STOSB/STOSW 列表說(shuō)明和SI、DI 及DF 的關(guān)系。
解答:
SI DI DF
MOVSB/MOVSW 指出源地
址
指出目的地
址
不帶?REP 重復(fù)前綴時(shí),DF=0,每傳送一次,SI、
DI 加1 或加2,DF=1,SI、DI 則減1 或減2
CMPSB/CMPSW
存放源字
符串首地
址
存放目的字
符串首地址
DF=0,每次比較后,SI、DI 加1 或加2,CX 減
1,DF=1,SI、DI 減1 或減2,CX 減1
SCASB/SCASW 無(wú)?指出字符串
首址偏移量?無(wú)
LODSB/LODSW 作為地址
指針
存放處理結(jié)
果
DF=1 時(shí),地址作增量修改,DF=0 時(shí),地址作減
量修改
STOSB/STOSW 無(wú)?存放目的地
址?無(wú)
3.15?用串操作指令設(shè)計(jì)實(shí)現(xiàn)以下功能的程序段:首先將100H 個(gè)數(shù)從2170H 處搬到
1000H 處,然后,從中檢索相等于VAL 中字符的單元,并將此單元值換成空格符。
解答:
START:MOV AX, DS
MOV ES, AX
MOV SI, 2170H
MOV DI, 1000H
MOV CX, 100H
CLD
REP MOVSB
ANOTHER:MOV DI, 1000H
MOV AL, VAL
MOV CX, 100H
CLD
AGE: SCASB
JZ FIN
DEC CX
JNZ AGE
JMP OVER
FIN: MOV BYTE PTR[DI-1],20H
CMP CX,0
JNZ AGE
OVER: RET
3.16 ?求雙字長(zhǎng)數(shù)DX∶AX 的相反數(shù)。
答:
NEG DX
NEG AX
SBB DX,0
3.17?試對(duì)數(shù)據(jù)段偏移地址為101H 單元中的單字節(jié)數(shù)求補(bǔ)后存入102H,最高位不變,
低7 位取反存入103H,高4 位置1,低4 位不變,存入104H。
答:
MOV AX,[0101H]
MOV BX,AX
MOV CX,AX
NOT AX
MOV [0102H],AX
XOR BX,7FH
MOV [0103H],BX
AND CX,0F0H
MOV [0104H]
3.19?試編寫(xiě)一個(gè)程序,比較兩個(gè)同長(zhǎng)字符串STRING1 和STRING2 所含字符是否相同,
若相同MATCH 單元賦值1,若不相同MATCH 單元賦值0。
答案:
程序段為:
;數(shù)據(jù)定義
STRING1 DB ‘ABCDEFGHIJK ;串1,作為源串
STRING2 DB ‘ABCDFGKJ ;串2,作為目標(biāo)串
MATCH DB ? ;定義MATCH 單元
;功能代碼
MOV AX,SEG STRING1
MOV DS,AX ;源串段地址送DS
MOV AX,SEG STRING2
MOV ES,AX ;目標(biāo)串段地址送ES
LEA SI, STRING1 ;源串偏移地址送SI
LEA DI, STRING2 ;目標(biāo)串偏移地址送DI
MOV CX, STRING1- STRING2 ;重復(fù)次數(shù)送CX
CLD ;地址增
REPE CMPSB ;相等繼續(xù)比較,不相等退出
JZ EQUAL ;退出時(shí),若ZF=1,表示兩串相等
MOV MATCH,0 ;不相同,MATCH 單元賦值0
JMP OVER
EQUAL:MOV MATCH,1 ;相同MATCH 單元賦值1
OVER:HLT
3.20?編寫(xiě)代碼,計(jì)算a+10b+100c+20d,其中a、b、c、d 均為單字節(jié)無(wú)符號(hào)數(shù),結(jié)果為16
位,存入SUM 開(kāi)始的兩單元中。
data segment
ma db 12
mb db 21
mc db 86
md db 150
SUM dw 0
data ends
code segment
assume ds:data,cs:code
start:mov ax,data
mov ds,ax
mov dh,0
mov dl,ma
mov ah,0
mov al,10
mul mb
add dx,ax
mov ah,0
mov al,100
mul mc
add dx,ax
mov ah,0
mov al,20
mul md
add dx,ax
mov SUM,dx
code ends
end start
3.21?試編寫(xiě)一段程序把LIST 到LIST+100 中的內(nèi)容傳到BLK 到BLK+100 中去。
答案:
程序段為:
MOV AX,SEG LIST
MOV DS,AX ;源串段地址送DS
MOV AX,SEG BLK
MOV ES,AX ;目標(biāo)串段地址送ES
LEA SI, LIST ;源串偏移地址送SI
LEA DI, BLK ;目標(biāo)串偏移地址送DI
MOV CX, 101 ;重復(fù)次數(shù)送CX
CLD ;地址增
REP MOVSB
3.23?設(shè)CS:0100H 單元有一條兩字節(jié)的JMP SHORT LAB 指令,若其中的位移量為:
⑴56H ⑵80H ⑶78H (4)0E0H
試寫(xiě)出轉(zhuǎn)向目標(biāo)的物理地址是多少?
答:因?yàn)?/span>CS:0100H 處存放兩字節(jié)指令JMP SHORT LAB,所以當(dāng)執(zhí)行該指令時(shí)
(IP)=0102H
(1) 轉(zhuǎn)向目標(biāo)的物理地址是:(CS)*10H+(IP)+0056H=CS:0058H
(2) 轉(zhuǎn)向目標(biāo)的物理地址是:(CS)*10H+(IP)+0FF80H=CS:0082H;80H 對(duì)應(yīng)的負(fù)數(shù)為-80H
(向上轉(zhuǎn)移,負(fù)位移量)
(3) 轉(zhuǎn)向目標(biāo)的物理地址是:(CS)*10H+(IP)+0078H=CS:0180H
(4) 轉(zhuǎn)向目標(biāo)的物理地址是:(CS)*10H+(IP)+0FFE0H=CS:00E2H;E2H 對(duì)應(yīng)的負(fù)數(shù)為
-1EH(向上轉(zhuǎn)移,負(fù)位移量)
3.24?不使用除法指令,將堆棧段中10H、11H 單元中的雙字節(jié)帶符號(hào)數(shù)除以8,結(jié)果存
入12H、13H 單元(注:多字節(jié)數(shù)存放格式均為低位在前,高位在后)。
POP AX
POP BX
TEST AX,8000H ;測(cè)試被除數(shù)符號(hào)位
MOV CL,3
JZ ZS ;若為正數(shù),跳轉(zhuǎn)到ZS
SAR AX,CL
JMP OVER
ZS: SHR AX,CL
OVER:PUSH AX
3.26?數(shù)據(jù)段中3030H 起有兩個(gè)16 位的帶符號(hào)數(shù),試求它們的積,存入3034H-3036H 單
元中。
答案:
MOV AX,[3030H]
MOV BX,[3032H]
IMUL BX
MOV [3034H],AX
MOV [3036H]