IBM-PC匯編語言程序設(shè)計(jì)課后習(xí)題答案(第二版-沈美明)_第1頁(yè)
IBM-PC匯編語言程序設(shè)計(jì)課后習(xí)題答案(第二版-沈美明)_第2頁(yè)
IBM-PC匯編語言程序設(shè)計(jì)課后習(xí)題答案(第二版-沈美明)_第3頁(yè)
IBM-PC匯編語言程序設(shè)計(jì)課后習(xí)題答案(第二版-沈美明)_第4頁(yè)
IBM-PC匯編語言程序設(shè)計(jì)課后習(xí)題答案(第二版-沈美明)_第5頁(yè)
已閱讀5頁(yè),還剩220頁(yè)未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

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

文檔簡(jiǎn)介

第一章1.1用降冪法和除法將下列十進(jìn)制數(shù)轉(zhuǎn)換為二進(jìn)制數(shù)和十六進(jìn)制數(shù):(1)369(2)10000(3)4095(4)32767答:(1)369=101110001B=171H(2)10000=10011100010000B=2710H(3)4095=111111111111B=FFFH(4)32767=111111111111111B=7FFFH1.2將下列二進(jìn)制數(shù)轉(zhuǎn)換為十六進(jìn)制數(shù)和十進(jìn)制數(shù):(1)101101(2)10000000(3)1111111111111111(4)11111111答:(1)101101B=2DH=45(2)10000000B=80H=128(3)1111111111111111B=FFFFH=65535(4)11111111B=FFH=2551.3將下列十六進(jìn)制數(shù)轉(zhuǎn)換為二進(jìn)制數(shù)和十進(jìn)制數(shù):(1)FA(2)5B(3)FFFE(4)1234答:(1)FAH=11111010B=250(2)5BH=1011011B=91(3)FFFEH=1111111111111110B=65534(4)1234H=1001000110100B=46601.4完成下列十六進(jìn)制數(shù)的運(yùn)算,并轉(zhuǎn)換為十進(jìn)制數(shù)進(jìn)行校核:(1)3A+B7(2)1234+AF(3)ABCD-FE(4)7AB×6F答:(1)3A+B7H=F1H=241(2)1234+AFH=12E3H=4835(3)ABCD-FEH=AACFH=43727(4)7AB×6FH=35325H=2178931.5下列各數(shù)均為十進(jìn)制數(shù),請(qǐng)用8位二進(jìn)制補(bǔ)碼計(jì)算下列各題,并用十六進(jìn)制數(shù)表示其運(yùn)算結(jié)果。(1)(-85)+76(2)85+(-76)(3)85-76(4)85-(-76)(5)(-85)-76(6)-85-(-76)答:(1)(-85)+76=10101011B+01001100B=11110111B=0F7H;CF=0;OF=0(2)85+(-76)=01010101B+10110100B=00001001B=09H;CF=1;OF=0(3)85-76=01010101B-01001100B=01010101B+10110100B=00001001B=09H;CF=0;OF=0(4)85-(-76)=01010101B-10110100B=01010101B+01001100B=10100001B=0A1H;CF=0;OF=1(5)(-85)-76=10101011B-01001100B=10101011B+10110100B=01011111B=5FH;CF=0;OF=1(6)-85-(-76)=10101011B-10110100B=10101011B+01001100B=11110111B=0F7H;CF=0;OF=01.6下列各數(shù)為十六進(jìn)制表示的8位二進(jìn)制數(shù),請(qǐng)說明當(dāng)它們分別被看作是用補(bǔ)碼表示的帶符號(hào)數(shù)或無符號(hào)數(shù)時(shí),它們所表示的十進(jìn)制數(shù)是什么?(1)D8(2)FF答:(1)D8H表示的帶符號(hào)數(shù)為-40,D8H表示的無符號(hào)數(shù)為216;(2)FFH表示的帶符號(hào)數(shù)為-1,F(xiàn)FH表示的無符號(hào)數(shù)為255。1.7下列各數(shù)均為用十六進(jìn)制表示的8位二進(jìn)制數(shù),請(qǐng)說明當(dāng)它們分別被看作是用補(bǔ)碼表示的數(shù)或字符的ASCII碼時(shí),它們所表示的十進(jìn)制數(shù)及字符是什么?(1)4F(2)2B(3)73(4)59答:(1)4FH表示的十進(jìn)制數(shù)為79,4FH表示的字符為O;(2)2BH表示的十進(jìn)制數(shù)為43,2BH表示的字符為+;(3)73H表示的十進(jìn)制數(shù)為115,73H表示的字符為s;(4)59H表示的十進(jìn)制數(shù)為89,59H表示的字符為Y。1.8請(qǐng)寫出下列字符串的ASCII碼值。Forexample,Thisisanumber3692.答:46H6FH72H20H65H78H61H6DH70H6CH65H2CH0AH0DH54H68H69H73H20H69H73H20H61H20H6EH75H6DH62H65H72H20H33H36H39H32H2EH0AH0DH第二章2.1

在80x86微機(jī)的輸入/輸出指令中,I/O端口號(hào)通常是由DX寄存器提供的,但有時(shí)也可以在指令中直接指定00~FFH的端口號(hào)。試問可直接由指令指定的I/O端口數(shù)。答:可直接由指令指定的I/O端口數(shù)為256個(gè)。2.2有兩個(gè)16位字1EE5H和2A3CH分別存放在80x86微機(jī)的存儲(chǔ)器的000B0H和000B3H單元中,請(qǐng)用圖表示出它們?cè)诖鎯?chǔ)器里的存放情況。答:存儲(chǔ)器里的存放情況如右下圖所示:

000B0HE5H

000B1H1EH000B2H

000B3H3CH

000B4H2AH2.3在IBMPC機(jī)的存儲(chǔ)器中存放信息如右下圖所示。試讀出30022H和30024H字節(jié)單元的內(nèi)容,以及30021H和30022H字單元的內(nèi)容。30020H12H

30021H34H

30022HABH

30023HCDH

30024HEFH

答:30022H字節(jié)單元的內(nèi)容為ABH;30024H字節(jié)單元的內(nèi)容為EFH。30021H字單元的內(nèi)容為AB34H;30022H字單元的內(nèi)容為CDABH。2.4在實(shí)模式下,段地址和偏移地址為3017:000A的存儲(chǔ)單元的物理地址是什么?如果段地址和偏移地址是3015:002A和3010:007A呢?答:3017:000A、3015:002A和3010:007A的存儲(chǔ)單元的物理地址都是3017AH。2.5如果在一個(gè)程序開始執(zhí)行以前(CS)=0A7F0H,(如16進(jìn)制數(shù)的最高位為字母,則應(yīng)在其前加一個(gè)0)(IP)=2B40H,試問該程序的第一個(gè)字的物理地址是多少?答:該程序的第一個(gè)字的物理地址是0AAA40H。2.6在實(shí)模式下,存儲(chǔ)器中每一段最多可有10000H個(gè)字節(jié)。如果用調(diào)試程序DEBUG的r命令在終端上顯示出當(dāng)前各寄存器的內(nèi)容如下,請(qǐng)畫出此時(shí)存儲(chǔ)器分段的示意圖,以及條件標(biāo)志OF、SF、ZF、CF的值。C>debug-rAX=0000BX=0000CX=0079DX=0000SP=FFEEBP=0000SI=0000DI=0000DS=10E4ES=10F4SS=21F0CS=31FFIP=0100NVUPDIPLNZNAPONC答:此時(shí)存儲(chǔ)器分段的示意圖如右圖所示。OF、SF、ZF、CF的值都為0。2.7下列操作可使用那些寄存器?(1)加法和減法數(shù)據(jù)寄存器等(2)循環(huán)計(jì)數(shù)CX(3)乘法和除法AX、DX,乘數(shù)和除數(shù)用其他寄存器或存儲(chǔ)器(4)保存段地址段寄存器(5)表示運(yùn)算結(jié)果為0ZF=1(6)將要執(zhí)行的指令地址CS:IP(7)將要從堆棧取出數(shù)據(jù)的地址SS:SP答:答案見題目的右邊。2.8那些寄存器可以用來指示存儲(chǔ)器地址?答:BX、BP、SI、DI、堆棧操作時(shí)的SP、對(duì)應(yīng)的段地址、386及其后繼機(jī)型的Exx。2.9請(qǐng)將下列左邊的項(xiàng)和右邊的解釋聯(lián)系起來(把所選字母放在括號(hào)中):(1)CPU(M)A.保存當(dāng)前棧頂?shù)刂返募拇嫫鳌?2)存儲(chǔ)器(C)B.指示下一條要執(zhí)行的指令的地址。(3)堆棧(D)C.存儲(chǔ)程序、數(shù)據(jù)等信息的記憶裝置,微機(jī)有RAM和ROM兩種。(4)IP(B)D.以后進(jìn)先出方式工作的存儲(chǔ)空間。(5)SP(A)E.把匯編語言程序翻譯成機(jī)器語言程序的系統(tǒng)程序。(6)狀態(tài)標(biāo)志(L)F.唯一代表存儲(chǔ)空間中每個(gè)字節(jié)單元的地址。(7)控制標(biāo)志(K)G.能被計(jì)算機(jī)直接識(shí)別的語言。(8)段寄存器(J)H.用指令的助記符、符號(hào)地址、標(biāo)號(hào)等符號(hào)書寫程序的語言。(9)物理地址(F)I.把若干個(gè)模塊連接起來成為可執(zhí)行文件的系統(tǒng)程序。(10)匯編語言(H)J.保存各邏輯段的起始地址的寄存器,8086/8088機(jī)有四個(gè):CS、DS、SS、ES。(11)機(jī)器語言(G)K.控制操作的標(biāo)志,如DF位。(12)匯編程序(E)L.記錄指令操作結(jié)果的標(biāo)志,共6位:OF、SF、ZF、AF、PF、CF。(13)連接程序(I)M.分析、控制并執(zhí)行指令的部件,由算術(shù)邏輯部件ALU和寄存器等組成。(14)指令(O)N.由匯編程序在匯編過程中執(zhí)行的指令。(15)偽指令(N)O.告訴CPU要執(zhí)行的操作(一般還要指出操作數(shù)地址),在程序運(yùn)行時(shí)執(zhí)行。答:答案見題目的括號(hào)中。第三章3.1給定(BX)=637DH,(SI)=2A9BH,位移量D=7237H,試確定在以下各種尋址方式下的有效地址是什么?

