版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
微機(jī)原理與接口技術(shù)(第3版)習(xí)題答案第4章習(xí)題答案練習(xí)題14.1-1設(shè)A=10,B=20,Q=30,D=2,執(zhí)行下列指令后,AL的值為多少?(1)MOVAL,A5-B+D (2)MOVAL,QMOD(A?D)(3)MOVAL,AAND7 (4)MOVAL,QLEB(5) (6)M【解答】(1)32(2)6(3)1010AND0111=0010B,2(4)0(5)0(6)1604.1-2有如下數(shù)據(jù)定義:DA1DB4DUP(5),2COUNTEQU10DA2 DDCOUNTDUP(?)問:(1)上述數(shù)據(jù)定義為變量DA1分配多少字節(jié)存儲(chǔ)空間?(2)為變量DA2分配多少字節(jié)存儲(chǔ)空間?【解答】(1)為DA1分配5字節(jié);(2)為DA1分配40字節(jié)4.1-3畫出以下偽指令所定義的數(shù)據(jù)在存儲(chǔ)器中的存放示意圖。DATA1DB66H,33HDATA2DW12ABH,99H,?DATA3DB05H,3DUP(1,2)【解答】66HDATA133HABHDATA212H99H00H??55HDATA31212124.1-4有如下數(shù)據(jù)定義:D1 DB 20 DUP(?)D2 DW 01H請(qǐng)寫出用一條指令實(shí)現(xiàn)取D1的偏移地址到SI的2種方法【解答】LEA SI,D1或者M(jìn)OVSI,OFFSETD14.1-5寫出具有下列功能的偽指令語句:(1)在DATA為首地址的存儲(chǔ)單元中連續(xù)存放字節(jié)數(shù)據(jù):4個(gè)18,5個(gè)‘B’,10個(gè)(2,4,6);(2)【解答】(1)DATADBDUP4(18),5DUP(‘B’),10DUP(2,4,6)(2)VAR DB34H,12H,0BCH,0AH4.1-6假設(shè)程序中的數(shù)據(jù)定義如下:LNAME DB 30DUP(?)ADDRESS DB 30DUP(?)CODE_LIST DB 1,7,8,3,2CITY DB 15DUP(?)(1)用一條MOV指令將LNAME的偏移地址存入AX。(2)用一條指令將CODE_LIST的頭兩個(gè)字節(jié)存入SI。(3)寫一條偽指令使CODE_LENGTH的值等于CODE_LIST的實(shí)際長度?!窘獯稹?1)MOVAX,OFFSETLNAME(2)MOV SI,WORDPTRCODE_LIST(3)CODE_LENGTH=CITYCODE_LIST練習(xí)題24.2-1判斷:匯編語言程序通常由幾個(gè)段組成,可以沒有數(shù)據(jù)段,沒有堆棧段,但不能沒有代碼段。()【解答】(對(duì))4.2-2完整的段定義是由偽指令SEGMENT定義段的開始,用偽指令ENDS作為段的結(jié)束。而段的性質(zhì)可以由段的名字來決定嗎?【解答】:在完整段定義結(jié)構(gòu)中,段的性質(zhì)(也就是說改段是代碼段、還是數(shù)據(jù)段、堆棧段)不能由段的名字決定,必須由偽指令A(yù)SSUME指明。4.2-3閱讀下列程序,找出其中不符合匯編語言規(guī)范之處,并修改。DATA SEGMENTA: DB 35,01000111B,24H,‘XYZ’B: DB N DUP(0)N: EQU $-A ENDSCODE SEGMENTSTART: MOVAX,DATA MOVDS,AX LEA SI,A LEA DI,B MOVCX,NLOP MOVAL,[SI] MOV[DI],AL INC SI INC DI LOOPLOP ;跳轉(zhuǎn)到標(biāo)號(hào)LOP處構(gòu)成循環(huán)結(jié)構(gòu) MOVAH,4CH INT 21H ENDS END START【解答】存在以下錯(cuò)誤:=1\*GB3①變量定義時(shí)變量名后不要加“:”=2\*GB3②DATA段定義結(jié)束時(shí)ENDS前少了段名DATA=3\*GB3③少了ASSUME語句=4\*GB3④標(biāo)號(hào)LOP后少了“:”修改如下DATA SEGMENTA DB 35,01000111B,24H,‘XYZ’N EQU $-AB DB N DUP(0) ENDSCODE ENDSCODE SEGMENT ASSUMECS:CODE,DS:DATASTART: MOVAX,DATA MOVDS,AX LEA SI,A LEA DI,B MOVCX,NLOP: MOVAL,[SI] MOV[DI],AL INC SI INC DI LOOPLOP ;跳轉(zhuǎn)到標(biāo)號(hào)LOP處構(gòu)成循環(huán)結(jié)構(gòu) MOVAH,4CH INT 21HCODE ENDS END START4.2-4【解答】DATA SEGMENT BCD DB18H ;待轉(zhuǎn)換的壓縮BCD碼 RESULT DB2DUP(?) ;存放轉(zhuǎn)換得到的2個(gè)字節(jié)的ASCII碼 ASCTAB DB'0123456789' ;ASCII碼表DATA ENDSCODE SEGMENT ASSUMECS:CODE,DS:DATASTART: MOVAX,DATA MOVDS,AX MOVAL,BCD LEABX,ASCTAB MOVCL,4 SHRAL,CL ;取出壓縮BCD碼的高位 XLAT ;轉(zhuǎn)換成ASCII碼 MOVRESULT,AL ;存入RESULT MOVAL,BCD ANDAL,0FH ;取出壓縮BCD碼的低位 XLAT ;轉(zhuǎn)換成ASCII碼 MOVRESULT+1,AL ;存入RESULT+1 MOVAH,4CH INT21HCODE ENDS ENDSTART4.2-5編寫程序,求出Z=[(X+Y)8X]2中的Z值,結(jié)果存放在RESULT單元中(設(shè)X、Y和Z均為16位)。【解答】假設(shè)X、Y、Z都是有符號(hào)數(shù),不考慮計(jì)算溢出的情況DATA SEGMENT VARX DW6 ;變量X VARY DW7 ;變量Y RESULT DW? ;結(jié)果ZDATA ENDSCODE SEGMENT ASSUMECS:CODE,DS:DATASTART: MOVAX,DATA MOVDS,AX MOVAX,VARX ADDAX,VARY ;X+Y ADCDX,0 SALAX,1 ;(X+Y)2 RCL DX,1 SALAX,1 ;(X+Y)4 RCL DX,1 SALAX,1 ;(X+Y)8 RCL DX,1 SUBAX,VARX ;X SBB DX,0 SAR DX,1 ;/2 RCRAX,1 MOVRESULT,AX ;因?yàn)閆不超過16位MOVAH,4CH INT21HCODE ENDS ENDSTART4.2-6編寫程序,將內(nèi)存中4位壓縮BCD碼數(shù)據(jù)DATA1和DATA2相加,結(jié)果仍然為BCD碼并保存在SUM中【解答】DATA SEGMENT DATA1 DB 34H,67H ;低位在前高位在后 DATA2 DB 78H,12H SUM DB3DUP(?)DATA ENDSCODE SEGMENT ASSUME CS:CODE,DS:DATASTART: MOVAX,DATA MOVDS,AX CLC MOVAX,0 MOVAL,DATA1 ADDAL,DATA2 DAA MOVSUM,AL MOVAL,DATA1+1 ADCAL,DATA2+1 DAA MOVSUM+1,AL ADCAH,0 MOVSUM+2,AH MOVAH,4CH INT21HCODE ENDS END START練習(xí)題34.3-1判斷:段內(nèi)轉(zhuǎn)移要改變IP、CS的值。()4.3-2判斷:條件轉(zhuǎn)移指令只能進(jìn)行段內(nèi)短轉(zhuǎn)移。()4.3-3條件轉(zhuǎn)移指令的目的地址應(yīng)該在本條件轉(zhuǎn)移指令的下一條指令地址的字節(jié)范圍內(nèi)。4.3-4段內(nèi)和段間的轉(zhuǎn)移指令的尋址方式有和兩種。4.3-5計(jì)算以下指令中轉(zhuǎn)移目的地址中的偏移地址。設(shè)DS
=
1200H,AX
=
200H,BX
=
0080H,SI
=
0002H,位移量DISP
=
0600H,(12680H)
=
18H,(12681H)
=
98H,(12082H)
=
9AH,(12083H)
=
22H,(12600H)
=
10H,(12601H)=
20H。(1)JMPBX (2)JMPWORDPTRDISP[BX](3)JMPWORDPTR[BX][SI] (4)JMPWORDPTR[DISP]【解答】(1)IP=BX=0080H(2)IP=(DS16+BX+DISP)=(12000H+0080H+0600H)=(12680H)=9818H(3)IP=(DS16+BX+SI)=(12000H+0080H+0002H)=(12082H)=229AH(4)IP=(DS16+DISP)=(12000H+0600H)=(12600H)=2010H4.3-6閱讀下面的程序段,分析AL滿足什么條件時(shí),程序轉(zhuǎn)移到標(biāo)號(hào)LOP處執(zhí)行。 CMP AL,0FFH JNL LOP LOP:【解答】4.3-7根據(jù)下列要求,寫出程序段。(1)判斷AL為負(fù),則跳轉(zhuǎn)至NEXT。(2)判斷字節(jié)變量DA為0,則跳轉(zhuǎn)至NEXT。(3)判斷AL的D0位為1,則跳轉(zhuǎn)至NEXT。(4)判斷字變量DA的D7位為0,則跳轉(zhuǎn)至NEXT。(5)比較AH與字節(jié)變量DA的值,若不相等,則跳轉(zhuǎn)至NEXT。(6)比較字節(jié)變量DA與字符‘A’,若DA≥‘A’,則跳轉(zhuǎn)至NEXT。4.3-8閱讀程序段,說明程序執(zhí)行后轉(zhuǎn)移到哪里? MOVAX,8756H MOVBX,1234H SUB AX,BX JNO L1 JNCL2 JMP L3【解答】本題意為AXBX無溢出則程序轉(zhuǎn)移到L1,有溢出但沒有進(jìn)位程序?qū)⑥D(zhuǎn)移到L2,否則程序轉(zhuǎn)移到L3.由于AXBX=8756H1234H=7522H,OF=1,CF=0,則轉(zhuǎn)L2.4.3-9假設(shè)內(nèi)存單元中存儲(chǔ)了3個(gè)字節(jié)變量A、B和C,編寫程序判斷它們能否構(gòu)成三角形。如果可以,將CF設(shè)為1,否則將CF設(shè)為0。練習(xí)題4--閱讀下面的程序段,分析其功能 START: LEA BX,CHAR ;CHAR是已定義的變量 MOVAL,‘A’ MOVCX,26 LOP1: MOV[BX],AL INC AL INCBX LOOPLOP1 HLT‘A’~‘Z’--編寫程序段,將從地址2B000H開始的256個(gè)存儲(chǔ)單元中的內(nèi)容均減去1,如果發(fā)現(xiàn)某個(gè)存儲(chǔ)單元的內(nèi)容減為0,則立即退出循環(huán),其后的存儲(chǔ)單元不再減1。2B000H是一個(gè)物理地址,可以設(shè)置DS=2B00H,偏移地址則為0。程序如下: MOV AX,2B00H MOV DS,AX ;給DS賦初值 MOV DI,0 ;DI指向內(nèi)存數(shù)據(jù)區(qū) MOV CX,256 ;設(shè)置循環(huán)次數(shù)AGN: DEC BYTEPTR[DI] ;由DI指向的內(nèi)存單元內(nèi)容減1 MOV AL,BYTEPTR[DI] ;減1后的值保存與AL INC DI ;DI加1指向下一個(gè)單元 CMP AL,0 ;減1后的值與0比較 LOOPNZAGN ;不為0,則跳轉(zhuǎn)至AGN繼續(xù)處理下一個(gè)數(shù)據(jù) HLT ;為0,則退出循環(huán)練習(xí)題54.5-1閱讀程序并完成填空,從BUFFER單元開始放置一個(gè)數(shù)據(jù)塊,其中BUFFER單元存放的是預(yù)計(jì)的數(shù)據(jù)塊長度20H,BUFFER+1單元存放的是實(shí)際從鍵盤輸入的字符串的長度,從BUFFER+2單元開始存放的是從鍵盤上接收的字符,請(qǐng)將這些從鍵盤上接收的字符再在屏幕上顯示出來。MOVDX,OFFSETBUFFERMOV AH,(1)INT 21H ;讀入字符串LEA DX,(2)MOV BX,DXMOV AL,(3) ;讀入字符串的字符個(gè)數(shù)MOV AH,0ADD BX,AXMOV AL,(4) MOV [BX+1],ALMOV AH,(5) INC DX ;確定顯示字符串的首地址INT 21HMOV AH,(6) INT 21H【解答】(1)0AH;(2)BUFFER+1;(3)[BX];(4)‘$’;(5)9;(6)4CH4.5-2閱讀下列程序段,說明程序段的功能。AGAIN: MOVAH,01H INT 21H CMP AL,41H JB AGAIN CMP AL,5AH JA AGAIN MOVDL,AL ADDDL,20H MOVAH,02H INT21H【解答】因?yàn)椤瓵’的ASCII碼是41H,‘Z’的ASCII碼是5AH,對(duì)應(yīng)大小寫字母的ASCII碼相差20H,所以本程序段的功能是:從鍵盤上輸入一個(gè)字符,如果是大寫的26個(gè)英文字母,就將其轉(zhuǎn)換成對(duì)應(yīng)的小寫字母顯示在屏幕上,否則重新輸入,直到輸入一個(gè)大寫的英文字母為止。練習(xí)題64.6-1子程序設(shè)計(jì)中,常用的參數(shù)傳遞方式有、和。【解答】寄存器傳遞參數(shù)、內(nèi)存單元傳遞參數(shù)、堆棧傳遞參數(shù)4.6-2在如下子程序中,已知AL的值為0~F中的一位十六進(jìn)制數(shù),問:HEAC PROCFAR CMPAL,10 JC KK ADDAL,7KK: ADDAL,30H MOVDL,AL MOVAH,2 INT 21H RETFHEAC ENDP(1)如果調(diào)用子程序時(shí)AL=2,子程序執(zhí)行后,DL=?(2)如果調(diào)用子程序時(shí)AL=0AH,子程序執(zhí)行后,DL=?(3)該子程序完成什么功能?【解答】(1)DL=32H;(2)DL=41H;(3)將十六進(jìn)制數(shù)轉(zhuǎn)換成對(duì)應(yīng)的ASCII碼,并輸出顯示。如果是0~9的數(shù)字,則求ASCII碼時(shí)在數(shù)值的基礎(chǔ)上加上30H即可,如果是A~F則相應(yīng)的加上37H。4.6-3假設(shè)程序段執(zhí)行前DS=3000H、SS=2000H、SP=3000H、AX=4567H、BX=1234H、CX=6789H,完成下列填空。ANDBX,00FFHCALLMYSUBNOP ;SP=___________ ;AX=___________;BX=___________ HLTMYSUB PROC PUSH AX PUSH BX PUSH CX SUB AX,BX ;SP=___________ POP CX POP AX POP BX ;SP=___________ RETMYSUB ENDP【解答】SP=3000HAX=0034HBX=4567H SP=2FF8H SP=2FFEH練習(xí)題74.7-1字符串操作指令的兩個(gè)隱含指針寄存器是和。【解答】SI、DI4.7-2有如下程序段:DATA SEGMENT ORG 20H BUF DB‘ABCDEFGH’ FLAGDB?DATA ENDS LEA DI,BUF MOVAL,‘E’ CLD MOVCX,8 REPNZSCANS JZ OK MOVFLAG,-1 JMP DONEOK: DEC DI MOVFLAG,1DONE: 問:上述程序段執(zhí)行后,DI和FLAG的值是多少?【解答】上述程序的作用是在BUF為首地址的字符串中查找給定字符’E’。能夠找到’E’,DI的值是’E’的偏移地址,即24H,F(xiàn)LAG的值為1時(shí)表示找到了給定字符,如果為-1則表示沒有找到給定字符,這里找到了,所以FLAG的值是1。4.7-3下列程序?qū)崿F(xiàn)把含有20個(gè)字符‘A’的字符串從源緩沖區(qū)傳送到目的緩沖區(qū)的功能,試在程序中的空白處填上適當(dāng)?shù)闹噶?每空只填一條指令)。DATA SEGMENT SOURCE_STRINGDB20DUP(‘A’)DATA ENDSEXTRA SEGMENT DEST_STRINGDB 20DUP(?)EXTRA ENDSCODE SEGMENT ASSUMECS:CODE,DS:DATA,ES:EXTRASTART: MOVAX,DATA MOVDS,AX MOVAX,EXTRA MOVES,AX (1) LEADI,DEST_STRING CLD MOVCX,20 (2) MOVAH,4CH INT 21HCODE ENDS ENDSTART【解答】(1)LEA SI,SOURCE_STRING (2)REP MOVSB4.7-4下列程序的功能是:將從內(nèi)存2000H:0A00H開始的2KB存儲(chǔ)單元清零。請(qǐng)?jiān)谙铝锌崭裰刑钊牒线m的指令。程序執(zhí)行后DI的內(nèi)容是多少?CLDMOVAX,2000H (1)(2)XOR AL,AL(3)(4)【解答】(1)MOVES,AX(2)MOVDI,0A00H(3)MOVCX,2048(4)REPSTOSB本章習(xí)題4-1編寫一個(gè)程序,統(tǒng)計(jì)32位數(shù)DX:AX中二進(jìn)制位是1的位數(shù)?!窘獯稹緾ODE SEGMENT ASSUMECS:CODESTART: MOV BL,0 ;用BL存放是1的位數(shù) MOV CX,16AGAING: ROL AX,1 ADC BL,0 ROL DX,1 ADC BL,0 LOOP AGAIN MOV AH,4CH INT 21HCODE ENDS END START4-2編制兩個(gè)子程序,將十六進(jìn)制數(shù)轉(zhuǎn)換成ASCII碼,并顯示ASCII碼字符。【解答】DATA SEGMENT DATA1DB 12H,34H,56H,78H,0ABH,0CDH,0EFH LEN =$-DATA1 STRINGDB2*LENDUP(?),'$'DATA ENDSSTACK SEGMENT DB100DUP(?) TOPLABELWORDSTACK ENDSCODE SEGMENT ASSUMECS:CODE,DS:DATA,ES:DATA,SS:STACKSTART: MOV AX,DATA MOV DS,AX MOV ES,AX MOV AX,STACK MOV SS,AX MOV SP,OFFSETTOP MOV CX,LEN LEA SI,DATA1 LEA DI,STRINGAGAIN: CALL CHA INC SI ;取下一個(gè)數(shù)據(jù) LOOP AGAIN LEA DX,STRING ;輸出ASCII碼 MOV AH,09H INT 21H MOV AX,4C00H INT 21HCHA PROC ;對(duì)一個(gè)字節(jié)進(jìn)行轉(zhuǎn)換的子程序 MOV AL,[SI] MOV BL,AL ;轉(zhuǎn)換高半字節(jié) PUSH CX MOV CL,4 SHR AL,CL POP CX CALL CHANGE MOV AL,BL ;轉(zhuǎn)換低半字節(jié) AND AL,0FH CALL CHANGE RETCHA ENDPCHANGE PROC ;獲得單個(gè)字符CMP AL,10JAE ADD1ADD AL,30HJMP L1ADD1: ADD AL,37HL1: MOV [DI],ALINC DIRETCHANGE ENDPCODE ENDS ENDSTART4-3編寫程序?qū)SCII碼轉(zhuǎn)換成十六進(jìn)制數(shù),要求從鍵盤上輸入十進(jìn)制整數(shù)(假定范圍0~65535),然后轉(zhuǎn)換成十六進(jìn)制數(shù)來存儲(chǔ)?!窘獯稹繌逆I盤輸入的十進(jìn)制數(shù)實(shí)際上是數(shù)字字符對(duì)應(yīng)的ASCII碼,所以先要把ASCII碼轉(zhuǎn)換成0~9的數(shù)值,然后還要乘以每一位的權(quán)值。DATA SEGMENT BUFDB10 ;接受字符串輸入的空間大小 DB? ;實(shí)際輸入的字符個(gè)數(shù),待填入 DB10DUP(?) DATA1DW? ;存儲(chǔ)對(duì)應(yīng)的十六進(jìn)制結(jié)果DATA ENDSSTACK SEGMENT DB100DUP(?) TOP LABELWORDSTACK ENDSCODE SEGMENT ASSUMECS:CODE,DS:DATA,ES:DATA,SS:STACKSTART: MOVAX,DATA MOVDS,AX MOVES,AX MOVAX,STACK MOVSS,AX MOVSP,OFFSETTOP MOVDX,OFFSETBUF ;接收鍵盤輸入的數(shù)字字符 MOVAH,0AH INT21H LEA SI,BUF INC SI ;SI指向字符實(shí)際個(gè)數(shù) MOVCL,[SI] ;將字符實(shí)際個(gè)數(shù)送入CX MOVCH,0 INCSI ;SI指向最高位數(shù)字 MOVAX,0AGAIN: MOVDX,10 MULDX ;乘以位權(quán)10 MOVDH,0 MOVDL,[SI] AND DL,0FH ;ASCII碼轉(zhuǎn)換成十六進(jìn)制 ADD AX,DX INC SI ;取一下位數(shù)字 LOOPAGAIN MOVDATA1,AX MOVAX,4C00H INT 21HCODE ENDS END START4-4編寫程序?qū)⒆肿兞恐械臒o符號(hào)二進(jìn)制數(shù)轉(zhuǎn)換成ASCII字符串輸出?!窘獯稹咳绻枰敵龆M(jìn)制位串,需要將每一個(gè)二進(jìn)制位轉(zhuǎn)換成對(duì)應(yīng)的ASCII碼。DATA SEGMENT DATA1 DW12F3H ;字變量 STRING DBSIZEDATA1*8DUP(?),'$'DATA ENDSSTACK SEGMENT DB100DUP(?) TOPLABELWORDSTACK ENDSCODE SEGMENT ASSUMECS:CODE,DS:DATA,ES:DATA,SS:STACKSTART: MOVAX,DATA MOVDS,AX MOVES,AX MOVAX,STACK MOVSS,AX MOVSP,OFFSETTOP LEADI,STRING MOVCX,LENGTHSTRING ;LENGTHSTRING等于16 MOVBX,DATA1AGAIN: RCLBX,1 ;移出一位置CF,判斷是0還是1 JC L1 MOVAL,30H JMP NEXTL1: MOVAL,31HNEXT: MOV[DI],AL INCDI LOOPAGAIN LEADX,STRING ;顯示二進(jìn)制字符串 MOVAH,09H INT21H MOVAX,4C00H INT 21HCODE ENDS END START4-5從鍵盤輸入一個(gè)長度為10的字符串,用冒泡法對(duì)其從小到大進(jìn)行排序,并在屏幕上輸出排序結(jié)果,要求將排序定義成子程序,主程序和子程序在同一段內(nèi)?!窘獯稹緿ATA SEGMENT BUF DB10DUP(?) LEN=($-BUF) MESS1 DB'Input10characterswhichwillbesorted:$' MESS2 DB'sorthavecompleted,resultis:$' CRLF DB0AH,0DH,'$' ;回車換行DATA ENDSCODE SEGMENT ASSUME CS:CODE,DS:DATASTART: MOVAX,DATA MOVDS,AX MOVDX,OFFSETMESS1 ;顯示提示信息1 MOVAH,09H INT21H MOVDX,OFFSETCRLF ;回車換行 MOVAH,09H INT21H MOVCX,LEN LEABX,BUFINPUT: MOVAH,01H ;從鍵盤接收帶排序的10個(gè)字符 INT21H MOV[BX],AL INCBX MOVAH,02H ;顯示時(shí)字符之間用空格隔開 MOVDL,20H INT 21H LOOPINPUT MOVDX,OFFSETCRLF ;回車換行 MOVAH,09H INT 21H MOVCX,LEN MOVBX,OFFSETBUF CALLBUBBLE ;調(diào)用冒泡排序子程序 MOVAH,09H MOVDX,OFFSETMESS2 ;顯示提示信息1 INT21H MOVBX,OFFSETBUF MOVCX,LENAGAIN: MOVDL,[BX] ;顯示排序后的10個(gè)字符 MOVAH,02H INT 21H INC BX MOVAH,02H ;顯示時(shí)字符之間用空格隔開 MOVDL,20H INT 21H LOOPAGAINEXIT: MOVAH,4CH INT21HBUBBLE PROC ;冒泡排序子程序 DEC CXCYCLE1: PUSHCX ;外層循環(huán),每執(zhí)行一輪,最大的數(shù)值排到該輪的最后,共執(zhí)行9次 MOVSI,BXCYCLE2: MOVAL,[SI] ;內(nèi)存循環(huán),第i輪執(zhí)行9-i次 CMPAL,[SI+1] JBECONTINUE XCHGAL,[SI+1] MOV[SI],AL ;如果當(dāng)前元素大于下一個(gè)元素則交換CONTINUE:INC SI LOOPCYCLE2 POPCX LOOPCYCLE1 RETBUBBLE ENDPCODE ENDS ENDSTART4-6編寫程序求某數(shù)據(jù)區(qū)中無符號(hào)字?jǐn)?shù)據(jù)的最大值和最小值,結(jié)果送入RESULT單元。要求:最大值和最小值分別用于子程序計(jì)算,主程序和子程序之間分別用:(1)寄存器傳遞參數(shù);(2)存儲(chǔ)單元傳遞參數(shù);(3)堆棧傳遞參數(shù)。【解答】(1)DATA SEGMENT BUFDW123,67,88,53,12,90,99,0 LEN=($-BUF)/2 RESULT DW2DUP(?)DATA ENDSCODE SEGMENT ASSUME CS:CODE,DS:DATASTART: MOVAX,DATA MOVDS,AX LEASI,BUF ;SI用于將BUF首地址傳遞給子程序 MOVCX,LEN ;CX用于循環(huán)次數(shù)傳遞給子程序 CALLMAX LEA SI,BUF ;SI用于將BUF首地址傳遞給子程序 MOVCX,LEN ;CX用于循環(huán)次數(shù)傳遞給子程序 CALLMIN MOVRESULT,BX ;將最大值送入RESULT處的字?jǐn)?shù)據(jù) MOVRESULT+2,DX ;將最小值送入RESULT+2處的字?jǐn)?shù)據(jù)EXIT: MOVAX,4C00H INT21HMAX PROC MOVBX,[SI] ;取第一個(gè)數(shù)至BX,BX存放最大值 DECCX ;字?jǐn)?shù)據(jù)減1 ADDSI,2 ;SI指向下一個(gè)數(shù)據(jù)MAX1: MOVAX,[SI] ;取1個(gè)字?jǐn)?shù)據(jù)至AX中 CMPAX,BX JNANEXT1 ;AX不高于BX,與下一個(gè)比較 XCHGAX,BX ;否則將較大的數(shù)據(jù)送至BXNEXT1: ADDSI,2 ;SI指向下一個(gè)數(shù)據(jù) LOOPMAX1 RETMAX ENDPMINP ROC MOVDX,[SI] ;取第一個(gè)數(shù)至DX,DX存放最小值 DECCX ;字?jǐn)?shù)據(jù)減1 ADD SI,2 ;SI指向下一個(gè)數(shù)據(jù)MIN1: MOVAX,[SI] ;取1個(gè)字?jǐn)?shù)據(jù)至AX中 CMPAX,DX JNBNEXT2 ;AX不低于DX,與下一個(gè)比較 XCHGAX,DX ;否則將較小的數(shù)據(jù)送至DXNEXT2: ADDSI,2 LOOPMIN1 RETMIN ENDPCODE ENDS ENDSTART(2)DATA SEGMENT BUF DW123,67,88,53,12,90,99,0 LEN=($-BUF)/2 RESULT DW2DUP(?)DATA ENDSCODE SEGMENT ASSUME CS:CODE,DS:DATASTART: MOVAX,DATA MOVDS,AX CALLMAX CALLMINEXIT: MOVAX,4C00H INT21HMAX PROC LEASI,BUF ;SI取BUF首地址 MOVCX,LEN ;CX取BUF長度 MOVBX,[SI] ;取第一個(gè)數(shù)至BX,BX存放最大值 DECCX ;字?jǐn)?shù)據(jù)減1 ADDSI,2 ;SI指向下一個(gè)數(shù)據(jù)MAX1: MOVAX,[SI] ;取1個(gè)字?jǐn)?shù)據(jù)至AX中 CMPAX,BX JNANEXT1 ;AX不高于BX,與下一個(gè)比較 XCHGAX,BX ;否則將較大的數(shù)據(jù)送至BXNEXT1: ADD SI,2 ;SI指向下一個(gè)數(shù)據(jù) LOOPMAX1 MOVRESULT,BX ;將最大值送入RESULT處的字?jǐn)?shù)據(jù) RETMAX ENDPMIN PROC LEASI,BUF ;SI取BUF首地址 MOVCX,LEN ;CX取BUF長度 MOVDX,[SI] ;取第一個(gè)數(shù)至DX,DX存放最小值 DECCX ;字?jǐn)?shù)據(jù)減1 ADDSI,2 ;SI指向下一個(gè)數(shù)據(jù)MIN1: MOVAX,[SI] ;取1個(gè)字?jǐn)?shù)據(jù)至AX中 CMPAX,DX JNBNEXT2 ;AX不低于DX,與下一個(gè)比較 XCHGAX,DX ;否則將較小的數(shù)據(jù)送至DXNEXT2: ADDSI,2 LOOPMIN1 MOVRESULT+2,DX ;將最小值送入RESULT+2處的字?jǐn)?shù)據(jù) RETMIN ENDPCODE ENDS ENDSTART(3)DATA SEGMENT BUF DW123,67,88,53,12,90,99,0 LEN=($-BUF)/2 RESULT DW2DUP(?)DATA ENDSSTACK SEGMENT DW 100DUP(?) TOP LABEL WORDSTACK ENDSCODE SEGMENT ASSUME CS:CODE,DS:DATA,SS:STACKSTART: MOVAX,DATA MOVDS,AX MOVAX,STACK MOVSS,AX MOVSP,OFFSETTOP MOVAX,OFFSETBUF ;入口參數(shù)進(jìn)棧 PUSHAX MOVAX,LEN PUSHAX CALLMAX POP RESULT ;最大值出棧 MOVAX,OFFSETBUF ;入口參數(shù)進(jìn)棧 PUSHAX MOVAX,LEN PUSHAX CALLMIN POP RESULT+2 ;最小值出棧EXIT: MOVAX,4C00H INT21HMAX PROC PUSHBP MOVBP,SP PUSHSI PUSHAX PUSHBX PUSHCX PUSHF MOVSI,[BP+6] MOVCX,[BP+4] MOVBX,[SI] ;取第一個(gè)數(shù)至BX,BX存放最大值 DECCX ;字?jǐn)?shù)據(jù)減1 ADDSI,2 ;SI指向下一個(gè)數(shù)據(jù)MAX1: MOVAX,[SI] ;取1個(gè)字?jǐn)?shù)據(jù)至AX中 CMPAX,BX JNANEXT1 ;AX不高于BX,與下一個(gè)比較 XCHGAX,BX ;否則將較大的數(shù)據(jù)送至BXNEXT1: ADDSI,2 ;SI指向下一個(gè)數(shù)據(jù) LOOPMAX1 MOV[BP+6],BX ;最大值進(jìn)棧以便傳遞回主程序 POPF POPCX POPBX POPAX POPSI POPBP RET2 ;返回后SP指向最大值MAX ENDPMIN PROC PUSHBP MOVBP,SP PUSHSI PUSHAX PUSHBX PUSHCX PUSHF MOVSI,[BP+6] MOVCX,[BP+4] MOVBX,[SI] ;取第一個(gè)數(shù)至BX,BX存放最小值 DEC CX ;字?jǐn)?shù)據(jù)減1 ADD SI,2 ;SI指向下一個(gè)數(shù)據(jù)MIN1: MOVAX,[SI] ;取1個(gè)字?jǐn)?shù)據(jù)至AX中 CMPAX,BXJNBNEXT2 ;AX不低于BX,與下一個(gè)比較 XCHGAX,BX ;否則將較小的數(shù)據(jù)送至BXNEXT2: ADDSI,2 ;SI指向下一個(gè)數(shù)據(jù) LOOPMIN1 MOV[BP+6],BX ;最小值進(jìn)棧以便傳遞回主程序 POPF POP CX POP BX POP AX POP SI POP BP RET2 ;返回后SP指向最小值MIN ENDPCODE ENDS ENDSTART4-7設(shè)有兩個(gè)長度相等的字符串分別放在以STR1和STR2為首地址的數(shù)據(jù)區(qū)中,試編寫程序檢查這兩個(gè)字符串是否相同。若相同,標(biāo)志變量FLAG設(shè)置為0,否則設(shè)置為-1?!窘獯稹緿ATA SEGMENT STR1DB'abcdefgh' STR2DB'abcdefgh' LENEQUSTR2-STR1 FLAGDB?DATA ENDSCODE SEGMENT ASSUME CS:CODE,DS:DATASTART: MOVAX,SEGSTR1 MOVDS,AX MOVES,AX LEASI,STR1 ;置源串偏移地址 LEADI,STR2 ;置目的串偏移地址 MOVCX,LEN ;置串長度 CLD ;方向標(biāo)志復(fù)位 REPECMPSB ;字符串傳送 JNENOEQUAL ;有一個(gè)字符不相等說明兩個(gè)串不等 MOVFLAG,0 JMPEXITNOEQUAL:MOVFLAG,-1EXIT: MOVAX,4C00H INT21HCODE ENDS ENDSTART4-8某程序可以從鍵盤接收命令(0~5),分別轉(zhuǎn)向6個(gè)子程序,子程序入口地址分別為P0~P5,編寫程序,用跳轉(zhuǎn)表實(shí)現(xiàn)分支結(jié)構(gòu)?!窘獯稹考僭O(shè)主程序和子程序不在同一個(gè)代碼段中DATA SEGMENT ORG 1000H PRMT DB 'PLEASEINPUTYOURCHOICE(0~9ORQ/q):','$' CHOICE DB? ER DB 'ERROR',0AH,0DH,'$' EX DB 'QUIT',0AH,0DH,'$' PMT0 DB'ThisisaprocedureP0',0AH,0DH,'$' PMT1 DB'ThisisaprocedureP1',0AH,0DH,'$' PMT2 DB'ThisisaprocedureP2',0AH,0DH,'$' PMT3 DB'ThisisaprocedureP3',0AH,0DH,'$' PMT4 DB'ThisisaprocedureP4',0AH,0DH,'$' PMT5 DB'ThisisaprocedureP5',0AH,0DH,'$' AD DB 0AH,0DH,'$' ;回車換行 JADT DD P0 ;跳轉(zhuǎn)表 DD P1 DD P2 DD P3 DD P4 DD P5DATA ENDSCODE SEGMENT ASSUMECS:CODE,DS:DATASTART: MOVAX,DATA MOVDS,AXDO: MOVAH,9 ;輸出提示信息 MOVDX,OFFSETPRMT INT21H MOVAH,01H ;接收鍵盤輸入字符 INT21H MOVCHOICE,AL MOVAH,9 ;輸出回車換行 MOVDX,OFFSETAD INT21H MOVAL,CHOICE ;判斷是否是退出鍵 CMPAL,'Q' JEEXIT CMPAL,'q' JEEXIT CMPAL,30H ;判斷是否是數(shù)字鍵 JBERROR CMPAL,35H JAERROR SUBAL,30H ;計(jì)算數(shù)字鍵對(duì)應(yīng)下標(biāo) MOVAH,0 MOVCL,2 SHLAX,CL ;AL*4 MOVDI,AX ;得到偏移量 CALLJADT[DI] JMPDOERROR: MOVAH,9 ;輸出錯(cuò)誤提示信息 MOVDX,OFFSETER INT21H JMPDO EXIT: MOVAH,9 ;輸出退出信息 MOVDX,OFFSETEX INT21H MOVAH,4CH INT21HCODE ENDSCCODE SEGMENT ASSUMECS:CCODE P0 PROCFAR MOVAX,DATA MOVDS,AX MOVAH,9 MOVDX,OFFSET PMT0 INT21H RETFP0 ENDP P1 PROCFAR MOVAX,DATA MOVDS,AX MOVAH,9 MOVDX,OFFSET PMT1 INT21H RETFP1 ENDPP2 PROCFAR MOVAX,DATA MOVDS,AX MOVAH,9 MOVDX,OFFSET PMT2 INT21H RETFP2 ENDPP3 PROCFAR MOVAX,DATA MOVDS,AX MOVAH,9 MOVDX,OFFSET PMT3 INT21H RETFP3 ENDPP4 PROCFAR MOVAX,DATA MOVDS,AX MOVAH,9 MOVDX,OFFSET PMT4 INT21H RETFP4 ENDPP5 PROCFAR MOVAX,DATA MOVDS,AX MOVAH,9 MOVDX,OFFSET PMT5 INT21H RETFP5 ENDPCCODE ENDS END START4-9編寫程序計(jì)算N!(N=0~6),N由鍵盤輸入,結(jié)果輸出到屏幕上。【解答】DATA SEGMENT P1DB'InputthenumberN:(0~6)','$' ;提示輸入信息 P2DB'Theresultis:','$' ;提示輸出結(jié)果 P3DB
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(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ì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 2025年中職畜牧獸醫(yī)(動(dòng)物檢疫技術(shù))試題及答案
- 2025年大學(xué)美術(shù)學(xué)(美術(shù)理論基礎(chǔ))試題及答案
- 2025年大學(xué)大一(財(cái)務(wù)管理)財(cái)務(wù)分析試題及答案
- 2025年大學(xué)一年級(jí)(動(dòng)物醫(yī)學(xué))傳染病防治技能試題及答案
- 2026年園藝知識(shí)(園藝?yán)碚摚┛碱}及答案
- 2026年安徽單招語文應(yīng)用文寫作專項(xiàng)含答案通知啟事求職信經(jīng)典題
- 2026年西藏單招人工智能技術(shù)應(yīng)用專業(yè)基礎(chǔ)題庫含答案
- 2026年天津體育單招考生文化提分題庫含答案基礎(chǔ)題占比70%
- 2026年河北單招機(jī)電一體化技術(shù)專業(yè)技能測(cè)試模擬卷含答案
- 2026年福建單招新能源汽車技術(shù)專業(yè)故障診斷經(jīng)典題含答案智能網(wǎng)聯(lián)方向
- 借用公司簽合同協(xié)議
- 外耳道濕疹的護(hù)理
- 鼻炎中醫(yī)講課課件
- 孔隙率測(cè)定方法
- 2025 初中中國歷史一二九運(yùn)動(dòng)的爆發(fā)課件
- 技術(shù)開發(fā)文檔編寫與歸檔規(guī)范
- 2025年國家開放大學(xué)《數(shù)據(jù)分析與統(tǒng)計(jì)》期末考試備考題庫及答案解析
- 《算法設(shè)計(jì)與分析》期末考試試卷及答案
- 2025年高考真題-化學(xué)(四川卷) 含答案
- 飛模施工方案
- 2025企業(yè)整體并購協(xié)議
評(píng)論
0/150
提交評(píng)論