版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡介
1、第5章 匯編語言程序設(shè)計(jì)教材習(xí)題解答1. 下列語句在存儲器中分別為變量分配多少字節(jié)?VR1DW9VR2DW4 DUP(?)CONT EQU10VR3DDCONT DUP(?)VR4DB2 DUP(?,CONT DUP(0)VR5DBHOW ARE YOU?【解】VR1:2B ; VR2:8B ; CONT:1B ; VR3:40B; VR4:44B; VR5:12B2. 根據(jù)下列數(shù)據(jù)定義,寫出各條指令執(zhí)行后的結(jié)果TABLEDW100 DUP(?)ARRAYDBABCDRESDB?(1) MOV AX,TYPE RES AX=( )(2) MOV BX,TYPE TABLE BX=( )(3)
2、MOV CX,LENGTH TABLE CX=( )(4) MOV SI,SIZE TABLESI=( )(5) MOV DI,LENGTH ARRAYDI=( )【解】(1) AX=1 (2) BX=2 (3) CX=100 (4) SI=200 (5) DI=43. 下面定義的是一個(gè)數(shù)據(jù)段,請圖示它們在存儲器中的存放形式。DATA SEGMENTA DB 1,2,3,4B DB ABCDC DB 4 DUP(0)N EQU 12X DW 33,0302HY DD 0ABCDHDATA ENDS【解】注:括號中為段內(nèi)偏移位置(0000H) A1(0008H) C003H20(0011H) Y
3、0CDH300ABH4000H(0004H) BA(000CH) N1200HB(000DH) X17H.C00HD02H4. 試定義一個(gè)完整的數(shù)據(jù)段,首先將10個(gè)壓縮的BCD碼29存放在ARRAY變量字節(jié)單元,緊接著把-28,6,45,39,3存放在ALPHA數(shù)組變量的字單元中,最后從字節(jié)變量BUFFER單元開始預(yù)留100個(gè)空單元備用?!窘狻緿ATA SEGMENTARRAY DB 10 DUP(29H)ALPHA DW -28,6,45,39,3 BUFFER DB 100 DUP(?)DATA ENDS5. 請定義一個(gè)結(jié)構(gòu),描述一個(gè)學(xué)生的簡況。該結(jié)構(gòu)應(yīng)含有以下內(nèi)容:姓名、年齡、性別、籍貫
4、、民族、入學(xué)成績、名次。說明如何定義結(jié)構(gòu)變量和引用結(jié)構(gòu)變量?!窘狻縎TUDENTSTRUCNAMEDW 5 DUP(?) AGE DB (?)SEX DW (?)HOMEPLADW 10 DUP(?)RACE DW 5 DUP(?)GRADE DB (?)SORT DB (?)STUDENT ENDS定義結(jié)構(gòu)變量的格式:結(jié)構(gòu)變量名 結(jié)構(gòu)名 字段值表例如:STU1 STUDENT 1,ZHANG引用結(jié)構(gòu)變量的格式:結(jié)構(gòu)變量名結(jié)構(gòu)字段名,例如:STU1.NAME6. 實(shí)現(xiàn)滿足下面要求的宏定義。(1) 任意兩個(gè)單元中的數(shù)據(jù)相加存于第三個(gè)單元中。(2) 任意8位寄存器中的數(shù)據(jù)轉(zhuǎn)換為ASCII碼并在屏幕
5、上顯示?!窘狻?1) 宏定義的代碼段如下:ADDMMACROM1,M2,M3MOV AX,M1ADDAX,M2MOVM3,AXENDM(2) 設(shè)8位寄存器存儲的是無符號數(shù),最高位是百位。宏定義的代碼段如下:ADDMMACRO Y;形式參數(shù)Y代表一個(gè)8位寄存器MOV AL,Y XOR AH,AHMOV DL,100DIV DLADD AL,30HMOV DL,ALMOV AL,AH;存余數(shù)MOV AH,2INT 21H;顯示百位數(shù)XOR AH,AHMOV DL,10DIV DLADD AL,30HMOV DL,ALMOV AL,AH;存余數(shù)MOV AH,2INT 21H;顯示十位數(shù)ADD AL,
6、30HMOV DL,ALMOV AH,2INT 21H;顯示個(gè)位數(shù)ENDM7. 對下面程序進(jìn)行注釋,并說明其功能。DATASEGMENTADB123ABCDATAENDSCODESEGMENTASSUMECS:CODE,DS:DATASTART:MOV AX,DATAMOV DS,AXLEA BX,AMOV CX,6MOV AH,2LP:MOV AL,BXXCHG AL,DLINC BXINT 21HLOOP LPMOV AH,4CHINT 21HCODEENDSEND START【解】注釋如下:DATA SEGMENT;數(shù)據(jù)段開始ADB123ABCDATA ENDS;數(shù)據(jù)段結(jié)束CODE SE
7、GMENT;代碼段開始ASSUME CS:CODE,DS:DATASTART:MOV AX,DATAMOV DS,AX;裝填數(shù)據(jù)段LEA BX,A;傳送變量的位置MOV CX,6MOV AH,2LP: MOV AL,BXXCHG AL,DLINC BXINT 21H ;系統(tǒng)功能調(diào)用,功能號:2 ,;將字符1、2、3、“A”、“B”、“C”送屏幕顯示LOOP LP;CX6,循環(huán)6次MOV AH,4CHINT 21H;返回DOSCODE ENDS;代碼段結(jié)束END START;源程序結(jié)束程序的功能:顯示從A開始的6個(gè)字節(jié)單元中的字符。8. 編程將CX、DX作為雙字聯(lián)合右移四位(設(shè)CX為高16位),
8、最高4位送入全1?!窘狻砍绦虼a如下:CODE SEGMENT;代碼段開始ASSUME CS:CODESTART:MOV AX,CXMOV CX,4LP: SHR AX,1RCR DX,1LOOP LPOR AX,0F000HMOV CX,AXMOV AH,4CHINT 21H;返回DOS CODE ENDS;代碼段結(jié)束END START;源程序結(jié)束9. 編程把從A單元開始存放的3個(gè)單字節(jié)無符號數(shù)按遞增順序排序后存回原處?!窘狻砍绦虼a如下:DATA SEGMENT;數(shù)據(jù)段開始ADB3 DUP(?)DATA ENDS;數(shù)據(jù)段結(jié)束CODE SEGMENT;代碼段開始ASSUME CS:CODE,
9、DS:DATASTART:MOV AX,DATAMOV DS,AX;裝填數(shù)據(jù)段LEA BX,A;傳送變量的位置MOV AL,BXCMP AL,BX1JAE EX1;BX>BX1,交換CMP2:CMP AL,BX2JAE EX2;BX>BX2,交換JMP CONT1EX1:XCHG AL,BX1XCHG AL,BXMOV AL,BXJMP CMP2EX2:XCHG AL,BX2XCHG AL,BXMOV AL,BXCONT1:MOV AL,BX1CMP AL,BX2JB CONT2XCHG AL,BX2 ;BX1>BX2,交換XCHG AL,BX1CONT2:MOV AH,4C
10、HINT 21H;返回DOSCODE ENDS;代碼段結(jié)束END START;源程序結(jié)束10. 試編寫一段程序比較從ARRAY開始存放的3個(gè)16位有符號數(shù)。根據(jù)比較結(jié)果置FLAG標(biāo)志。(1) 如果3個(gè)數(shù)都不相等,置FLAG為0。(2) 如果3個(gè)數(shù)中有2個(gè)數(shù)相等,置FLAG為1。(3) 如果3個(gè)數(shù)都相等,置FLAG為2?!窘狻砍绦虼a如下:DATA SEGMENT;數(shù)據(jù)段開始ARRAYDW3 DUP(?)FLAG DB ?DATA ENDS;數(shù)據(jù)段結(jié)束CODE SEGMENT;代碼段開始ASSUME CS:CODE,DS:DATASTART:MOV AX,DATAMOV DS,AX;裝填數(shù)據(jù)段L
11、EA BX,ARRAY;傳送變量的位置MOV AX,BXCMP AX,BX2JE EQU1; BXBX2,執(zhí)行MOV DL,1MOV DL,0JMP CONT1EQU1:MOV DL,1CONT1:CMP AX,BX4JE EQU2; BXBX4 ,DL1JMP CONT2EQU2:ADD DL,1CONT2:MOV AX,BX2CMP AX,BX4JE EQU3JMP CONT3EQU3:ADD DL,1CONT3:CMP DL,3JNZ EQU4; BXBX2BX4 ,DL1SUB DL,1EQU4:MOV FLAG,DLMOV AH,4CHINT 21H;返回DOSCODE ENDS;代
12、碼段結(jié)束END START;源程序結(jié)束11. 分析下列程序,指出運(yùn)行結(jié)果。DATA SEGMENTSUM DW?DATA ENDSCODE SEGMENTASSUME CS:CODE,DS:DATASTART:MOV AX,DATAMOV DS,AXXOR AX,AXMOV CX,10MOV BX,2LP: ADD AX,BXINC BXINC BXLOOP LPMOV SUM,AXMOV AH,4CHINT 21HCODE ENDSEND START請問:(1) 該程序完成的功能是_。(2) 程序執(zhí)行后,SUM單元的內(nèi)容是_?!窘狻?1) 該程序完成的功能是計(jì)算020的偶數(shù)和。(2) 程序執(zhí)
13、行后,SUM單元的內(nèi)容是110。12. 從ARRAY開始的單元中存有10個(gè)16位無符號數(shù),試編一完整程序找出其中最小數(shù)并存入MIN單元?!窘狻砍绦虼a如下:DATA SEGMENT;數(shù)據(jù)段開始ARRAYDW0F454H,4540H,0D214H,8354H,8210H, 0A673H,5656H,0021H,0567H,4228HMIN DW ?DATA ENDS;數(shù)據(jù)段結(jié)束CODE SEGMENT;代碼段開始ASSUME CS:CODE,DS:DATASTART:MOV AX,DATAMOV DS,AX;裝填數(shù)據(jù)段LEA BX,ARRAY;傳送變量的位置MOV AX,BXMOV CX,9LP
14、1: INC BXINC BXCMP AX,BXJB CONT1;AX<BX,轉(zhuǎn)移MOV AX,BX ;AX>=BX,AXBXCONT1:LOOP LP1MOV MIN,AXMOV AH,4CHINT 21H;返回DOSCODE ENDS;代碼段結(jié)束END START;源程序結(jié)束13. 從DAT開始的數(shù)據(jù)區(qū)中放有100個(gè)8位的無符號數(shù),編程統(tǒng)計(jì)其中奇數(shù)的個(gè)數(shù),將結(jié)果存入RESULT單元?!窘狻砍绦虼a如下:DATA SEGMENT;數(shù)據(jù)段開始DATDB26,45,44,32,90,2,1,81,2,120,5RESULT DB ?DATA ENDS;數(shù)據(jù)段結(jié)束CODE SEGMEN
15、T;代碼段開始ASSUME CS:CODE,DS:DATASTART:MOV AX,DATAMOV DS,AX;裝填數(shù)據(jù)段LEA BX,DAT;傳送變量的位置XOR AX,AXXOR DX,DXMOV DL,2MOV CX,100LP1:MOV AL,BXDIV DL;余數(shù)在AH中CMP AH,0JE CONT1INC DH;DH用作計(jì)數(shù)器CONT1:INC BX LOOP LP1MOV RESULT,DHMOV AH,4CHINT 21H;返回DOSCODE ENDS;代碼段結(jié)束END START;源程序結(jié)束14. 利用DOS系統(tǒng)功能調(diào)用,將鍵盤輸入的小寫字母轉(zhuǎn)換成大寫字母輸出顯示,直到輸入
16、“$”字符時(shí)停止輸出?!窘狻空{(diào)用1號系統(tǒng)功能,鍵入的字符送AL寄存器,并送屏幕顯示輸出。調(diào)用2號系統(tǒng)功能,將DL寄存器中的內(nèi)容送屏幕顯示輸出。程序代碼如下:CODE SEGMENT;代碼段開始ASSUME CS:CODESTART:XOR AX,AXINPU:MOV AH,1INT 21H;鍵盤輸入單字符送ALMOV BL,$CMP AL,BLJE EXTSUB AL,20H;轉(zhuǎn)換成大寫字母MOV DL,ALMOV AH,2INT 21H;將DL中的字符送屏幕顯示JMP INPUEXT:MOV AH,4CHINT 21H;返回DOSCODE ENDS;代碼段結(jié)束END START;源程序結(jié)束1
17、5. 建立兩個(gè)過程:一個(gè)過程將16進(jìn)制數(shù)變換成ASCII碼,一個(gè)過程將ASCII碼字符在屏幕上顯示輸出?!窘狻砍绦虼a如下:DATA SEGMENT;數(shù)據(jù)段開始LIST DB?;存儲一個(gè)十六進(jìn)制數(shù)(1位)ASC DB?;存儲轉(zhuǎn)換的ASCII碼DATA ENDS;數(shù)據(jù)段結(jié)束CODE SEGMENT;代碼段開始ASSUME CS:CODE,DS:DATA,ES:DATASTART:MOV AX,DATAMOV DS,AX;裝填數(shù)據(jù)段CALL CHANGECALL OUTPTRMOV AH,4CHINT 21H;返回DOSCHANGE PROCMOV AL,LISTCMP AL,9JA NEXT1;
18、AL>9,轉(zhuǎn)移OR AL,30HJMP NEXT2NEXT1:ADD AL,37HNEXT2:MOV ASC,ALRETCHANGE ENDPOUTPTR PROCMOV DL,ASCMOV AH,2INT 21H RETOUTPTR ENDPCODE ENDS;代碼段結(jié)束END START;源程序結(jié)束16. 要求編寫程序比較兩個(gè)最大長度為100個(gè)字符的字符串ALFA1和ALFA2是否相等,若相等則輸出顯示“All Right!”,否則輸出顯示“Error!”。【解】完成輸出顯示功能時(shí),調(diào)用9號系統(tǒng)功能,功能是將指定的內(nèi)存緩沖區(qū)中的字符串在屏幕上顯示出來,緩沖區(qū)的字符串以“$”為結(jié)束標(biāo)志
19、。LEN指定的內(nèi)存中存儲兩字符串中長串的長度,否則,即使兩串相等,由于字符串后面的隨機(jī)字符,將影響判斷結(jié)果。程序代碼如下:DATA SEGMENT;數(shù)據(jù)段開始ALFA1DB100 DUP(?)ALFA2 DB100 DUP(?)RESULT1DB All Right!$RESULT2DB Error!$LEN DB 100;字符串長度DATA ENDS;數(shù)據(jù)段結(jié)束CODE SEGMENT;代碼段開始ASSUME CS:CODE,DS:DATA,ES:DATASTART:MOV AX,DATAMOV DS,AX;裝填數(shù)據(jù)段MOV ES,AX;裝填附加段LEA BX,ALFA1;傳送源串的位置MO
20、V SI,BXLEA BX,ALFA2;傳送目的串的位置MOV DI,BXCLD;清方向標(biāo)志,使正向傳送XOR CX,CXMOV CL,LENREPNZ CMPSBJZ EQQ;若ZF1,說明兩串相等,轉(zhuǎn)EQQLEA DX,RESULT2;輸出顯示“Error!”JMP OUT1EQQ:LEA DX,RESULT1;輸出顯示“All Right!”O(jiān)UT1: MOV AH,9INT 21HSTOP:MOV AH,4CHINT 21H;返回DOSCODE ENDS;代碼段結(jié)束END START;源程序結(jié)束17. 有一個(gè)最大長度為80個(gè)字符的字符串STRING,試編寫程序找出第一個(gè)空格的位置(用0
21、0H4FH表示),并存入CL中。若該串無空格,則將0FFH存入CL中?!窘狻砍绦虼a如下:DATA SEGMENT;數(shù)據(jù)段開始STRINGDB80 DUP(?)LEN DB 80DATA ENDS;數(shù)據(jù)段結(jié)束CODE SEGMENT;代碼段開始ASSUMECS:CODE,DS:DATA,ES:DATASTART:MOV AX,DATAMOV DS,AX;裝填數(shù)據(jù)段MOV ES,AX;裝填附加段MOV AL, ;要查找的關(guān)鍵字(空格)LEA BX,STRING ;傳送串的位置MOV DI,BXXOR CX,CXMOV CL,LEN CLD;清方向標(biāo)志,使正向傳送REPNZ SCASB;搜索關(guān)鍵字
22、JZ FOUND;若ZF1,說明找到,轉(zhuǎn)FOUNDMOV CL,0FFHJMP STOPFOUND:MOV AL,LENSUB AL,CL;CL中是剩余的字符數(shù)MOV CL,ALSTOP:MOV AH,4CHINT 21H;返回DOSCODE ENDS;代碼段結(jié)束END START;源程序結(jié)束18. 在AX中存放著壓縮BCD碼的十進(jìn)制數(shù)。要求: (1) 將AH中的數(shù)轉(zhuǎn)換成二進(jìn)制數(shù)。 (2) 求AH與AL中數(shù)的和,將結(jié)果轉(zhuǎn)換成ASCII碼,然后在屏幕上顯示出來。 【解】(1) 將AH中的數(shù)轉(zhuǎn)換成二進(jìn)制數(shù),結(jié)果存于DX中。程序代碼如下:CODE SEGMENT;代碼段開始ASSUMECS:CODE
23、START:MOV BX,AX;保存AX中的數(shù)據(jù)AND AH,0FH;千位置0MOV AL,AHMUL 100MOV DX,AX;百位結(jié)果存于DX中MOV AH,BHMOV CL,4;移位次數(shù)SHR AH,CL;千位移到低4位MOV AL,AHMUL 1000ADD AX,DXMOV DX,AX;百位加千位結(jié)果存于DX中MOV AH,4CHINT 21H;返回DOSCODE ENDS;代碼段結(jié)束END START;源程序結(jié)束(2) 求AH與AL中數(shù)的和,將結(jié)果轉(zhuǎn)換成ASCII碼,然后在屏幕上顯示出來。程序代碼如下:CODE SEGMENT;代碼段開始ASSUMECS:CODESTART:MOV
24、 BX,AX;保存AX中的數(shù)據(jù)MOV CL,4;移位次數(shù)SHR AH,CL;千位移到AH低4位ADD AH,30H;轉(zhuǎn)換成ASCII碼MOV DL,AHMOV AH,2INT 21H;調(diào)用2號系統(tǒng)功能,輸出單字符MOV AH,BHAND AH,0FH;取低4位ADD AH,30H;轉(zhuǎn)換成ASCII碼MOV DL,AHMOV AH,2INT 21H;調(diào)用2號系統(tǒng)功能,輸出單字符MOV AL,BLMOV CL,4;移位次數(shù)SHR AL,CL;十位移到低4位ADD AL,30H;轉(zhuǎn)換成ASCII碼MOV DL,ALMOV AH,2INT 21H;調(diào)用2號系統(tǒng)功能,輸出單字符MOV AL,BLAND
25、AL,0FH;取低4位ADD AL,30H;轉(zhuǎn)換成ASCII碼MOV DL,ALMOV AH,2INT 21H;調(diào)用2號系統(tǒng)功能,輸出單字符MOV AH,4CHINT 21H;返回DOSCODE ENDS;代碼段結(jié)束END START;源程序結(jié)束19. 已知從BUF單元開始存放著10個(gè)8位無符號數(shù),要求編寫匯編語言程序?qū)⑦@10個(gè)數(shù)去掉一個(gè)最大的,再去掉一個(gè)最小的,將其余的數(shù)的算術(shù)平均值計(jì)算出來并存于AVERG單字節(jié)單元?!窘狻孔⒁猓?0個(gè)8位無符號數(shù)的累加和有可能超過8位,需要16位的寄存器存儲。寄存器分配:DL:最小值;DH:最大值;CX:循環(huán)次數(shù);AX:累加和。本題的思路:找出最小值,暫時(shí)
26、存于DL,找出最大值,暫時(shí)存于DH,求10個(gè)數(shù)的和,再減去最小值和最大值,求8個(gè)數(shù)的平均值。程序代碼如下:DATA SEGMENT;數(shù)據(jù)段開始BUFDB23H,26H,44H,98H,32H,72H,39H,62H,75H,48HAVERG DB?DATA ENDS;數(shù)據(jù)段結(jié)束CODE SEGMENT;代碼段開始ASSUMECS:CODE,DS:DATASTART:MOV AX,DATAMOV DS,AX;裝填數(shù)據(jù)段LEA BX,BUF ;傳送變量的位置XOR AX,AXMOV CX,9MOV DL,BXMOV DH,BX MOV AL,BXLP1:INC BXCMP DL,BX;if DL&
27、gt;BX, then DLBXJBE CONT1;if DL<BX, 轉(zhuǎn)移MOV DL,BXCONT1:CMP DH,BX;if DH<BX, then DHBXJAE CONT2;if DL>BX, 轉(zhuǎn)移MOV DX,BXCONT2:ADD AL,BXADC AH,0LOOP LP1SUB AL,DLSBB AH,0SUB AL,DHSBB AH,0MOV BL,8DIV BL;平均值在AL中MOV AVERG,ALMOV AH,4CHINT 21H;返回DOSCODE ENDS;代碼段結(jié)束END START;源程序結(jié)束20. 編程:(1) 鍵入某班學(xué)生(30人)的計(jì)算機(jī)
28、考試成績。成績按學(xué)號(130)排放在SCORE數(shù)據(jù)區(qū)中。(2) 按考分排序(降序),列出相應(yīng)學(xué)號到ORDER數(shù)據(jù)區(qū)中。(3) 在屏幕上顯示前三名學(xué)生及成績?!窘狻砍绦虼a如下:DATA SEGMENT;數(shù)據(jù)段開始SCOREDB30 DUP(?);存儲按學(xué)號排序的成績ORDER DB30 DUP(?);按成績排序的學(xué)號BUFF DB30 DUP(?) ; 暫存降序排序的成績DATA ENDS;數(shù)據(jù)段結(jié)束CODE SEGMENT;代碼段開始ASSUMECS:CODE,DS:DATASTART:MOV AX,DATAMOV DS,AX;裝填數(shù)據(jù)段LEA BX,ORDER ;傳送變量的位置MOV CX
29、,30MOV AL,1LP1: MOV BX,ALINC BXINC ALLOOP LP1;存儲學(xué)號初始值;以下按位接收鍵盤鍵入的成績,成績以回車符0DH間隔LEA BX,SCORE ;傳送變量的位置XOR AL,ALXOR DL,DLMOV CX,30INPUT:MOV AH,1INT 21H;等待鍵盤輸入,ASCII碼送AL寄存器CMP AL,0110000BJB NEXT1;輸入的不是數(shù)字,有可能是回車符CMP AL,0111001BJA STOP;輸入的不是數(shù)字,也不是回車符,結(jié)束程序SUB AL,30HMOV DH,10XCHG AL,DLMUL DHADD DL,AL;暫存輸入的數(shù)
30、字JMP INPUTNEXT1:CMP AL,0DHJNE STOP;輸入的不是回車符,也不是數(shù)字,結(jié)束程序MOV BX,DL;是回車符,成績存入存儲區(qū)INC BXXOR DL,DL;DL,準(zhǔn)備轉(zhuǎn)換下一個(gè)輸入的數(shù)據(jù)LOOP INPUT;以下成績存入暫存區(qū)LEA BX,SCORE ;傳送數(shù)據(jù)表首位置LEA SI,BUFF;SI暫存區(qū)首位置MOV CX,30LP2: MOV AL,BXMOV SI,ALINC BXINC SILOOP LP2;以下用冒泡法排序MOV CH,30;CH數(shù)據(jù)長度DEC CH;CH外循環(huán)次數(shù)LOP0:LEA SI,BUFF;SI數(shù)據(jù)表首位置(成績)LEA BX,ORDE
31、R;BX數(shù)據(jù)表首位置(學(xué)號)MOV CL,CH;CL內(nèi)循環(huán)(比較)次數(shù)XOR DL,DL;交換標(biāo)志DL0LOP1: MOV AL,SICMP AL,SI+1;比較相鄰兩個(gè)數(shù)JGE NEXT;順序正確(小數(shù)在后),轉(zhuǎn)NEXTXCHG AL,SI+1MOV SI,AL ;順序不對(大數(shù)在后),交換兩數(shù)MOV AL,BXXCHG AL,BX+1MOV BX,AL ;交換學(xué)號OR DL,01H;交換標(biāo)志BL1NEXT:INC SI;調(diào)整位置指針I(yè)NC BXDEC CLJNZ LOP1;內(nèi)循環(huán)未完,轉(zhuǎn)LOP1繼續(xù)內(nèi)循環(huán)AND DL,DLJZ STOP;交換標(biāo)志為0,說明順序排好,轉(zhuǎn)STOPDEC CHJ
32、NZ LOP0;外循環(huán)未完,轉(zhuǎn)LOP0繼續(xù)外循環(huán);以下顯示前三名學(xué)號和成績LEA BX,ORDERMOV CX,3LP33:CALL DISPLAYINC BXLOOP LP33MOV DL,0001101BMOV AH,2INT 21H;顯示回車MOV DL,0001010BMOV AH,2INT 21H;顯示換行LEA BX,BUFFMOV CX,3LP43:CALL DISPLAYINC BXLOOP LP43MOV DL,0001101BMOV AH,2INT 21H;顯示回車MOV DL,0001010BMOV AH,2INT 21H;顯示換行JMP STOPDISPLAYPROC;
33、定義顯示子程序XOR AX,AXMOV AL,BXMOV DL,0AHDIV DLADD AL,30HMOV DL,ALMOV AH,2INT 21H;顯示十位數(shù)XOR AX,AXMOV AL,BXMOV DL,0AHDIV DLADD AH,30HMOV DL,AHMOV AH,2INT 21H;顯示個(gè)位數(shù)MOV DL,0100000BMOV AH,2INT 21H;顯示空格RETDISPLAYENDP;定義顯示子程序結(jié)束STOP:MOV AH,4CHINT 21H;返回DOSCODE ENDS;代碼段結(jié)束END START;源程序結(jié)束21. 從TABLE字節(jié)單元開始存有100個(gè)無符號數(shù),試
34、編程把數(shù)組中出現(xiàn)次數(shù)最多的數(shù)存入CH中,其出現(xiàn)次數(shù)存入CL中?!窘狻砍绦虼a如下:DATA SEGMENT;數(shù)據(jù)段開始TABLEDB100 DUP(?)DATA ENDS;數(shù)據(jù)段結(jié)束CODE SEGMENT;代碼段開始ASSUMECS:CODE,DS:DATASTART:MOV AX,DATAMOV DS,AX;裝填數(shù)據(jù)段LEA BX,TABLE ;傳送變量的位置XOR AX,AXXOR DX,DXMOV CX,99LP2:PUSH BXPUSH CXMOV AH,BXMOV AL,1LP1:INC BXCMP AH,BXJNE NEXT1;AH !BX,轉(zhuǎn)移INC ALNEXT1:LOOP
35、LP1POP CXPOP BXINC BXCMP AL,DLJB NEXT2;AL<DL,本次計(jì)數(shù)的數(shù)字不是最多的MOV DL,ALMOV DH,AHNEXT2:LOOP LP2MOV CX,DXMOV AH,4CHINT 21H;返回DOSCODE ENDS;代碼段結(jié)束END START;源程序結(jié)束22. 有兩個(gè)長度不等的字符串,分別存于STRN1和STRN2單元開始的存儲區(qū),字串長度分別存放于LS1和LS2字節(jié)單元,要求編程將短串接在長串之后,并將連接后的串長度存于LS1和LS1+1單元。【解】設(shè)兩串連接后最大長度為256個(gè)字符,連接后的字符串存于STRN3單元開始的存儲區(qū)。程序代碼
36、如下:DATA SEGMENT;數(shù)據(jù)段開始STRN1DBi swear by the moon and the stars in the sky.STRN2DBand i swear like the shadow thats by your side. STRN3DB256 DUP(?)LS1 DB 45LS2 DB 48DATA ENDS;數(shù)據(jù)段結(jié)束CODE SEGMENT;代碼段開始ASSUMECS:CODE,DS:DATASTART:MOV AX,DATAMOV DS,AX;裝填數(shù)據(jù)段XOR AX,AXXOR BX,BXMOV AL,LS1MOV BL,LS2CMP AL,BLJA L
37、INK2;AL>BL,大數(shù)在LS1中,轉(zhuǎn)移到LINK2 LINK1:LEA BX,STRN2 ;傳送變量的位置LEA SI,STRN3 ;傳送變量的位置XOR CX,CX MOV CL,LS2LOP1:MOV AL,BXMOV SI,ALINC BXINC SILOOP LOP1LEA BX,STRN1 ;傳送變量的位置MOV CL,LS1LOP2:MOV AL,BXMOV SI,ALINC BXINC SILOOP LOP2JMP NEXTLINK2:LEA BX,STRN1 ;傳送變量的位置LEA SI,STRN3 ;傳送變量的位置XOR CX,CX MOV CL,LS1LOP3:M
38、OV AL,BXMOV SI,ALINC BXINC SILOOP LOP3LEA BX,STRN2 ;傳送變量的位置MOV CL,LS2LOP4:MOV AL,BXMOV SI,ALINC BXINC SILOOP LOP4NEXT:XOR AX,AXXOR BX,BXMOV AL,LS1MOV BL,LS2ADD AX,BXLEA BX,LS1MOV BX,AX;將連接后的串長度存于LS1和LS1+1單元。STOP:MOV AH,4CHINT 21H;返回DOSCODE ENDS;代碼段結(jié)束END START;源程序結(jié)束23. 從BUF字節(jié)單元開始存有按增序排好順序的一個(gè)帶符號數(shù)組,數(shù)組長
39、度在LEN字節(jié)單元。在POSI字節(jié)單元存有一個(gè)正數(shù),要求將其按順序插入到數(shù)組中,并修改數(shù)組長度?!窘狻砍绦虼a如下:DATA SEGMENT;數(shù)據(jù)段開始BUFDB33,29,6,4, 4,21,33, 34, 34,49LEN DB ?POSI DB 32DATA ENDS;數(shù)據(jù)段結(jié)束CODE SEGMENT;代碼段開始ASSUMECS:CODE,DS:DATASTART:MOV AX,DATAMOV DS,AX;裝填數(shù)據(jù)段LEA BX,BUF ;傳送變量的位置XOR CX,CXMOV CL,LENMOV AH,POSILP1: MOV AL,BXCMP AH,ALJL NEXT;AH <
40、; AL,轉(zhuǎn)移INC BXLOOP LP1MOV BX,AH;新數(shù)據(jù)插入到數(shù)組尾JMP STOPNEXT:ADD BX,CX;指針移向數(shù)組尾LP2: MOV AL,BXMOV BX1,ALDEC BXLOOP LP2MOV BX,AH;插入新數(shù)據(jù)STOP:MOV AL,LENINC ALMOV LEN,AL;修改數(shù)組長度MOV AH,4CHINT 21H;返回DOSCODE ENDS;代碼段結(jié)束END START;源程序結(jié)束24. 從DAT單元開始存有20個(gè)8位帶符號數(shù)構(gòu)成的數(shù)組,要求編程去掉數(shù)組中的負(fù)奇數(shù),并生成一個(gè)新的數(shù)組存于從RES字節(jié)單元開始的存儲區(qū)中。 【解】程序代碼如下:DATA
41、SEGMENT;數(shù)據(jù)段開始DATDB29,34,4,33,4,6,49,33,34,21,67,83,17,12,81,34,85,32,1,91RES DB 20 DUP(?)DATA ENDS;數(shù)據(jù)段結(jié)束CODE SEGMENT;代碼段開始ASSUMECS:CODE,DS:DATASTART:MOV AX,DATAMOV DS,AX;裝填數(shù)據(jù)段LEA BX,DAT ;傳送變量的位置LEA SI,RESMOV CX,20LP1: MOV AL,BXINC BXAND AL,81HCMP AL,81HJZ NEXT;是負(fù)奇數(shù),轉(zhuǎn)移MOV AL,BX1MOV SI,ALINC SINEXT:LO
42、OP LP1MOV AH,4CHINT 21H;返回DOSCODE ENDS;代碼段結(jié)束END START;源程序結(jié)束25. 已知某數(shù)組ARRAY中有50個(gè)8位帶符號數(shù),試用匯編語言編寫一個(gè)完整的程序統(tǒng)計(jì)該數(shù)組中相鄰兩數(shù)之間符號變化(正數(shù)變負(fù)數(shù)或負(fù)數(shù)變正數(shù))的次數(shù),并將其存于NUM存儲單元?!窘狻砍绦虼a如下:DATA SEGMENT;數(shù)據(jù)段開始ARRAYDB20,34,4,33,4,6,49,33,34,21,67,83,17,12,81,34,85,32,1,91,15,73,95,14,28,16,41,34,9,54,2,2,4,67,33,51,21,4,3,10,67,83,20,
43、17,81,34,85,32,1,90NUM DB?DATA ENDS;數(shù)據(jù)段結(jié)束CODE SEGMENT;代碼段開始ASSUMECS:CODE,DS:DATASTART:MOV AX,DATAMOV DS,AX;裝填數(shù)據(jù)段LEA BX,ARRAY ;傳送變量的位置XOR DL,DLMOV CX,49LP1: MOV AL,BXMOV AH,BX+1 AND AL,80H;留符號位,屏蔽其它位AND AH,80H;留符號位,屏蔽其它位CMP AH,ALJE CONTINC DLCONT: INC BXLOOP LP1MOV NUM,DLMOV AH,4CHINT 21H;返回DOSCODE E
44、NDS;代碼段結(jié)束END START;源程序結(jié)束26. 編寫完整的匯編語言程序完成如下功能:首先在屏幕上顯示提示行“Input number key, CR or Space return”,顯示后回車換行等待用戶輸入。若用戶輸入的數(shù)字N在19之間,則響鈴N次(每次要稍延時(shí)以作間隔);若鍵入的是0或非數(shù)字字符則不響鈴;若鍵入的是回車或空格,則直接返回DOS?!窘狻砍绦虼a如下:DATA SEGMENT;數(shù)據(jù)段開始STR1 DBInput number key, CR or Space return$DATA ENDS;數(shù)據(jù)段結(jié)束CODE SEGMENT;代碼段開始ASSUMECS:CODE,DS:DATASTART:MOV AX,DATAMOV DS,AX;裝填數(shù)據(jù)段LEA DX,STR1 ;傳送變量的位置MOV AH,9INT 21H;調(diào)用9號系統(tǒng)功能,顯示內(nèi)存緩沖區(qū)中的字符串;(以“$”為結(jié)束標(biāo)志)MO
溫馨提示
- 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)方式做保護(hù)處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 農(nóng)村別墅 施工合同范例
- 交通施工安全合同范例
- 精-品解析:廣東省深圳市南山區(qū)2023-2024學(xué)年高一上學(xué)期期末質(zhì)量監(jiān)測數(shù)學(xué)試題(解析版)
- 汕頭大學(xué)《游戲策劃與管理》2023-2024學(xué)年第一學(xué)期期末試卷
- 2024年電子商務(wù)平臺與商家間的獨(dú)家銷售合同
- 融資租賃抵押合同范例
- 東海工地合同范例
- 2024至2030年室內(nèi)帶燈感應(yīng)器項(xiàng)目投資價(jià)值分析報(bào)告
- 2024至2030年定影刮板項(xiàng)目投資價(jià)值分析報(bào)告
- 陜西藝術(shù)職業(yè)學(xué)院《機(jī)器人工程專業(yè)英語》2023-2024學(xué)年第一學(xué)期期末試卷
- 中東及非洲太陽能儲能電池行業(yè)現(xiàn)狀及發(fā)展機(jī)遇分析2024-2030
- 員工賠償金保密協(xié)議書
- 新學(xué)期科學(xué)開學(xué)第一課課件
- 煙酒店合作經(jīng)營合同
- 資金托盤協(xié)議書
- 倉庫管理教學(xué)總結(jié)與反思
- MOOC 中國電影經(jīng)典影片鑒賞-北京師范大學(xué) 中國大學(xué)慕課答案
- MOOC 英漢語言對比-華中科技大學(xué) 中國大學(xué)慕課答案
- 中秋國慶慰問品采購?fù)稑?biāo)方案
- 《金剛石、石墨和C60》第一課時(shí)名師課件
- 兩癌篩查年度工作計(jì)劃實(shí)施方案
評論
0/150
提交評論