(1)立即尋址

(2)直接尋址

(3)使用BX的寄存器尋址

(4)使用BX的簡(jiǎn)接尋址

(5)使用BX的寄存器相對(duì)尋址

(6)基址變址尋址

(7)相對(duì)基址變址尋址

答:(1)操作數(shù)在指令中,即立即數(shù);

(2)EA=D=7237H;

(3)無EA,操作數(shù)為(BX)=637DH;

(4)EA=(BX)=637DH;

(5)EA=(BX)+D=0D5B4H;

(6)EA=(BX)+(SI)=8E18H;

(7)EA=(BX)+(SI)+D=1004FH;超過了段的邊界,最高進(jìn)位位丟失,因此EA=004FH。

3.2試根據(jù)以下要求寫出相應(yīng)的匯編語言指令

(1)把BX寄存器和DX寄存器的內(nèi)容相加,結(jié)果存入DX寄存器中。

(2)用寄存器BX和SI的基址變址尋址方式把存儲(chǔ)器中的一個(gè)字節(jié)與AL寄存器的內(nèi)容相加,并把結(jié)果送到AL寄存器中。

(3)用寄存器BX和位移量0B2H的寄存器相對(duì)尋址方式把存儲(chǔ)器中的一個(gè)字和(CX)相加,并把結(jié)果送回存儲(chǔ)器中。

(4)用位移量為0524H的直接尋址方式把存儲(chǔ)器中的一個(gè)字與數(shù)2A59H相加,并把結(jié)果送回存儲(chǔ)單元中。

(5)把數(shù)0B5H與(AL)相加,并把結(jié)果送回AL中。

答:(1)ADDDX,BX

(2)ADDAL,[BX][SI]

(3)ADD[BX+0B2H],CX

(4)ADDWORDPTR[0524H],2A59H

(5)ADDAL,0B5H

3.3寫出把首地址為BLOCK的字?jǐn)?shù)組的第6個(gè)字送到DX寄存器的指令。要求使用以下幾種尋址方式:

(1)寄存器間接尋址

(2)寄存器相對(duì)尋址

(3)基址變址尋址

答:(1)MOVBX,OFFSETBLOCK

ADDBX,(6–1)*2

MOVDX,[BX]

(2)MOVBX,OFFSETBLOCK改為:MOVBX,(6-1)*2

MOVDX,[BX+(6–1)*2]也可MOVDX,BLOCK[BX]

(3)MOVBX,OFFSETBLOCK

MOVSI,(6–1)*2

MOVDX,[BX][SI]

3.4現(xiàn)有(DS)=2000H,(BX)=0100H,(SI)=0002H,(20100H)=12H,(20101H)=34H,(20102H)=56H,(20103H)=78H,(21200H)=2AH,(21201H)=4CH,(21202H)=B7H,(21203H)=65H,試說明下列各條指令執(zhí)行完后AX寄存器的內(nèi)容。

(1)MOVAX,1200H

(2)MOVAX,BX

(3)MOVAX,[1200H]

(4)MOVAX,[BX]

(5)MOVAX,1100[BX]

(6)MOVAX,[BX][SI]

(7)MOVAX,1100[BX][SI]

答:(1)(AX)=1200H

(2)(AX)=0100H

(3)(AX)=4C2AH

(4)(AX)=3412H

(5)(AX)=4C2AH

(6)(AX)=7856H

(7)(AX)=65B7H

3.5給定(IP)=2BC0H,(CS)=0200H,位移量D=5119H,(BX)=1200H,(DS)=212AH,(224A0H)=0600H,(275B9H)=098AH,試為以下的轉(zhuǎn)移指令找出轉(zhuǎn)移的偏移地址。

(1)段內(nèi)直接尋址

(2)使用BX及寄存器間接尋址方式的段內(nèi)間接尋址

(3)使用BX及寄存器相對(duì)尋址方式的段內(nèi)間接尋址

答:(1)JMPNEARPTR5119H;(IP)=5119H+((IP)+03H)=7CDCH,物理地址PA=09CDCH

(IP)+03H是JMPNEARPTR5119H指令的下一條指令的首地址。

(2)JMPWORDPTR[BX];(IP)=((DS)*10H+(BX))=0600H,PA=02600H

(3)JMPD[BX];(IP)=((DS)*10H+(BX)+D)=098AH,PA=0298AH

3.6設(shè)當(dāng)前數(shù)據(jù)段寄存器的內(nèi)容為1B00H,在數(shù)據(jù)段的偏移地址2000H單元內(nèi),含有一個(gè)內(nèi)容為0FF10H和8000H的指針,它們是一個(gè)16位變量的偏移地址和段地址,試寫出把該變量裝入AX的指令序列,并畫圖表示出來。

答:MOVBX,[2000H];圖示如上所示。

MOVAX,[2000H+2]

MOVES,AX

MOVAX,ES:[BX]

3.7在0624H單元內(nèi)有一條二字節(jié)JMPSHORTOBJ指令,如其中位移量為(1)27H,(2)6BH,(3)0C6H,試問轉(zhuǎn)向地址OBJ的值是多少?

答:(1)OBJ=0624H+02H+27H=064DH

(2)OBJ=0624H+02H+6BH=0691H

(3)OBJ=0624H+02H+0C6H=05ECH;C6H對(duì)應(yīng)的負(fù)數(shù)為-3AH(向上轉(zhuǎn)移,負(fù)位移量)

3.8假定(DS)=2000H,(ES)=2100H,(SS)=1500H,(SI)=00A0H,(BX)=0100H,(BP)=0010H,數(shù)據(jù)段中變量名VAL的偏移地址為0050H,試指出下列源操作數(shù)字段的尋址方式是什么?其物理地址值是多少?

(1)MOVAX,0ABH(2)MOVAX,BX

(3)MOVAX,[100H](4)MOVAX,VAL

(5)MOVAX,[BX](6)MOVAX,ES:[BX]

(7)MOVAX,[BP](8)MOVAX,[SI]

(9)MOVAX,[BX+10](10)MOVAX,VAL[BX]

(11)MOVAX,[BX][SI](12)MOVAX,VAL[BX][SI]

答:(1)立即方式;操作數(shù)在本條指令中

(2)寄存器尋址方式;操作數(shù)為(BX)=0100H

(3)直接尋址方式;PA=20100H

(4)直接尋址方式;PA=20050H

(5)BX寄存器間接尋址方式;PA=20100H

(6)附加段BX寄存器間接尋址方式;PA=21100H

