版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進行舉報或認(rèn)領(lǐng)
文檔簡介
./第一章1.1用降冪法和除法將下列十進制數(shù)轉(zhuǎn)換為二進制數(shù)和十六進制數(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將下列二進制數(shù)轉(zhuǎn)換為十六進制數(shù)和十進制數(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將下列十六進制數(shù)轉(zhuǎn)換為二進制數(shù)和十進制數(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完成下列十六進制數(shù)的運算,并轉(zhuǎn)換為十進制數(shù)進行校核:<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ù)均為十進制數(shù),請用8位二進制補碼計算下列各題,并用十六進制數(shù)表示其運算結(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ù)為十六進制表示的8位二進制數(shù),請說明當(dāng)它們分別被看作是用補碼表示的帶符號數(shù)或無符號數(shù)時,它們所表示的十進制數(shù)是什么?<1>D8<2>FF答:<1>D8H表示的帶符號數(shù)為-40,D8H表示的無符號數(shù)為216;<2>FFH表示的帶符號數(shù)為-1,FFH表示的無符號數(shù)為255.1.7下列各數(shù)均為用十六進制表示的8位二進制數(shù),請說明當(dāng)它們分別被看作是用補碼表示的數(shù)或字符的ASCII碼時,它們所表示的十進制數(shù)及字符是什么?<1>4F<2>2B<3>73<4>59答:<1>4FH表示的十進制數(shù)為79,4FH表示的字符為O;<2>2BH表示的十進制數(shù)為43,2BH表示的字符為+;<3>73H表示的十進制數(shù)為115,73H表示的字符為s;<4>59H表示的十進制數(shù)為89,59H表示的字符為Y.1.8請寫出下列字符串的ASCII碼值.Forexample,Thisisanumber3692.答:46H6FH72H20H65H78H61H6DH70H6CH65H2CH0AH0DH54H68H69H73H20H69H73H20H61H20H6EH75H6DH62H65H72H20H33H36H39H32H2EH0AH0DH第二章2.1
在80x86微機的輸入/輸出指令中,I/O端口號通常是由DX寄存器提供的,但有時也可以在指令中直接指定00~FFH的端口號.試問可直接由指令指定的I/O端口數(shù).答:可直接由指令指定的I/O端口數(shù)為256個.2.2有兩個16位字1EE5H和2A3CH分別存放在80x86微機的存儲器的000B0H和000B3H單元中,請用圖表示出它們在存儲器里的存放情況.答:存儲器里的存放情況如右下圖所示:
000B0HE5H
000B1H1EH000B2H
000B3H3CH
000B4H2AH2.3在IBMPC機的存儲器中存放信息如右下圖所示.試讀出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在實模式下,段地址和偏移地址為3017:000A的存儲單元的物理地址是什么?如果段地址和偏移地址是3015:002A和3010:007A呢?答:3017:000A、3015:002A和3010:007A的存儲單元的物理地址都是3017AH.2.5如果在一個程序開始執(zhí)行以前<CS>=0A7F0H,<如16進制數(shù)的最高位為字母,則應(yīng)在其前加一個0><IP>=2B40H,試問該程序的第一個字的物理地址是多少?答:該程序的第一個字的物理地址是0AAA40H.2.6在實模式下,存儲器中每一段最多可有10000H個字節(jié).如果用調(diào)試程序DEBUG的r命令在終端上顯示出當(dāng)前各寄存器的內(nèi)容如下,請畫出此時存儲器分段的示意圖,以及條件標(biāo)志OF、SF、ZF、CF的值.C>debug-rAX=0000BX=0000CX=0079DX=0000SP=FFEEBP=0000SI=0000DI=0000DS=10E4ES=10F4SS=21F0CS=31FFIP=0100NVUPDIPLNZNAPONC答:此時存儲器分段的示意圖如右圖所示.OF、SF、ZF、CF的值都為0.2.7下列操作可使用那些寄存器?<1>加法和減法數(shù)據(jù)寄存器等<2>循環(huán)計數(shù)CX<3>乘法和除法AX、DX,乘數(shù)和除數(shù)用其他寄存器或存儲器<4>保存段地址段寄存器<5>表示運算結(jié)果為0ZF=1<6>將要執(zhí)行的指令地址CS:IP<7>將要從堆棧取出數(shù)據(jù)的地址SS:SP答:答案見題目的右邊.2.8那些寄存器可以用來指示存儲器地址?答:BX、BP、SI、DI、堆棧操作時的SP、對應(yīng)的段地址、386及其后繼機型的Exx.2.9請將下列左邊的項和右邊的解釋聯(lián)系起來<把所選字母放在括號中>:<1>CPU<M>A.保存當(dāng)前棧頂?shù)刂返募拇嫫?<2>存儲器<C>B.指示下一條要執(zhí)行的指令的地址.<3>堆棧<D>C.存儲程序、數(shù)據(jù)等信息的記憶裝置,微機有RAM和ROM兩種.<4>IP<B>D.以后進先出方式工作的存儲空間.<5>SP<A>E.把匯編語言程序翻譯成機器語言程序的系統(tǒng)程序.<6>狀態(tài)標(biāo)志<L>F.唯一代表存儲空間中每個字節(jié)單元的地址.<7>控制標(biāo)志<K>G.能被計算機直接識別的語言.<8>段寄存器<J>H.用指令的助記符、符號地址、標(biāo)號等符號書寫程序的語言.<9>物理地址<F>I.把若干個模塊連接起來成為可執(zhí)行文件的系統(tǒng)程序.<10>匯編語言<H>J.保存各邏輯段的起始地址的寄存器,8086/8088機有四個:CS、DS、SS、ES.<11>機器語言<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ù)地址>,在程序運行時執(zhí)行.答:答案見題目的括號中.第三章3.1給定<BX>=637DH,<SI>=2A9BH,位移量D=7237H,試確定在以下各種尋址方式下的有效地址是什么?
<1>立即尋址
<2>直接尋址
<3>使用BX的寄存器尋址
<4>使用BX的簡接尋址
<5>使用BX的寄存器相對尋址
<6>基址變址尋址
<7>相對基址變址尋址
答:<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;超過了段的邊界,最高進位位丟失,因此EA=004FH.
3.2試根據(jù)以下要求寫出相應(yīng)的匯編語言指令
<1>把BX寄存器和DX寄存器的內(nèi)容相加,結(jié)果存入DX寄存器中.
<2>用寄存器BX和SI的基址變址尋址方式把存儲器中的一個字節(jié)與AL寄存器的內(nèi)容相加,并把結(jié)果送到AL寄存器中.
<3>用寄存器BX和位移量0B2H的寄存器相對尋址方式把存儲器中的一個字和<CX>相加,并把結(jié)果送回存儲器中.
<4>用位移量為0524H的直接尋址方式把存儲器中的一個字與數(shù)2A59H相加,并把結(jié)果送回存儲單元中.
<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個字送到DX寄存器的指令.要求使用以下幾種尋址方式:
<1>寄存器間接尋址
<2>寄存器相對尋址
<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及寄存器相對尋址方式的段內(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),含有一個內(nèi)容為0FF10H和8000H的指針,它們是一個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對應(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寄存器相對尋址方式;PA=20110H
<10>BX寄存器相對尋址方式;PA=20150H
<11>BX和SI寄存器基址變址尋址方式;PA=201A0H
<12>BX和SI寄存器相對基址變址尋址方式;PA=201F0H
3.9在ARRAY數(shù)組中依次存儲了七個字?jǐn)?shù)據(jù),緊接著是名為ZERO的字單元,表示如下:
ARRAYDW23,36,2,100,32000,54,0
ZERODW?
<1>如果BX包含數(shù)組ARRAY的初始地址,請編寫指令將數(shù)據(jù)0傳送給ZERO單元.
<2>如果BX包含數(shù)據(jù)0在數(shù)組中的位移量,請編寫指令將數(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單元的符號名,其中存放的內(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的存儲方式如右圖所示>
3.12下列ASCII碼串<包括空格符>依次存儲在起始地址為CSTRING的字節(jié)單元中:
CSTRINGDB‘BASEDADDRESSING’
請編寫指令將字符串中的第1個和第7個字符傳送給DX寄存器.
答:MOVDH,CSTRING
MOVDL,CSTRING+7-1
3.13已知堆棧段寄存器SS的內(nèi)容是0FFA0H,堆棧指針寄存器SP的內(nèi)容是00B0H,先執(zhí)行兩條把8057H和0F79H分別進棧的PUSH指令,再執(zhí)行一條POP指令.試畫出堆棧區(qū)和SP的內(nèi)容變化過程示意圖<標(biāo)出存儲單元的物理地址>.
答:堆棧區(qū)和SP的內(nèi)容變化過程示意圖如下左圖所示.3.14設(shè)<DS>=1B00H,<ES>=2B00H,有關(guān)存儲單元的內(nèi)容如上右圖所示.請寫出兩條指令把字變量X裝入AX寄存器.
答:MOVBX,[2000H]
MOVAX,ES:[BX]
3.15求出以下各十六進制數(shù)與十六進制數(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求出以下各十六進制數(shù)與十六進制數(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í)行以下計算的指令序列,其中X、Y、Z、R、W均為存放16位帶符號數(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;以下程序都未考慮帶符號數(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í)行完后,進位、符號和零標(biāo)志的值是什么?
<3>程序結(jié)束時,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
請按下列要求寫出指令序列:
<1>DATAX和DATAY兩個字?jǐn)?shù)據(jù)相加,和存放在DATAY中.
<2>DATAX和DATAY兩個雙字?jǐn)?shù)據(jù)相加,和存放在從DATAY開始的雙字單元中.
<3>解釋下列指令的作用:
STC
MOVBX,DATAX
ADCBX,DATAY
<4>DATAX和DATAY兩個字?jǐn)?shù)據(jù)相乘<用MUL>.
<5>DATAX和DATAY兩個雙字?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;用于存放進位位
ADCDATAY+4,0
<3>DATAX和DATAY兩個字?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寫出對存放在DX和AX中的雙字長數(shù)求補的指令序列.
答:NEGDX也可為:NOTDX
NEGAXNOTAX
SBBDX,0ADDAX,1
ADCDX,0
3.22試編寫一程序求出雙字長數(shù)的絕對值.雙字長數(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,確定下列各條指令單獨執(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試用移位指令把十進制數(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>>的雙字同時左移4位,即將此雙字乘以10H<16>.
3.27假定<DX>=0B9H,<CL>=3,<CF>=1,確定下列各條指令單獨執(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個字節(jié)裝入AX.
<4>把AX寄存器的內(nèi)容存入從PRLINE+5開始的字節(jié)中.
<5>檢查CONAME字符串中有無空格字符,如有則把第一個空格字符的地址傳送給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中查找第一個‘-’.
<3>在STUDENT_ADDR中查找最后一個‘-’.
<4>如果STUDENT_NAME域中全是空格符時,填入‘*’.
<5>把STUDENT_NAME移到PRINT_LINE的前30個字節(jié)中,把STUDENT_ADDR移到PRINT_LINE的后9個字節(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編寫一程序段:比較兩個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)容為帶符號數(shù),CX和DX中的內(nèi)容為無符號數(shù),請用比較指令和條件轉(zhuǎn)移指令實現(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;因為加法指令后AX中已經(jīng)是6FF3H
<5>轉(zhuǎn)向L5;因為加法指令后AX中已經(jīng)是4A14H
3.35指令CMPAX,BX后面跟著一條格式為J…L1的條件轉(zhuǎn)移指令,其中…可以是B、NB、BE、NBE、L、NL、LE、NLE中的任意一個.如果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要求測試在STATUS中的一個字節(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在下列程序的括號中分別填入如下指令:
<1>LOOPL20
<2>LOOPEL20
<3>LOOPNEL20
試說明在三種情況下,當(dāng)程序執(zhí)行完后,AX、BX、
CX、DX四個寄存器的內(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>;
請畫出每次調(diào)用及返回時的堆棧狀態(tài).
答:每次調(diào)用及返回時的堆棧狀態(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個字節(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>>對應(yīng)存儲單元中的字壓入堆棧
<4>PUSHAD;32位通用寄存器依次進棧
<5>POPDS;將堆棧中的字彈出到DS寄存器中
<6>PUSH4;將立即數(shù)4以字的方式壓入堆棧
答:見注釋.
3.43請給出下列各指令序列執(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請給出下列各指令序列執(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請給出下列指令序列執(zhí)行完后EAX和EBX的內(nèi)容.
MOVECX,307F455H
BSFEAX,ECX;<EAX>=0D
BSREBX,ECX;<EBX>=25D
答:見注釋.
3.46請給出下列指令序列執(zhí)行完后AX和DX的內(nèi)容.
MOVBX,98H
BSFAX,BX;<AX>=3D
BSRDX,BX;<DX>=7D
答:見注釋.
3.47請編寫一程序段,要求把ECX、EDX和ESI的內(nèi)容相加,其和存入EDI寄存器中<不考慮溢出>.
答:MOVEDI,0也可為:MOVEDI,ECX
ADDEDI,ECXADDEDI,EDX
ADDEDI,EDXADDEDI,ESI
ADDEDI,ESI
3.48請說明IMULBX,DX,100H指令的操作.
答:<BX>←<DX>*100H
3.49試編寫一程序段,要求把BL中的數(shù)除以CL中的數(shù),并把其商乘以2,最后的結(jié)果存入DX寄存器中.
答:MOVAL,BL
MOVAH,0;假定為無符號數(shù),否則用CBW指令即可
DIVCL
MOVAH,0
SHLAX,1
MOVDX,AX
3.50請說明JMPDI和JMP[DI]指令的區(qū)別.
答:JMPDI是轉(zhuǎn)移到以<DI>內(nèi)容為偏移地址的單元去執(zhí)行指令;JMP[DI]是轉(zhuǎn)移到以<DI>間接尋址的內(nèi)存單元內(nèi)容為偏移地址的單元去執(zhí)行指令.
3.51試編寫一程序段,要求在長度為100H字節(jié)的數(shù)組中,找出大于42H的無符號數(shù)的個數(shù)并存入字節(jié)單元UP中;找出小于42H的無符號數(shù)的個數(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請用圖表示ENTER16,0所生成的堆棧幀的情況.
答:答案見右圖.第四章首頁入門學(xué)習(xí)程序員計算機考研計算機電子書下載硬件知識網(wǎng)絡(luò)知識專業(yè)課程答案下載視頻教程下載第四章作者:佚名來源:網(wǎng)絡(luò)4.1指出下列指令的錯誤:<1>MOVAH,BX;寄存器類型不匹配<2>MOV[BX],[SI];不能都是存儲器操作數(shù)<3>MOVAX,[SI][DI];[SI]和[DI]不能一起使用<4>MOVMYDAT[BX][SI],ES:AX;AX寄存器不能使用段超越<5>MOVBYTEPTR[BX],1000;1000超過了一個字節(jié)的范圍<6>MOVBX,OFFSETMYDAT[SI];MYDAT[SI]已經(jīng)是偏移地址,不能再使用OFFSET<7>MOVCS,AX;CS不能用作目的寄存器<8>MOVECX,AX;兩個操作數(shù)的數(shù)據(jù)類型不同答:見注釋.4.2下面哪些指令是非法的?<假設(shè)OP1,OP2是已經(jīng)用DB定義的變量><1>CMP15,BX;錯,立即數(shù)不能作為目的操作數(shù)<2>CMPOP1,25<3>CMPOP1,OP2;錯,不能都是存儲器操作數(shù)<4>CMPAX,OP1;錯,類型不匹配,應(yīng)為CMPax,wordptrop1答:見注釋.4.3假設(shè)下列指令中的所有標(biāo)識符均為類型屬性為字的變量,請指出下列哪些指令是非法的?它們的錯誤是什么?<1>MOVBP,AL;錯,寄存器類型不匹配<2>MOVWORD_OP[BX+4*3][DI],SP<3>MOVWORD_OP1,WORD_OP2;錯,不能都是存儲器操作數(shù)<4>MOVAX,WORD_OP1[DX];錯,DX不能用于存儲器尋址<5>MOVSAVE_WORD,DS<6>MOVSP,SS:DATA_WORD[BX][SI]<7>MOV[BX][SI],2;錯,[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)號,試指出下列指令的錯誤之處:<1>ADDVAR1,VAR2;不能都是存儲器操作數(shù)<2>SUBAL,VAR1;數(shù)據(jù)類型不匹配<3>JMPLAB[SI];LAB是標(biāo)號而不是變量名,后面不能加[SI]<4>JNZVAR1;VAR1是變量而不是標(biāo)號<5>JMPNEARLAB;應(yīng)使用NEARPTR答:見注釋.4.5畫圖說明下列語句所分配的存儲空間及初始化的數(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存入一個存儲器字中<如: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請設(shè)置一個數(shù)據(jù)段DATASG,其中定義以下字符變量或數(shù)據(jù)變量.<1>FLD1B為字符串變量:‘personalcomputer’;<2>FLD2B為十進制數(shù)字節(jié)變量:32;<3>FLD3B為十六進制數(shù)字節(jié)變量:20;<4>FLD4B為二進制數(shù)字節(jié)變量:01011001;<5>FLD5B為數(shù)字的ASCII字符字節(jié)變量:32654;<6>FLD6B為10個零的字節(jié)變量;<7>FLD7B為零件名<ASCII碼>及其數(shù)量<十進制數(shù)>的表格:PART120PART250PART314<8>FLD1W為十六進制數(shù)字變量:FFF0;<9>FLD2W為二進制數(shù)的字變量:01011001;<10>FLD3W為<7>零件表的地址變量;<11>FLD4W為包括5個十進制數(shù)的字變量:5,6,7,8,9;<12>FLD5W為5個零的字變量;<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總共占用的存儲單元數(shù)<字節(jié)數(shù)>.4.9有符號定義語句如下: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的頭兩個字節(jié)的內(nèi)容放入SI.<3>用一條偽操作使CODE_LENGTH的值等于CODE_LIST域的實際長度.答:<1>MOVAX,OFFSETLNAME<2>MOVSI,WORDPTRCODE_LIST<3>CODE_LENGTHEQU$-CODE_LIST;此語句必須放在CODE_LIST語句之后4.11試寫出一個完整的數(shù)據(jù)段DATA_SEG,它把整數(shù)5賦予一個字節(jié),并把整數(shù)-1,0,2,5和4放在10字?jǐn)?shù)組DATA_LIST的頭5個單元中.然后,寫出完整的代碼段,其功能為:把DATA_LIST中頭5個數(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下列表達式的值是多少?<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對于下面的數(shù)據(jù)定義,三條MOV指令分別匯編成什么?<可用立即數(shù)方式表示>TABLEADW10DUP<?>TABLEBDB10DUP<?>TABLECDB‘1234’┇MOVAX,LENGTHTABLEA;匯編成MOVAX,000AHMOVBL,LENGTHTABLEB;匯編成MOVBL,000AHMOVCL,LENGTHTABLEC;匯編成MOVCL,0001H答:見注釋.4.14對于下面的數(shù)據(jù)定義,各條MOV指令單獨執(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指出下列偽操作表達方式的錯誤,并改正之.<1>DATA_SEGSEG;DATA_SEGSEGMENT〔偽操作錯<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ù)段中定義一個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寫一個完整的程序放在代碼段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條指令進行加法計算MOVBX,AUGW+2ADDAX,ES:ADDWADCBX,ES:ADDW+2;不考慮有符號數(shù)溢出MOVWORDPTRSUM,AXMOVWORDPTR[SUM+2],BXRETMAINENDPC_SEGENDS;以上定義代碼段;ENDSTART4.18請說明表示程序結(jié)束的微操作和結(jié)束程序執(zhí)行的語句之間的差別.它們在源程序中應(yīng)如何表示?答:表示程序結(jié)束的微操作是指示匯編程序MASM結(jié)束匯編的標(biāo)志,在源程序中用END表示;結(jié)束程序執(zhí)行的語句是結(jié)束程序運行而返回操作系統(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試編寫一個匯編語言程序,要求對鍵盤輸入的小寫字母用大寫字母顯示出來.答:程序段如下:BEGIN:MOVAH,1;從鍵盤輸入一個字符的DOS調(diào)用INT21HCMPAL,‘a(chǎn)’;輸入字符<‘a(chǎn)’嗎?JBSTOPCMPAL,‘z’;輸入字符>‘z’嗎?JASTOPSUBAL,20H;轉(zhuǎn)換為大寫字母,用ANDAL,11011111B也可MOVDL,AL;顯示一個字符的DOS調(diào)用MOVAH,2INT21HJMPBEGINSTOP:RET5.2編寫程序,從鍵盤接收一個小寫字母,然后找出它的前導(dǎo)字符和后續(xù)字符,再按順序顯示這三個字符.答:程序段如下:BEGIN:MOVAH,1;從鍵盤輸入一個字符的DOS調(diào)用INT21HCMPAL,‘a(chǎn)’;輸入字符<‘a(chǎn)’嗎?JBSTOPCMPAL,‘z’;輸入字符>‘z’嗎?JASTOPDECAL;得到前導(dǎo)字符MOVDL,AL;準(zhǔn)備顯示三個字符MOVCX,3DISPLAY:MOVAH,2;顯示一個字符的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試編寫一程序,要求比較兩個字符串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;顯示一個字符串的DOS調(diào)用INT21HRETMAINENDPCSEGENDS;以上定義代碼段;ENDSTART5.5試編寫一程序,要求能從鍵盤接收一個個位數(shù)N,然后響鈴N次<響鈴的ASCII碼為07>.答:程序段如下:BEGIN:MOVAH,1;從鍵盤輸入一個字符的DOS調(diào)用INT21HSUBAL,‘0’JBSTOP;輸入字符<‘0’嗎?CMPAL,9;輸入字符>‘9’嗎?JASTOPCBWMOVCX,AX;響鈴次數(shù)NJCXZSTOPBELL:MOVDL,07H;準(zhǔn)備響鈴MOVAH,2;顯示一個字符的DOS調(diào)用,實際為響鈴INT21HCALLDELAY100ms;延時100msLOOPBELLSTOP:RET5.6編寫程序,將一個包含有20個數(shù)據(jù)的數(shù)組M分成兩個數(shù)組:正數(shù)數(shù)組P和負(fù)數(shù)數(shù)組N,并分別把這兩個數(shù)組中數(shù)據(jù)的個數(shù)顯示出來.答:程序如下:DSEGSEGMENTCOUNTEQU20ARRAYDW20DUP<?>;存放數(shù)組COUNT1DB0;存放正數(shù)的個數(shù)ARRAY1DW20DUP<?>;存放正數(shù)COUNT2DB0;存放負(fù)數(shù)的個數(shù)ARRAY2DW20DUP<?>;存放負(fù)數(shù)ZHENDB0DH,0AH,‘Thepositivenumberis:’,‘$’;正數(shù)的個數(shù)是:FUDB0DH,0AH,‘Thenegativenumberis:’,‘$’;負(fù)數(shù)的個數(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ù)個數(shù)+1ADDSI,2JMPSHORTNEXTFUSHU
溫馨提示
- 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)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 化妝品前臺工作總結(jié)
- 家電行業(yè)助理的崗位職責(zé)
- 藥房職位工作總結(jié)
- 安徽省阜陽市2023~2024學(xué)年九年級上學(xué)期期末質(zhì)量檢測化學(xué)試題
- 鐵路行業(yè)安全管理工作總結(jié)
- 工藝制造行業(yè)行政后勤工作總結(jié)
- 廣東省深圳市羅湖區(qū)2023-2024學(xué)年六年級上學(xué)期英語期末試卷
- 《如何提升招聘效能》課件
- 《汽車銷售整套資料》課件
- 《暴發(fā)性肝衰竭》課件
- 湘教文藝版小學(xué)五年級音樂上冊期末測試題
- 老化箱點檢表A4版本
- 略說魯迅全集的五種版本
- 2022年110接警員業(yè)務(wù)測試題庫及答案
- 中聯(lián)16T吊車參數(shù)
- DB44∕T 115-2000 中央空調(diào)循環(huán)水及循環(huán)冷卻水水質(zhì)標(biāo)準(zhǔn)
- 嵌入式軟件架構(gòu)設(shè)計
- 《石油天然氣地質(zhì)與勘探》第3章儲集層和蓋層
- 航道整治課程設(shè)計--
- 超星爾雅學(xué)習(xí)通《科學(xué)計算與MATLAB語言》章節(jié)測試含答案
- 2022逆轉(zhuǎn)和消退動脈粥樣硬化斑塊的現(xiàn)實:來自IVUS試驗的證據(jù)(全文)
評論
0/150
提交評論