(7)BP寄存器間接尋址方式;PA=15010H

(8)SI寄存器間接尋址方式;PA=200A0H

(9)BX寄存器相對(duì)尋址方式;PA=20110H

(10)BX寄存器相對(duì)尋址方式;PA=20150H

(11)BX和SI寄存器基址變址尋址方式;PA=201A0H

(12)BX和SI寄存器相對(duì)基址變址尋址方式;PA=201F0H

3.9在ARRAY數(shù)組中依次存儲(chǔ)了七個(gè)字?jǐn)?shù)據(jù),緊接著是名為ZERO的字單元,表示如下:

ARRAYDW23,36,2,100,32000,54,0

ZERODW?

(1)如果BX包含數(shù)組ARRAY的初始地址,請(qǐng)編寫指令將數(shù)據(jù)0傳送給ZERO單元。

(2)如果BX包含數(shù)據(jù)0在數(shù)組中的位移量,請(qǐng)編寫指令將數(shù)據(jù)0傳送給ZERO單元。

答:(1)MOVAX,[BX+(7-1)*2]

MOV[BX+(7)*2],AX

(2)MOVAX,ARRAY[BX]

MOVARRAY[BX+2],AX

3.10如TABLE為數(shù)據(jù)段中0032單元的符號(hào)名,其中存放的內(nèi)容為1234H,試問以下兩條指令有什么區(qū)別?指令執(zhí)行完后AX寄存器的內(nèi)容是什么?

MOVAX,TABLE

LEAAX,TABLE

答:MOVAX,TABLE是將TABLE單元的內(nèi)容送到AX,(AX)=1234H

LEAAX,TABLE是將TABLE單元的有效地址送到AX,(AX)=0032H

3.11執(zhí)行下列指令后AX寄存器中的內(nèi)容是什么?

TABLEDW10,20,30,40,50;000AH,0014H,001EH,0028H,0032H

ENTRYDW3

MOVBX,OFFSETTABLE

ADDBX,ENTRY

MOVAX,[BX]

答:(AX)=1E00H(TABLE的存儲(chǔ)方式如右圖所示)

3.12下列ASCII碼串(包括空格符)依次存儲(chǔ)在起始地址為CSTRING的字節(jié)單元中:

CSTRINGDB‘BASEDADDRESSING’

請(qǐng)編寫指令將字符串中的第1個(gè)和第7個(gè)字符傳送給DX寄存器。

答:MOVDH,CSTRING

MOVDL,CSTRING+7-1

3.13已知堆棧段寄存器SS的內(nèi)容是0FFA0H,堆棧指針寄存器SP的內(nèi)容是00B0H,先執(zhí)行兩條把8057H和0F79H分別進(jìn)棧的PUSH指令,再執(zhí)行一條POP指令。試畫出堆棧區(qū)和SP的內(nèi)容變化過程示意圖(標(biāo)出存儲(chǔ)單元的物理地址)。

答:堆棧區(qū)和SP的內(nèi)容變化過程示意圖如下左圖所示。3.14設(shè)(DS)=1B00H,(ES)=2B00H,有關(guān)存儲(chǔ)單元的內(nèi)容如上右圖所示。請(qǐng)寫出兩條指令把字變量X裝入AX寄存器。

答:MOVBX,[2000H]

MOVAX,ES:[BX]

3.15求出以下各十六進(jìn)制數(shù)與十六進(jìn)制數(shù)62A0H之和,并根據(jù)結(jié)果設(shè)置標(biāo)志位SF、ZF、CF和OF的值。

(1)1234H(2)4321H(3)CFA0H(4)9D60H

答:(1)和為74D4H;SF=0,ZF=0,CF=0,OF=0

(2)和為A5C1H;SF=1,ZF=0,CF=0,OF=1

(3)和為3240H;SF=0,ZF=0,CF=1,OF=0

(4)和為0000H;SF=0,ZF=1,CF=1,OF=0

3.16求出以下各十六進(jìn)制數(shù)與十六進(jìn)制數(shù)4AE0H的差值,并根據(jù)結(jié)果設(shè)置標(biāo)志位SF、ZF、CF和OF的值。

(1)1234H(2)5D90H(3)9090H(4)EA04H

答:(1)差為C754H;SF=1,ZF=0,CF=1,OF=0

(2)差為12B0H;SF=0,ZF=0,CF=0,OF=0

(3)差為45B0H;SF=0,ZF=0,CF=0,OF=1

(4)差為9F24H;SF=1,ZF=0,CF=0,OF=0

3.17寫出執(zhí)行以下計(jì)算的指令序列,其中X、Y、Z、R、W均為存放16位帶符號(hào)數(shù)單元的地址。

(1)Z←W+(Z-X)(2)Z←W-(X+6)-(R+9)

(3)Z←(W*X)/(Y+6),R←余數(shù)(4)Z←((W-X)/5*Y)*2

答:(1)MOVAX,Z;以下程序都未考慮帶符號(hào)數(shù)的溢出

SUBAX,X

ADDAX,W

MOVZ,AX

(2)MOVBX,X

ADDBX,6

MOVCX,R

ADDCR,9

MOVAX,W

SUBAX,BX

SUBAX,CX

MOVZ,AX

(3)ADDY,6

MOVAX,W

IMULX

IDIVY

MOVZ,AX

MOVR,DX

(4)MOVAX,W

SUBAX,X

CWD

MOVBX,5

IDIVBX

IMULY

SHLAX,1;((DX),(AX))*2

RCLDX,1

3.18已知程序段如下:

MOVAX,1234H;(AX)=1234H,標(biāo)志位不變

MOVCL,4;(AX)和標(biāo)志位都不變

ROLAX,CL;(AX)=2341H,CF=1,SF和ZF不變

DECAX;(AX)=2340H,CF=1不變,SF=0,ZF=0

MOVCX,4;(AX)和標(biāo)志位都不變

MULCX;(AX)=8D00H,CF=OF=0,其它標(biāo)志無定義

INT20H

試問:

(1)每條指令執(zhí)行完后,AX寄存器的內(nèi)容是什么?

(2)每條指令執(zhí)行完后,進(jìn)位、符號(hào)和零標(biāo)志的值是什么?

(3)程序結(jié)束時(shí),AX和DX的內(nèi)容是什么?

答:(1)見注釋;

(2)見注釋;

(3)(AX)=8D00H,(DX)=0

3.19下列程序段中的每條指令執(zhí)行完后,AX寄存器及CF、SF、ZF和OF的內(nèi)容是什么?

MOVAX,0;(AX)=0,標(biāo)志位不變

DECAX;(AX)=0FFFFH,CF不變,SF=1,ZF=0,OF=0

ADDAX,7FFFH;(AX)=7FFEH,CF=1,SF=0,ZF=0,OF=0

ADDAX,2;(AX)=8000H,CF=0,SF=1,ZF=0,OF=1

NOTAX;(AX)=7FFFH,標(biāo)志位不變

SUBAX,0FFFFH;(AX)=8000H,CF=1,SF=1,ZF=0,OF=1

ADDAX,8000H;(AX)=0,CF=1,SF=0,ZF=1,OF=1

SUBAX,1;(AX)=0FFFFH,CF=1,SF=1,ZF=0,OF=0

ANDAX,58D1H;(AX)=58D1H,CF=0,SF=0,ZF=0,OF=0

SALAX,1;(AX)=0B1A2H,CF=0,SF=1,ZF=0,OF=1

SARAX,1;(AX)=0D8D1H,CF=0,SF=1,ZF=0,OF=0

NEGAX;(AX)=272FH,CF=1,SF=0,ZF=0,OF=0

RORAX,1;(AX)=9397H,CF=1,SF和ZF不變,OF=1

答:見注釋。

3.20變量DATAX和變量DATAY的定義如下:

DATAXDW0148H

DW2316H

DATAYDW0237H

DW4052H

請(qǐng)按下列要求寫出指令序列:

(1)DATAX和DATAY兩個(gè)字?jǐn)?shù)據(jù)相加,和存放在DATAY中。

(2)DATAX和DATAY兩個(gè)雙字?jǐn)?shù)據(jù)相加,和存放在從DATAY開始的雙字單元中。

(3)解釋下列指令的作用:

STC

MOVBX,DATAX

ADCBX,DATAY

(4)DATAX和DATAY兩個(gè)字?jǐn)?shù)據(jù)相乘(用MUL)。

(5)DATAX和DATAY兩個(gè)雙字?jǐn)?shù)據(jù)相乘(用MUL)。

(6)DATAX除以23(用DIV)。

(7)DATAX雙字除以字DATAY(用DIV)。

答:(1)MOVAX,DATAX

ADDDATAY,AX

MOVAX,DATAX+2

ADDDATAY+2,AX

(2)MOVAX,DATAX

ADDDATAY,AX

MOVAX,DATAX+2

ADCDATAY+2,AX

MOVDATAY+4,0;用于存放進(jìn)位位

ADCDATAY+4,0

(3)DATAX和DATAY兩個(gè)字?jǐn)?shù)據(jù)之和加1,結(jié)果存入BX寄存器。

(4)RESULT1DW0

DW0

RESULT2DW0

DW0

MOVAX,DATAX

MULDATAY

MOVRESULT1,AX

MOVRESULT1+2,DX

MOVAX,DATAX+2

MULDATAY+2

MOVRESULT2,AX

MOVRESULT2+2,DX

(5)AADW0

BBDW0

CCDW0

DDDW0

MOVAX,DATAX

MULDATAY

MOVAA,AX

MOVBB,DX

MOVAX,DATAX

MULDATAY+2

ADDBB,AX

ADCCC,DX

MOVAX,DATAX+2

MULDATAY

ADDBB,AX

ADCCC,DX

ADCDD,0

MOVAX,DATAX+2

MULDATAY+2

ADDCC,AX

ADCDD,DX

(6)MOVAX,DATAX

MOVBL,23

DIVBL

(7)MOVDX,DATAX+2

MOVAX,DATAX

DIVDATAY

3.21寫出對(duì)存放在DX和AX中的雙字長(zhǎng)數(shù)求補(bǔ)的指令序列。

答:NEGDX也可為:NOTDX

NEGAXNOTAX

SBBDX,0ADDAX,1

ADCDX,0

3.22試編寫一程序求出雙字長(zhǎng)數(shù)的絕對(duì)值。雙字長(zhǎng)數(shù)在A和A+2單元中,結(jié)果存放在B和B+2單元中。

答:程序段如下:

MOVAX,A

MOVDX,A+2

CMPDX,0

JNSZHENSHU;不是負(fù)數(shù)則轉(zhuǎn)走

NEGDX

NEGAX

SBBDX,0

ZHENSHU:MOVB,AX

MOVB+2,DX

INT20H

3.23假設(shè)(BX)=0E3H,變量VALUE中存放的內(nèi)容為79H,確定下列各條指令單獨(dú)執(zhí)行后的結(jié)果。

(1)XORBX,VALUE;(BX)=9AH,CF、OF都為0,AF無定義,SF=1,ZF=0,PF=1

(2)ANDBX,VALUE;(BX)=61H,CF、OF都為0,AF無定義,SF=0,ZF=0,PF=0

(3)ORBX,VALUE;(BX)=0FBH,CF、OF都為0,AF無定義,SF=1,ZF=0,PF=0

(4)XORBX,0FFH;(BX)=1CH,CF、OF都為0,AF無定義,SF=0,ZF=0,PF=0

(5)ANDBX,0;(BX)=00H,CF、OF都為0,AF無定義,SF=0,ZF=1,PF=1

(6)TESTBX,01H;(BX)=0E3H,CF、OF都為0,AF無定義,SF=1,ZF=0,PF=0

答:見注釋。

3.24試寫出執(zhí)行下列指令序列后BX寄存器的內(nèi)容。執(zhí)行前(BX)=6D16H。

MOVCL,7

SHRBX,CL

答:(BX)=00DAH。

3.25試用移位指令把十進(jìn)制數(shù)+53和-49分別乘以2。它們應(yīng)該用什么指令?得到的結(jié)果是什么?如果要除以2呢?

答:MOVAL,53

SALAL,1;(AL)=(+53*2)=6AH

MOVAL,-49

SALAL,1;(AL)=(-49*2)=9EH

MOVAL,53

SARAL,1;(AL)=(53/2)=1AH

MOVAL,-49

SARAL,1;(AL)=(-49/2)=0E7H

3.26試分析下面的程序段完成什么功能?

MOVCL,04

SHLDX,CL

MOVBL,AH

SHLAX,CL

SHRBL,CL

ORDL,BL

答:本程序段將((DX),(AX))的雙字同時(shí)左移4位,即將此雙字乘以10H(16)。

3.27假定(DX)=0B9H,(CL)=3,(CF)=1,確定下列各條指令單獨(dú)執(zhí)行后DX中的值。

(1)SHRDX,1;(DX)=05CH

(2)SARDX,CL;(DX)=17H

(3)SHLDX,CL;(DX)=5C8H

(4)SHLDL,1;(DX)=72H

(5)RORDX,CL;(DX)=2017H

(6)ROLDL,CL;(DX)=0CDH

(7)SALDH,1;(DX)=0B9H

(8)RCLDX,CL;(DX)=2CCH

(4)RCRDL,1;(DX)=0DCH

答:見注釋。

3.28下列程序段執(zhí)行完后,BX寄存器的內(nèi)容是什么?

MOVCL,3

MOVBX,0B7H

ROLBX,1

RORBX,CL

答:(BX)=0C02DH。

3.29假設(shè)數(shù)據(jù)段定義如下:

CONAMEDB‘SPACEEXPLORERSINC.’

PRLINEDB20DUP(‘’)

用串指令編寫程序段分別完成以下功能:

(1)從左到右把CONAME中的字符串傳送到PRLINE。

(2)從右到左把CONAME中的字符串傳送到PRLINE。

(3)把CONAME中的第3和第4個(gè)字節(jié)裝入AX。

(4)把AX寄存器的內(nèi)容存入從PRLINE+5開始的字節(jié)中。

(5)檢查CONAME字符串中有無空格字符,如有則把第一個(gè)空格字符的地址傳送給BX寄存器。

答:(1)MOVCX,20

CLD

MOVSI,SEGCONAME

MOVDS,SI

MOVES,SI

LEASI,CONAME

LEADI,PRLINE

REPMOVSB

(2)MOVCX,20

STD

MOVSI,SEGCONAME

MOVDS,SI

MOVES,SI

LEASI,CONAME

ADDSI,20-1

LEADI,PRLINE

ADDDI,20-1

REPMOVSB

(3)MOVAX,WORDPTRCONAME+3-1

(4)MOVWORDPTRPRLINE+5,AX

(5)MOVAL,‘’;空格的ASCII碼送AL寄存器

CLD

MOVDI,SEGCONAME

MOVES,DI

LEADI,CONAME

REPNESCASB

JNENEXT

DECDI

MOVBX,DI

NEXT:┇

3.30編寫程序段,把字符串STRING中的‘&’字符用空格符代替。

STRINGDB‘ThedateisFEB&03’

答:程序段如下:

MOVCX,18

MOVAL,‘&’

CLD

MOVDI,SEGSTRING

MOVES,DI

LEADI,STRING

REPNESCASB

JNENEXT

DECDI

MOVES:BYTEPTR[DI],‘’;送空格符

NEXT:┇

3.31假設(shè)數(shù)據(jù)段中數(shù)據(jù)定義如下:

STUDENT_NAMEDB30DUP(?)

STUDENT_ADDRDB9DUP(?)

PRINT_LINEDB132DUP(?)

分別編寫下列程序段:

(1)用空格符清除PRINT_LINE域。

(2)在STUDENT_ADDR中查找第一個(gè)‘-’。

(3)在STUDENT_ADDR中查找最后一個(gè)‘-’。

(4)如果STUDENT_NAME域中全是空格符時(shí),填入‘*’。

(5)把STUDENT_NAME移到PRINT_LINE的前30個(gè)字節(jié)中,把STUDENT_ADDR移到PRINT_LINE的后9個(gè)字節(jié)中。

答:公共的程序段如下:

MOVDI,DS

MOVES,DI

(1)MOVCX,132

MOVAL.,‘’;空格的ASCII碼送AL寄存器

CLD

LEADI,PRINT_LINE

REPSTOSB

(2)MOVCX,9

MOVAL.,‘-’

CLD

LEADI,STUDENT_ADDR

REPNESCASB

JNENO_DASH

DECDI

NO_DASH:┇

(3)MOVCX,9

MOVAL.,‘-’

STD

LEADI,STUDENT_ADDR

ADDDI,9-1

REPNESCASB

JNENO_DASH

INCDI

NO_DASH:┇

(4)MOVCX,30

MOVAL,‘’;空格的ASCII碼送AL寄存器

CLD

LEADI,STUDENT_NAME

REPESCASB

JNENEXT

MOVCX,30

MOVAL,‘*’;“*”的ASCII碼送AL寄存器

LEADI,STUDENT_NAME

REPSTOSB

NEXT:┇

(5)MOVCX,30

CLD

LEASI,STUDENT_NAME

LEADI,PRINT_LINE

REPMOVSB

MOVCX,9

STD

LEASI,STUDENT_ADDR+9-1

LEADI,PRINT_LINE+132-1

REPMOVSB

3.32編寫一程序段:比較兩個(gè)5字節(jié)的字符串OLDS和NEWS,如果OLDS字符串不同于NEWS字符串則執(zhí)行NEW_LESS;否則順序執(zhí)行程序。

答:程序段如下:

MOVCX,5

CLD

MOVDI,SEGOLDS

MOVDS,DI

MOVES,DI

LEASI,OLDS

LEADI,NEWS

REPECMPSB

JNENEW_LESS

NEW_LESS:┇

3.33假定AX和BX中的內(nèi)容為帶符號(hào)數(shù),CX和DX中的內(nèi)容為無符號(hào)數(shù),請(qǐng)用比較指令和條件轉(zhuǎn)移指令實(shí)現(xiàn)以下判斷:

(1)若DX的內(nèi)容超過CX的內(nèi)容,則轉(zhuǎn)去執(zhí)行EXCEED。

(2)若BX的內(nèi)容大于AX的內(nèi)容,則轉(zhuǎn)去執(zhí)行EXCEED。

(3)若CX的內(nèi)容等于0,則轉(zhuǎn)去執(zhí)行ZERO。

(4)BX與AX的內(nèi)容相比較是否產(chǎn)生溢出?若溢出則轉(zhuǎn)OVERFLOW。

(5)若BX的內(nèi)容小于等于AX的內(nèi)容,則轉(zhuǎn)EQ_SMA。

(6)若DX的內(nèi)容低于等于CX的內(nèi)容,則轉(zhuǎn)EQ_SMA。

答:(1)CMPDX,CX

JAEXCEED

(2)CMPBX,AX

JGEXCEED

(3)JCXZZERO

(4)CMPBX,AX

JOOVERFLOW

(5)CMPBX,AX

JLEEQ_SMA

(6)CMPDX,CX

JBEEQ_SMA

3.34試分析下列程序段:

ADDAX,BX

JNOL1

JNCL2

SUBAX,BX

JNCL3

JNOL4

JMPSHORTL5

如果AX和BX的內(nèi)容給定如下:

AXBX

(1)147BH80DCH

(2)B568H42C8H

(3)42C8H608DH

(4)D023H9FD0H

(5)94B7HB568H

問該程序分別在上面5種情況下執(zhí)行后,程序轉(zhuǎn)向哪里?

答:(1)轉(zhuǎn)向L1

(2)轉(zhuǎn)向L1

(3)轉(zhuǎn)向L2

(4)轉(zhuǎn)向L5;因?yàn)榧臃ㄖ噶詈驛X中已經(jīng)是6FF3H

(5)轉(zhuǎn)向L5;因?yàn)榧臃ㄖ噶詈驛X中已經(jīng)是4A14H

3.35指令CMPAX,BX后面跟著一條格式為J…L1的條件轉(zhuǎn)移指令,其中…可以是B、NB、BE、NBE、L、NL、LE、NLE中的任意一個(gè)。如果AX和BX的內(nèi)容給定如下:

AXBX

(1)1F52H1F52H

(2)88C9H88C9H

(3)FF82H007EH

(4)58BAH020EH

(5)FFC5HFF8BH

(6)09A0H1E97H

(7)8AEAHFC29H

(8)D367H32A6H

問以上8條轉(zhuǎn)移指令中的哪幾條將引起轉(zhuǎn)移到L1?

答:(1)JNB、JBE、JNL、JLE

(2)JNB、JBE、JNL、JLE

(3)JNB、JNBE、JL、JLE

(4)JNB、JNBE、JNL、JNLE

(5)JNB、JNBE、JL、JLE

(6)JB、JBE、JL、JLE

(7)JB、JBE、JNL、JNLE

(8)JNB、JNBE、JL、JLE

3.36假設(shè)X和X+2單元的內(nèi)容為雙精度數(shù)p,Y和Y+2單元的內(nèi)容為雙精度數(shù)q,(X和Y為低位字)試說明下列程序段做什么工作?

MOVDX,X+2

MOVAX,X

ADDAX,X

ADCDX,X+2

CMPDX,Y+2

JLL2

JGL1

CMPAX,Y

JBEL2

L1:MOVAX,1

JMPSHORTEXIT

L2:MOVAX,2

EXIT:INT20H

答:此程序段判斷p*2>q,則使(AX)=1后退出;p*2≤q,則使(AX)=2后退出。

3.37要求測(cè)試在STATUS中的一個(gè)字節(jié),如果第1、3、5位均為1則轉(zhuǎn)移到ROUTINE_1;如果此三位中有兩位為1則轉(zhuǎn)移到ROUTINE_2;如果此三位中只有一位為1則轉(zhuǎn)移到ROUTINE_3;如果此三位全為0則轉(zhuǎn)移到ROUTINE_4。試畫出流程圖,并編制相應(yīng)的程序段。

答:程序段如下:

MOVAL,STATUS

ANDAL,00010101B;只保留第1、3、5位

JZROUTINE_4;3位全為0轉(zhuǎn)ROUTINE_4

JPEROUTINE_2;兩位為1轉(zhuǎn)ROUTINE_2

CMPAL,00010101B

JZROUTINE_1;3位全為1轉(zhuǎn)ROUTINE_1

ROUTINE_3:┇;僅一位為1執(zhí)行ROUTINE_3

JMPEXIT

ROUTINE_1:┇

JMPEXIT

ROUTINE_2:┇

JMPEXIT

ROUTINE_4:┇

EXIT:INT20H

3.38在下列程序的括號(hào)中分別填入如下指令:

(1)LOOPL20

(2)LOOPEL20

(3)LOOPNEL20

試說明在三種情況下,當(dāng)程序執(zhí)行完后,AX、BX、

CX、DX四個(gè)寄存器的內(nèi)容分別是什么?

TITLEEXLOOP.COM

CODESGSEGMENT

ASSUMECS:CODESG,DS:CODSEG,SS:CODSEG

ORG100H

BEGIN:MOVAX,01

MOVBX,02

MOVDX,03

MOVCX,04

L20:

INCAX

ADDBX,AX

SHRDX,1

()

RET

CODESGENDS

ENDBEGIN

答:(1)(AX)=5H,(BX)=10H,(CX)=0H,(DX)=0H

(2)(AX)=2H,(BX)=4H,(CX)=3H,(DX)=1H

(3)(AX)=3H,(BX)=7H,(CX)=2H,(DX)=0H

3.39考慮以下的調(diào)用序列:

(1)MAIN調(diào)用NEAR的SUBA過程(返回的偏移地址為0400);

(2)SUBA調(diào)用NEAR的SUBB過程(返回的偏移地址為0A00);

(3)SUBB調(diào)用FAR的SUBC過程(返回的段地址為B200,返回的偏移地址為0100);

(4)從SUBC返回SUBB;

(5)SUBB調(diào)用NEAR的SUBD過程(返回的偏移地址為0C00);

(6)從SUBD返回SUBB;

(7)從SUBB返回SUBA;

(8)從SUBA返回MAIN;

(9)從MAIN調(diào)用SUBC(返回的段地址為1000,返回的偏移地址為0600);

請(qǐng)畫出每次調(diào)用及返回時(shí)的堆棧狀態(tài)。

答:每次調(diào)用及返回時(shí)的堆棧狀態(tài)圖如下所示:3.40假設(shè)(EAX)=00001000H,(EBX)=00002000H,(DS)=0010H,試問下列指令訪問內(nèi)存的物理地址是什么?

(1)MOVECX,[EAX+EBX]

(2)MOV[EAX+2*EBX],CL

(3)MOVDH,[EBX+4*EAX+1000H]

答:(1)PA=(DS)*10H+EA=00100H+00001000H+00002000H=00003100H

(2)PA=(DS)*10H+EA=00100H+00001000H+2*00002000H=00005100H

(3)PA=(DS)*10H+EA=00100H+00002000H+4*00001000H+1000H=00007100H

3.41假設(shè)(EAX)=9823F456H,(ECX)=1F23491H,(BX)=348CH,(SI)=2000H,(DI)=4044H。在DS段中從偏移地址4044H單元開始的4個(gè)字節(jié)單元中,依次存放的內(nèi)容為92H,6DH,0A2H和4CH,試問下列各條指令執(zhí)行完后的目的地址及其中的內(nèi)容是什么?

(1)MOV[SI],EAX

(2)MOV[BX],ECX

(3)MOVEBX,[DI]

答:(1)目的地址為DS:2000H,內(nèi)容依次為:56H,0F4H,23H和98H

(2)目的地址為DS:348CH,內(nèi)容依次為:91H,34H,0F2H和01H

(3)目的操作數(shù)為EBX寄存器,(EBX)=4CA26D92H

3.42說明下列指令的操作

(1)PUSHAX;將(AX)壓入堆棧

(2)POPESI;將堆棧中的雙字彈出到ESI寄存器中

(3)PUSH[BX];將((BX))對(duì)應(yīng)存儲(chǔ)單元中的字壓入堆棧

(4)PUSHAD;32位通用寄存器依次進(jìn)棧

(5)POPDS;將堆棧中的字彈出到DS寄存器中

(6)PUSH4;將立即數(shù)4以字的方式壓入堆棧

答:見注釋。

3.43請(qǐng)給出下列各指令序列執(zhí)行完后目的寄存器的內(nèi)容。

(1)MOVEAX,299FF94H

ADDEAX,34FFFFH;(EAX)=2CEFF93H

(2)MOVEBX,40000000

SUBEBX,1500000;(EBX)=3EB00000H

(3)MOVEAX,39393834H

ANDEAX,0F0F0F0FH;(EAX)=09090804H

(4)MOVEDX,9FE35DH

XOREDX,0F0F0F0H;(EDX)=6F13ADH

答:見注釋。

3.44請(qǐng)給出下列各指令序列執(zhí)行完后目的寄存器的內(nèi)容。

(1)MOVBX,-12

MOVSXEBX,BX;(EBX)=0FFFFFFF4H

(2)MOVCL,-8

MOVSXEDX,CL;(EDX)=0FFFFFFF8H

(3)MOVAH,7

MOVZXECX,AH;(ECX)=00000007H

(4)MOVAX,99H

MOVZXEBX,AX;(EBX)=00000099H

答:見注釋。

3.45請(qǐng)給出下列指令序列執(zhí)行完后EAX和EBX的內(nèi)容。

MOVECX,307F455H

BSFEAX,ECX;(EAX)=0D

BSREBX,ECX;(EBX)=25D

答:見注釋。

3.46請(qǐng)給出下列指令序列執(zhí)行完后AX和DX的內(nèi)容。

MOVBX,98H

BSFAX,BX;(AX)=3D

BSRDX,BX;(DX)=7D

答:見注釋。

3.47請(qǐng)編寫一程序段,要求把ECX、EDX和ESI的內(nèi)容相加,其和存入EDI寄存器中(不考慮溢出)。

答:MOVEDI,0也可為:MOVEDI,ECX

ADDEDI,ECXADDEDI,EDX

ADDEDI,EDXADDEDI,ESI

ADDEDI,ESI

3.48請(qǐng)說明IMULBX,DX,100H指令的操作。

答:(BX)←(DX)*100H

3.49試編寫一程序段,要求把BL中的數(shù)除以CL中的數(shù),并把其商乘以2,最后的結(jié)果存入DX寄存器中。

答:MOVAL,BL

MOVAH,0;假定為無符號(hào)數(shù),否則用CBW指令即可

DIVCL

MOVAH,0

SHLAX,1

MOVDX,AX

3.50請(qǐng)說明JMPDI和JMP[DI]指令的區(qū)別。

答:JMPDI是轉(zhuǎn)移到以(DI)內(nèi)容為偏移地址的單元去執(zhí)行指令;JMP[DI]是轉(zhuǎn)移到以(DI)間接尋址的內(nèi)存單元內(nèi)容為偏移地址的單元去執(zhí)行指令。

3.51試編寫一程序段,要求在長(zhǎng)度為100H字節(jié)的數(shù)組中,找出大于42H的無符號(hào)數(shù)的個(gè)數(shù)并存入字節(jié)單元UP中;找出小于42H的無符號(hào)數(shù)的個(gè)數(shù)并存入字節(jié)單元DOWN中。

答:JMPBEGIN

UPDB0

DOWNDB0

TABLEDB100HDUP(?);數(shù)組

BEGIN:

MOVCX,100H

MOVBX,-1

MOVSI,0

MOVDI,0

L1:INCBX

CMPTABLE[BX],42H

JAL2

JBL3

JMPL4

L2:INCSI

JMPL4

L3:INCDI

L4:LOOPL1

MOVUP,SI

MOVDOWN,DI

3.52請(qǐng)用圖表示ENTER16,0所生成的堆棧幀的情況。

答:答案見右圖。第四章首頁(yè)入門學(xué)習(xí)程序員計(jì)算機(jī)考研計(jì)算機(jī)電子書下載硬件知識(shí)網(wǎng)絡(luò)知識(shí)專業(yè)課程答案下載視頻教程下載第四章作者:佚名來源:網(wǎng)絡(luò)4.1指出下列指令的錯(cuò)誤:(1)MOVAH,BX;寄存器類型不匹配(2)MOV[BX],[SI];不能都是存儲(chǔ)器操作數(shù)(3)MOVAX,[SI][DI];[SI]和[DI]不能一起使用(4)MOVMYDAT[BX][SI],ES:AX;AX寄存器不能使用段超越(5)MOVBYTEPTR[BX],1000;1000超過了一個(gè)字節(jié)的范圍(6)MOVBX,OFFSETMYDAT[SI];MYDAT[SI]已經(jīng)是偏移地址,不能再使用OFFSET(7)MOVCS,AX;CS不能用作目的寄存器(8)MOVECX,AX;兩個(gè)操作數(shù)的數(shù)據(jù)類型不同答:見注釋。4.2下面哪些指令是非法的?(假設(shè)OP1,OP2是已經(jīng)用DB定義的變量)(1)CMP15,BX;錯(cuò),立即數(shù)不能作為目的操作數(shù)(2)CMPOP1,25(3)CMPOP1,OP2;錯(cuò),不能都是存儲(chǔ)器操作數(shù)(4)CMPAX,OP1;錯(cuò),類型不匹配,應(yīng)為CMPax,wordptrop1答:見注釋。4.3假設(shè)下列指令中的所有標(biāo)識(shí)符均為類型屬性為字的變量,請(qǐng)指出下列哪些指令是非法的?它們的錯(cuò)誤是什么?(1)MOVBP,AL;錯(cuò),寄存器類型不匹配(2)MOVWORD_OP[BX+4*3][DI],SP(3)MOVWORD_OP1,WORD_OP2;錯(cuò),不能都是存儲(chǔ)器操作數(shù)(4)MOVAX,WORD_OP1[DX];錯(cuò),DX不能用于存儲(chǔ)器尋址(5)MOVSAVE_WORD,DS(6)MOVSP,SS:DATA_WORD[BX][SI](7)MOV[BX][SI],2;錯(cuò),[BX][SI]未指出數(shù)據(jù)類型(8)MOVAX,WORD_OP1+WORD_OP2(9)MOVAX,WORD_OP1-WORD_OP2+100(10)MOVWORD_OP1,WORD_OP1-WORD_OP2答:見注釋。4.4假設(shè)VAR1和VAR2為字變量,LAB為標(biāo)號(hào),試指出下列指令的錯(cuò)誤之處:(1)ADDVAR1,VAR2;不能都是存儲(chǔ)器操作數(shù)(2)SUBAL,VAR1;數(shù)據(jù)類型不匹配(3)JMPLAB[SI];LAB是標(biāo)號(hào)而不是變量名,后面不能加[SI](4)JNZVAR1;VAR1是變量而不是標(biāo)號(hào)(5)JMPNEARLAB;應(yīng)使用NEARPTR答:見注釋。4.5畫圖說明下列語句所分配的存儲(chǔ)空間及初始化的數(shù)據(jù)值。(1)BYTE_VARDB‘BYTE’,12,-12H,3DUP(0,?,2DUP(1,2),?)(2)WORD_VARDW5DUP(0,1,2),?,-5,‘BY’,‘TE’,256H答:答案如下圖所示。4.6試列出各種方法,使匯編程序把5150H存入一個(gè)存儲(chǔ)器字中(如:DW5150H)。4.5題答案

42H59H54H45H0DHEEH00H-01H02H01H02H-00H-01H02H01H02H-

BYTE_VAR

00H00H01H00H02H00H┇┇┇--FBHFFH00H59H42H45H54H56H02H

WORD_VAR

將上面內(nèi)容再重復(fù)4次

答:DW5150HDB50H,51HDB‘PQ’DW‘QP’ORG5150HDW$4.7請(qǐng)?jiān)O(shè)置一個(gè)數(shù)據(jù)段DATASG,其中定義以下字符變量或數(shù)據(jù)變量。(1)FLD1B為字符串變量:‘personalcomputer’;(2)FLD2B為十進(jìn)制數(shù)字節(jié)變量:32;(3)FLD3B為十六進(jìn)制數(shù)字節(jié)變量:20;(4)FLD4B為二進(jìn)制數(shù)字節(jié)變量:01011001;(5)FLD5B為數(shù)字的ASCII字符字節(jié)變量:32654;(6)FLD6B為10個(gè)零的字節(jié)變量;(7)FLD7B為零件名(ASCII碼)及其數(shù)量(十進(jìn)制數(shù))的表格:PART120PART250PART314(8)FLD1W為十六進(jìn)制數(shù)字變量:FFF0;(9)FLD2W為二進(jìn)制數(shù)的字變量:01011001;(10)FLD3W為(7)零件表的地址變量;(11)FLD4W為包括5個(gè)十進(jìn)制數(shù)的字變量:5,6,7,8,9;(12)FLD5W為5個(gè)零的字變量;(13)FLD6W為本段中字?jǐn)?shù)據(jù)變量和字節(jié)數(shù)據(jù)變量之間的地址差。答:DATASGSEGMENTFLD1BDB‘personalcomputer’FLD2BDB32FLD3BDB20HFLD4BDB01011001BFLD5BDB‘32654’FLD6BDB10DUP(0)FLD7BDB‘PART1’,20DB‘PART2’,50DB‘PART3’,14FLD1WDW0FFF0HFLD2WDW01011001BFLD3WDWFLD7BFLD4WDW5,6,7,8,9FLD5WDW5DUP(0)FLD6WDWFLD1W-FLD1BDATASGENDS4.8假設(shè)程序中的數(shù)據(jù)定義如下:PARTNODW?PNAMEDB16DUP(?)COUNTDD?PLENTHEQU$-PARTNO問PLENTH的值為多少?它表示什么意義?答:PLENTH=22=16H,它表示變量PARTNO、PNAME、COUNT總共占用的存儲(chǔ)單元數(shù)(字節(jié)數(shù))。4.9有符號(hào)定義語句如下:BUFFDB1,2,3,‘123’EBUFFDB0LEQUEBUFF-BUFF問L的值是多少?答:L=6。4.10假設(shè)程序中的數(shù)據(jù)定義如下:LNAMEDB30DUP(?)ADDRESSDB30DUP(?)CITYDB15DUP(?)CODE_LISTDB1,7,8,3,2(1)用一條MOV指令將LNAME的偏移地址放入AX。(2)用一條指令將CODE_LIST的頭兩個(gè)字節(jié)的內(nèi)容放入SI。(3)用一條偽操作使CODE_LENGTH的值等于CODE_LIST域的實(shí)際長(zhǎng)度。答:(1)MOVAX,OFFSETLNAME(2)MOVSI,WORDPTRCODE_LIST(3)CODE_LENGTHEQU$-CODE_LIST;此語句必須放在CODE_LIST語句之后4.11試寫出一個(gè)完整的數(shù)據(jù)段DATA_SEG,它把整數(shù)5賦予一個(gè)字節(jié),并把整數(shù)-1,0,2,5和4放在10字?jǐn)?shù)組DATA_LIST的頭5個(gè)單元中。然后,寫出完整的代碼段,其功能為:把DATA_LIST中頭5個(gè)數(shù)中的最大值和最小值分別存入MAX和MIN單元中。答:DATA_SEGSEGMENTNUMDB5DATA_LISTDW-1,0,2,5,4,5DUP(?)MAXDW?MINDW?DATA_SEGENDS;CODE_SEGSEGMENTMAINPROCFARASSUMECS:CODE_SEG,DS:DATA_SEGSTART:PUSHDS;設(shè)置返回DOSSUBAX,AXPUSHAXMOVAX,DATA_SEG;給DS賦值MOVDS,AX;MOVCX,4;程序段開始LEABX,DATA_LISTMOVAX,[BX]MOVMAX,AXMOVMIN,AXROUT1:ADDBX,2MOVAX,[BX]CMPAX,MAXJNGEROUT2MOVMAX,AXROUT2:CMPAX,MINJNLEROUT3MOVMIN,AXROUT3:LOOPROUT1;程序段結(jié)束RETMAINENDPCODE_SEGENDS;ENDSTART4.12給出等值語句如下:ALPHAEQU100BETAEQU25GAMMAEQU2下列表達(dá)式的值是多少?(1)ALPHA*100+BETA;=2729H(2)ALPHAMODGAMMA+BETA;=19H(3)(ALPHA+2)*BETA–2;=9F4H(4)(BETA/3)MOD5;=3H(5)(ALPHA+3)*(BETAMODGAMMA);=67H(6)ALPHAGEGAMMA;=0FFFFH(7)BETAAND7;=01H(8)GAMMAOR3;=03H答:見注釋。4.13對(duì)于下面的數(shù)據(jù)定義,三條MOV指令分別匯編成什么?(可用立即數(shù)方式表示)TABLEADW10DUP(?)TABLEBDB10DUP(?)TABLECDB‘1234’┇MOVAX,LENGTHTABLEA;匯編成MOVAX,000AHMOVBL,LENGTHTABLEB;匯編成MOVBL,000AHMOVCL,LENGTHTABLEC;匯編成MOVCL,0001H答:見注釋。4.14對(duì)于下面的數(shù)據(jù)定義,各條MOV指令單獨(dú)執(zhí)行后,有關(guān)寄存器的內(nèi)容是什么?FLDBDB?TABLEADW20DUP(?)TABLEBDB‘ABCD’(1)MOVAX,TYPEFLDB;(AX)=0001H(2)MOVAX,TYPETABLEA;(AX)=0002H(3)MOVCX,LENGTHTABLEA;(CX)=0014H(4)MOVDX,SIZETABLEA;(DX)=0028H(5)MOVCX,LENGTHTABLEB;(CX)=0001H答:見注釋。4.15指出下列偽操作表達(dá)方式的錯(cuò)誤,并改正之。(1)DATA_SEGSEG;DATA_SEGSEGMENT(偽操作錯(cuò))(2)SEGMENT‘CODE’;SEGNAMESEGMENT‘CODE’(缺少段名字)(3)MYDATASEGMENT/DATA;MYDATASEGMENT┇ENDS;MYDATAENDS(缺少段名字)(4)MAIN_PROCPROCFAR;刪除ENDMAIN_PROC也可以┇ENDMAIN_PROC;MAIN_PROCENDP;上下兩句交換位置MAIN_PROCENDP;ENDMAIN_PROC答:見注釋。4.16按下面的要求寫出程序的框架(1)數(shù)據(jù)段的位置從0E000H開始,數(shù)據(jù)段中定義一個(gè)100字節(jié)的數(shù)組,其類型屬性既是字又是字節(jié);(2)堆棧段從小段開始,段組名為STACK;(3)代碼段中指定段寄存器,指定主程序從1000H開始,給有關(guān)段寄存器賦值;(4)程序結(jié)束。答:程序的框架如下:DATA_SEGSEGMENTAT0E000HARRAY_BLABELBYTEARRAY_WDW50DUP(?)DATA_SEGENDS;以上定義數(shù)據(jù)段;STACK_SEGSEGMENTPARASTACK‘STACK’DW100HDUP(?)TOSLABELWORDSTACK_SEGENDS;以上定義堆棧段;CODE_SEGSEGMENTMAINPROCFARASSUMECS:CODE_SEG,DS:DATA_SEG,SS:STACK_SEGORG1000HSTART:MOVAX,STACK_SEGMOVSS,AX;給SS賦值MOVSP,OFFSETTOS;給SP賦值PUSHDS;設(shè)置返回DOSSUBAX,AXPUSHAXMOVAX,DATA_SEGMOVDS,AX;給DS賦值┇;程序段部分RETMAINENDPCODE_SEGENDS;以上定義代碼段;ENDSTART4.17寫一個(gè)完整的程序放在代碼段C_SEG中,要求把數(shù)據(jù)段D_SEG中的AUGEND和附加段E_SEG中的ADDEND相加,并把結(jié)果存放在D_SEG段中的SUM中。其中AUGEND、ADDEND和SUM均為雙精度數(shù),AUGEND賦值為99251,ADDEND賦值為-15962。答:程序如下:D_SEGSEGMENTAUGWLABELWORDAUGENDDD99251SUMDD?D_SEGENDS;以上定義數(shù)據(jù)段;E_SEGSEGMENTADDWLABELWORDADDENDDD-15962E_SEGENDS;以上定義附加段;C_SEGSEGMENTMAINPROCFARASSUMECS:C_SEG,DS:D_SEG,ES:E_SEGSTART:PUSHDS;設(shè)置返回DOSSUBAX,AXPUSHAXMOVAX,D_SEGMOVDS,AX;給DS賦值MOVAX,E_SEGMOVES,AX;給ES賦值;MOVAX,AUGW;以下6條指令進(jìn)行加法計(jì)算MOVBX,AUGW+2ADDAX,ES:ADDWADCBX,ES:ADDW+2;不考慮有符號(hào)數(shù)溢出MOVWORDPTRSUM,AXMOVWORDPTR[SUM+2],BXRETMAINENDPC_SEGENDS;以上定義代碼段;ENDSTART4.18請(qǐng)說明表示程序結(jié)束的微操作和結(jié)束程序執(zhí)行的語句之間的差別。它們?cè)谠闯绦蛑袘?yīng)如何表示?答:表示程序結(jié)束的微操作是指示匯編程序MASM結(jié)束匯編的標(biāo)志,在源程序中用END表示;結(jié)束程序執(zhí)行的語句是結(jié)束程序運(yùn)行而返回操作系統(tǒng)的指令,在源程序中有多種表示方法,比如INT20H或MOVAX,4C00HINT21H以及RET等。4.19試說明下述指令中哪些需要加上PTR操作符:BVALDB10H,20HWVALDW1000H(1)MOVAL,BVAL;不需要(2)MOVDL,[BX];不需要(3)SUB[BX],2;需要,如SUBBYTEPTR[BX],2(4)MOVCL,WVAL;需要,如MOVCL,BYTEPTRWVAL(5)ADDAL,BVAL+1;不需要答:見注釋。第五章5.1試編寫一個(gè)匯編語言程序,要求對(duì)鍵盤輸入的小寫字母用大寫字母顯示出來。答:程序段如下:BEGIN:MOVAH,1;從鍵盤輸入一個(gè)字符的DOS調(diào)用INT21HCMPAL,‘a(chǎn)’;輸入字符<‘a(chǎn)’嗎?JBSTOPCMPAL,‘z’;輸入字符>‘z’嗎?JASTOPSUBAL,20H;轉(zhuǎn)換為大寫字母,用ANDAL,11011111B也可MOVDL,AL;顯示一個(gè)字符的DOS調(diào)用MOVAH,2INT21HJMPBEGINSTOP:RET5.2編寫程序,從鍵盤接收一個(gè)小寫字母,然后找出它的前導(dǎo)字符和后續(xù)字符,再按順序顯示這三個(gè)字符。答:程序段如下:BEGIN:MOVAH,1;從鍵盤輸入一個(gè)字符的DOS調(diào)用INT21HCMPAL,‘a(chǎn)’;輸入字符<‘a(chǎn)’嗎?JBSTOPCMPAL,‘z’;輸入字符>‘z’嗎?JASTOPDECAL;得到前導(dǎo)字符MOVDL,AL;準(zhǔn)備顯示三個(gè)字符MOVCX,3DISPLAY:MOVAH,2;顯示一個(gè)字符的DOS調(diào)用INT21HINCDLLOOPDISPLAYSTOP:RET5.3將AX寄存器中的16位數(shù)分成4組,每組4位,然后把這四組數(shù)分別放在AL、BL、CL和DL中。答:程序段如下:DSEGSEGMENTSTOREDB4DUP(?)DSEGENDS┇BEGIN:MOVCL,4;右移四次MOVCH,4;循環(huán)四次LEABX,STOREA10:MOVDX,AXANDDX,0FH;取AX的低四位MOV[BX],DL;低四位存入STORE中INCBXSHRAX,CL;右移四次DECCHJNZA10;循環(huán)四次完了碼?B10:MOVDL,STORE;四組數(shù)分別放在AL、BL、CL和DL中MOVCL,STORE+1MOVBL,STORE+2MOVAL,STORE+3STOP:RET5.4試編寫一程序,要求比較兩個(gè)字符串STRING1和STRING2所含字符是否完全相同,若相同則顯示‘MATCH’,若不相同則顯示‘NOMATCH’。答:程序如下:DSEGSEGMENTSTRING1DB‘Iamastudent.’STRING2DB‘Iamastudent!’YESDB‘MATCH’,0DH,0AH,‘$’NODB‘NOMATCH’,0DH,0AH,‘$’DSEGENDS;CSEGSEGMENTMAINPROCFARASSUMECS:CSEG,DS:DSEG,ES:DSEGSTART:PUSHDS;設(shè)置返回DOSSUBAX,AXPUSHAXMOVAX,DSEGMOVDS,AX;給DS賦值MOVES,AX;給ES賦值;BEGIN:LEASI,STRING1;設(shè)置串比較指令的初值LEADI,STRING2CLDMOVCX,STRING2-STRING1REPECMPSB;串比較JNEDISPNOLEADX,YES;顯示MATCHJMPDISPLAYDISPNO:LEADX,NO;顯示NOMATCHDISPLAY:MOVAH,9;顯示一個(gè)字符串的DOS調(diào)用INT21HRETMAINENDPCSEGENDS;以上定義代碼段;ENDSTART5.5試編寫一程序,要求能從鍵盤接收一個(gè)個(gè)位數(shù)N,然后響鈴N次(響鈴的ASCII碼為07)。答:程序段如下:BEGIN:MOVAH,1;從鍵盤輸入一個(gè)字符的DOS調(diào)用INT21HSUBAL,‘0’JBSTOP;輸入字符<‘0’嗎?CMPAL,9;輸入字符>‘9’嗎?JASTOPCBWMOVCX,AX;響鈴次數(shù)NJCXZSTOPBELL:MOVDL,07H;準(zhǔn)備響鈴MOVAH,2;顯示一個(gè)字符的DOS調(diào)用,實(shí)際為響鈴INT21HCALLDELAY100ms;延時(shí)100msLOOPBELLSTOP:RET5.6編寫程序,將一個(gè)包含有20個(gè)數(shù)據(jù)的數(shù)組M分成兩個(gè)數(shù)組:正數(shù)數(shù)組P和負(fù)數(shù)數(shù)組N,并分別把這兩個(gè)數(shù)組中數(shù)據(jù)的個(gè)數(shù)顯示出來。答:程序如下:DSEGSEGMENTCOUNTEQU20ARRAYDW20DUP(?);存放數(shù)組COUNT1DB0;存放正數(shù)的個(gè)數(shù)ARRAY1DW20DUP(?);存放正數(shù)COUNT2DB0;存放負(fù)數(shù)的個(gè)數(shù)ARRAY2DW20DUP(?);存放負(fù)數(shù)ZHENDB0DH,0AH,‘Thepositivenumberis:’,‘$’;正數(shù)的個(gè)數(shù)是:FUDB0DH,0AH,‘Thenegativenumberis:’,‘$’;負(fù)數(shù)的個(gè)數(shù)是:CRLFDB0DH,0AH,‘$’DSEGENDS;CSEGSEGMENTMAINPROCFARASSUMECS:CSEG,DS:DSEGSTART:PUSHDS;設(shè)置返回DOSSUBAX,AXPUSHAXMOVAX,DSEGMOVDS,AX;給DS賦值BEGIN:MOVCX,COUNTLEABX,ARRAYLEASI,ARRAY1LEADI,ARRAY2BEGIN1:MOVAX,[BX]CMPAX,0;是負(fù)數(shù)碼?JSFUSHUMOV[SI],AX;是正數(shù),存入正數(shù)數(shù)組INCCOUNT1;正數(shù)個(gè)數(shù)+

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝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ù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
  • 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ì)自己和他人造成任何形式的傷害或損失。

最新文檔

評(píng)論

0/150

提交評(píng)論