版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、第5章 汇编语言程序设计教材习题解答1. 下列语句在存储器中分别为变量分配多少字节?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. 根据下列数据定义,写出各条指令执行后的结果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. 下面定义的是一个数据段,请图示它们在存储器中的存放形式。DATA SEGMENTA DB 1,2,3,4B DB ABCDC DB 4 DUP(0)N EQU 12X DW 33,0302HY DD 0ABCDHDATA ENDS【解】注:括号中为段内偏移位置(0000H) A1(0008H) C003H20(0011H) Y
3、0CDH300ABH4000H(0004H) BA(000CH) N1200HB(000DH) X17H.C00HD02H4. 试定义一个完整的数据段,首先将10个压缩的BCD码29存放在ARRAY变量字节单元,紧接着把-28,6,45,39,3存放在ALPHA数组变量的字单元中,最后从字节变量BUFFER单元开始预留100个空单元备用。【解】DATA SEGMENTARRAY DB 10 DUP(29H)ALPHA DW -28,6,45,39,3 BUFFER DB 100 DUP(?)DATA ENDS5. 请定义一个结构,描述一个学生的简况。该结构应含有以下内容:姓名、年龄、性别、籍贯
4、、民族、入学成绩、名次。说明如何定义结构变量和引用结构变量。【解】STUDENTSTRUCNAMEDW 5 DUP(?) AGE DB (?)SEX DW (?)HOMEPLADW 10 DUP(?)RACE DW 5 DUP(?)GRADE DB (?)SORT DB (?)STUDENT ENDS定义结构变量的格式:结构变量名 结构名 字段值表例如:STU1 STUDENT 1,ZHANG引用结构变量的格式:结构变量名结构字段名,例如:STU1.NAME6. 实现满足下面要求的宏定义。(1) 任意两个单元中的数据相加存于第三个单元中。(2) 任意8位寄存器中的数据转换为ASCII码并在屏幕
5、上显示。【解】(1) 宏定义的代码段如下:ADDMMACROM1,M2,M3MOV AX,M1ADDAX,M2MOVM3,AXENDM(2) 设8位寄存器存储的是无符号数,最高位是百位。宏定义的代码段如下:ADDMMACRO Y;形式参数Y代表一个8位寄存器MOV AL,Y XOR AH,AHMOV DL,100DIV DLADD AL,30HMOV DL,ALMOV AL,AH;存余数MOV AH,2INT 21H;显示百位数XOR AH,AHMOV DL,10DIV DLADD AL,30HMOV DL,ALMOV AL,AH;存余数MOV AH,2INT 21H;显示十位数ADD AL,
6、30HMOV DL,ALMOV AH,2INT 21H;显示个位数ENDM7. 对下面程序进行注释,并说明其功能。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;数据段开始ADB123ABCDATA ENDS;数据段结束CODE SE
7、GMENT;代码段开始ASSUME CS:CODE,DS:DATASTART:MOV AX,DATAMOV DS,AX;装填数据段LEA BX,A;传送变量的位置MOV CX,6MOV AH,2LP: MOV AL,BXXCHG AL,DLINC BXINT 21H ;系统功能调用,功能号:2 ,;将字符1、2、3、“A”、“B”、“C”送屏幕显示LOOP LP;CX6,循环6次MOV AH,4CHINT 21H;返回DOSCODE ENDS;代码段结束END START;源程序结束程序的功能:显示从A开始的6个字节单元中的字符。8. 编程将CX、DX作为双字联合右移四位(设CX为高16位),
8、最高4位送入全1。【解】程序代码如下: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;代码段结束END START;源程序结束9. 编程把从A单元开始存放的3个单字节无符号数按递增顺序排序后存回原处。【解】程序代码如下:DATA SEGMENT;数据段开始ADB3 DUP(?)DATA ENDS;数据段结束CODE SEGMENT;代码段开始ASSUME CS:CODE,
9、DS:DATASTART:MOV AX,DATAMOV DS,AX;装填数据段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;代码段结束END START;源程序结束10. 试编写一段程序比较从ARRAY开始存放的3个16位有符号数。根据比较结果置FLAG标志。(1) 如果3个数都不相等,置FLAG为0。(2) 如果3个数中有2个数相等,置FLAG为1。(3) 如果3个数都相等,置FLAG为2。【解】程序代码如下:DATA SEGMENT;数据段开始ARRAYDW3 DUP(?)FLAG DB ?DATA ENDS;数据段结束CODE SEGMENT;代码段开始ASSUME CS:CODE,DS:DATASTART:MOV AX,DATAMOV DS,AX;装填数据段L
11、EA BX,ARRAY;传送变量的位置MOV AX,BXCMP AX,BX2JE EQU1; BXBX2,执行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、码段结束END START;源程序结束11. 分析下列程序,指出运行结果。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) 程序执行后,SUM单元的内容是_。【解】(1) 该程序完成的功能是计算020的偶数和。(2) 程序执
13、行后,SUM单元的内容是110。12. 从ARRAY开始的单元中存有10个16位无符号数,试编一完整程序找出其中最小数并存入MIN单元。【解】程序代码如下:DATA SEGMENT;数据段开始ARRAYDW0F454H,4540H,0D214H,8354H,8210H, 0A673H,5656H,0021H,0567H,4228HMIN DW ?DATA ENDS;数据段结束CODE SEGMENT;代码段开始ASSUME CS:CODE,DS:DATASTART:MOV AX,DATAMOV DS,AX;装填数据段LEA BX,ARRAY;传送变量的位置MOV AX,BXMOV CX,9LP
14、1: INC BXINC BXCMP AX,BXJB CONT1;AX<BX,转移MOV AX,BX ;AX>=BX,AXBXCONT1:LOOP LP1MOV MIN,AXMOV AH,4CHINT 21H;返回DOSCODE ENDS;代码段结束END START;源程序结束13. 从DAT开始的数据区中放有100个8位的无符号数,编程统计其中奇数的个数,将结果存入RESULT单元。【解】程序代码如下:DATA SEGMENT;数据段开始DATDB26,45,44,32,90,2,1,81,2,120,5RESULT DB ?DATA ENDS;数据段结束CODE SEGMEN
15、T;代码段开始ASSUME CS:CODE,DS:DATASTART:MOV AX,DATAMOV DS,AX;装填数据段LEA BX,DAT;传送变量的位置XOR AX,AXXOR DX,DXMOV DL,2MOV CX,100LP1:MOV AL,BXDIV DL;余数在AH中CMP AH,0JE CONT1INC DH;DH用作计数器CONT1:INC BX LOOP LP1MOV RESULT,DHMOV AH,4CHINT 21H;返回DOSCODE ENDS;代码段结束END START;源程序结束14. 利用DOS系统功能调用,将键盘输入的小写字母转换成大写字母输出显示,直到输入
16、“$”字符时停止输出。【解】调用1号系统功能,键入的字符送AL寄存器,并送屏幕显示输出。调用2号系统功能,将DL寄存器中的内容送屏幕显示输出。程序代码如下:CODE SEGMENT;代码段开始ASSUME CS:CODESTART:XOR AX,AXINPU:MOV AH,1INT 21H;键盘输入单字符送ALMOV BL,$CMP AL,BLJE EXTSUB AL,20H;转换成大写字母MOV DL,ALMOV AH,2INT 21H;将DL中的字符送屏幕显示JMP INPUEXT:MOV AH,4CHINT 21H;返回DOSCODE ENDS;代码段结束END START;源程序结束1
17、5. 建立两个过程:一个过程将16进制数变换成ASCII码,一个过程将ASCII码字符在屏幕上显示输出。【解】程序代码如下:DATA SEGMENT;数据段开始LIST DB?;存储一个十六进制数(1位)ASC DB?;存储转换的ASCII码DATA ENDS;数据段结束CODE SEGMENT;代码段开始ASSUME CS:CODE,DS:DATA,ES:DATASTART:MOV AX,DATAMOV DS,AX;装填数据段CALL CHANGECALL OUTPTRMOV AH,4CHINT 21H;返回DOSCHANGE PROCMOV AL,LISTCMP AL,9JA NEXT1;
18、AL>9,转移OR AL,30HJMP NEXT2NEXT1:ADD AL,37HNEXT2:MOV ASC,ALRETCHANGE ENDPOUTPTR PROCMOV DL,ASCMOV AH,2INT 21H RETOUTPTR ENDPCODE ENDS;代码段结束END START;源程序结束16. 要求编写程序比较两个最大长度为100个字符的字符串ALFA1和ALFA2是否相等,若相等则输出显示“All Right!”,否则输出显示“Error!”。【解】完成输出显示功能时,调用9号系统功能,功能是将指定的内存缓冲区中的字符串在屏幕上显示出来,缓冲区的字符串以“$”为结束标志
19、。LEN指定的内存中存储两字符串中长串的长度,否则,即使两串相等,由于字符串后面的随机字符,将影响判断结果。程序代码如下:DATA SEGMENT;数据段开始ALFA1DB100 DUP(?)ALFA2 DB100 DUP(?)RESULT1DB All Right!$RESULT2DB Error!$LEN DB 100;字符串长度DATA ENDS;数据段结束CODE SEGMENT;代码段开始ASSUME CS:CODE,DS:DATA,ES:DATASTART:MOV AX,DATAMOV DS,AX;装填数据段MOV ES,AX;装填附加段LEA BX,ALFA1;传送源串的位置MO
20、V SI,BXLEA BX,ALFA2;传送目的串的位置MOV DI,BXCLD;清方向标志,使正向传送XOR CX,CXMOV CL,LENREPNZ CMPSBJZ EQQ;若ZF1,说明两串相等,转EQQLEA DX,RESULT2;输出显示“Error!”JMP OUT1EQQ:LEA DX,RESULT1;输出显示“All Right!”OUT1: MOV AH,9INT 21HSTOP:MOV AH,4CHINT 21H;返回DOSCODE ENDS;代码段结束END START;源程序结束17. 有一个最大长度为80个字符的字符串STRING,试编写程序找出第一个空格的位置(用0
21、0H4FH表示),并存入CL中。若该串无空格,则将0FFH存入CL中。【解】程序代码如下:DATA SEGMENT;数据段开始STRINGDB80 DUP(?)LEN DB 80DATA ENDS;数据段结束CODE SEGMENT;代码段开始ASSUMECS:CODE,DS:DATA,ES:DATASTART:MOV AX,DATAMOV DS,AX;装填数据段MOV ES,AX;装填附加段MOV AL, ;要查找的关键字(空格)LEA BX,STRING ;传送串的位置MOV DI,BXXOR CX,CXMOV CL,LEN CLD;清方向标志,使正向传送REPNZ SCASB;搜索关键字
22、JZ FOUND;若ZF1,说明找到,转FOUNDMOV CL,0FFHJMP STOPFOUND:MOV AL,LENSUB AL,CL;CL中是剩余的字符数MOV CL,ALSTOP:MOV AH,4CHINT 21H;返回DOSCODE ENDS;代码段结束END START;源程序结束18. 在AX中存放着压缩BCD码的十进制数。要求: (1) 将AH中的数转换成二进制数。 (2) 求AH与AL中数的和,将结果转换成ASCII码,然后在屏幕上显示出来。 【解】(1) 将AH中的数转换成二进制数,结果存于DX中。程序代码如下:CODE SEGMENT;代码段开始ASSUMECS:CODE
23、START:MOV BX,AX;保存AX中的数据AND AH,0FH;千位置0MOV AL,AHMUL 100MOV DX,AX;百位结果存于DX中MOV AH,BHMOV CL,4;移位次数SHR AH,CL;千位移到低4位MOV AL,AHMUL 1000ADD AX,DXMOV DX,AX;百位加千位结果存于DX中MOV AH,4CHINT 21H;返回DOSCODE ENDS;代码段结束END START;源程序结束(2) 求AH与AL中数的和,将结果转换成ASCII码,然后在屏幕上显示出来。程序代码如下:CODE SEGMENT;代码段开始ASSUMECS:CODESTART:MOV
24、 BX,AX;保存AX中的数据MOV CL,4;移位次数SHR AH,CL;千位移到AH低4位ADD AH,30H;转换成ASCII码MOV DL,AHMOV AH,2INT 21H;调用2号系统功能,输出单字符MOV AH,BHAND AH,0FH;取低4位ADD AH,30H;转换成ASCII码MOV DL,AHMOV AH,2INT 21H;调用2号系统功能,输出单字符MOV AL,BLMOV CL,4;移位次数SHR AL,CL;十位移到低4位ADD AL,30H;转换成ASCII码MOV DL,ALMOV AH,2INT 21H;调用2号系统功能,输出单字符MOV AL,BLAND
25、AL,0FH;取低4位ADD AL,30H;转换成ASCII码MOV DL,ALMOV AH,2INT 21H;调用2号系统功能,输出单字符MOV AH,4CHINT 21H;返回DOSCODE ENDS;代码段结束END START;源程序结束19. 已知从BUF单元开始存放着10个8位无符号数,要求编写汇编语言程序将这10个数去掉一个最大的,再去掉一个最小的,将其余的数的算术平均值计算出来并存于AVERG单字节单元。【解】注意:10个8位无符号数的累加和有可能超过8位,需要16位的寄存器存储。寄存器分配:DL:最小值;DH:最大值;CX:循环次数;AX:累加和。本题的思路:找出最小值,暂时
26、存于DL,找出最大值,暂时存于DH,求10个数的和,再减去最小值和最大值,求8个数的平均值。程序代码如下:DATA SEGMENT;数据段开始BUFDB23H,26H,44H,98H,32H,72H,39H,62H,75H,48HAVERG DB?DATA ENDS;数据段结束CODE SEGMENT;代码段开始ASSUMECS:CODE,DS:DATASTART:MOV AX,DATAMOV DS,AX;装填数据段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, 转移MOV DL,BXCONT1:CMP DH,BX;if DH<BX, then DHBXJAE CONT2;if DL>BX, 转移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;代码段结束END START;源程序结束20. 编程:(1) 键入某班学生(30人)的计算机
28、考试成绩。成绩按学号(130)排放在SCORE数据区中。(2) 按考分排序(降序),列出相应学号到ORDER数据区中。(3) 在屏幕上显示前三名学生及成绩。【解】程序代码如下:DATA SEGMENT;数据段开始SCOREDB30 DUP(?);存储按学号排序的成绩ORDER DB30 DUP(?);按成绩排序的学号BUFF DB30 DUP(?) ; 暂存降序排序的成绩DATA ENDS;数据段结束CODE SEGMENT;代码段开始ASSUMECS:CODE,DS:DATASTART:MOV AX,DATAMOV DS,AX;装填数据段LEA BX,ORDER ;传送变量的位置MOV CX
29、,30MOV AL,1LP1: MOV BX,ALINC BXINC ALLOOP LP1;存储学号初始值;以下按位接收键盘键入的成绩,成绩以回车符0DH间隔LEA BX,SCORE ;传送变量的位置XOR AL,ALXOR DL,DLMOV CX,30INPUT:MOV AH,1INT 21H;等待键盘输入,ASCII码送AL寄存器CMP AL,0110000BJB NEXT1;输入的不是数字,有可能是回车符CMP AL,0111001BJA STOP;输入的不是数字,也不是回车符,结束程序SUB AL,30HMOV DH,10XCHG AL,DLMUL DHADD DL,AL;暂存输入的数
30、字JMP INPUTNEXT1:CMP AL,0DHJNE STOP;输入的不是回车符,也不是数字,结束程序MOV BX,DL;是回车符,成绩存入存储区INC BXXOR DL,DL;DL,准备转换下一个输入的数据LOOP INPUT;以下成绩存入暂存区LEA BX,SCORE ;传送数据表首位置LEA SI,BUFF;SI暂存区首位置MOV CX,30LP2: MOV AL,BXMOV SI,ALINC BXINC SILOOP LP2;以下用冒泡法排序MOV CH,30;CH数据长度DEC CH;CH外循环次数LOP0:LEA SI,BUFF;SI数据表首位置(成绩)LEA BX,ORDE
31、R;BX数据表首位置(学号)MOV CL,CH;CL内循环(比较)次数XOR DL,DL;交换标志DL0LOP1: MOV AL,SICMP AL,SI+1;比较相邻两个数JGE NEXT;顺序正确(小数在后),转NEXTXCHG AL,SI+1MOV SI,AL ;顺序不对(大数在后),交换两数MOV AL,BXXCHG AL,BX+1MOV BX,AL ;交换学号OR DL,01H;交换标志BL1NEXT:INC SI;调整位置指针INC BXDEC CLJNZ LOP1;内循环未完,转LOP1继续内循环AND DL,DLJZ STOP;交换标志为0,说明顺序排好,转STOPDEC CHJ
32、NZ LOP0;外循环未完,转LOP0继续外循环;以下显示前三名学号和成绩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;显示十位数XOR AX,AXMOV AL,BXMOV DL,0AHDIV DLADD AH,30HMOV DL,AHMOV AH,2INT 21H;显示个位数MOV DL,0100000BMOV AH,2INT 21H;显示空格RETDISPLAYENDP;定义显示子程序结束STOP:MOV AH,4CHINT 21H;返回DOSCODE ENDS;代码段结束END START;源程序结束21. 从TABLE字节单元开始存有100个无符号数,试
34、编程把数组中出现次数最多的数存入CH中,其出现次数存入CL中。【解】程序代码如下:DATA SEGMENT;数据段开始TABLEDB100 DUP(?)DATA ENDS;数据段结束CODE SEGMENT;代码段开始ASSUMECS:CODE,DS:DATASTART:MOV AX,DATAMOV DS,AX;装填数据段LEA BX,TABLE ;传送变量的位置XOR AX,AXXOR DX,DXMOV CX,99LP2:PUSH BXPUSH CXMOV AH,BXMOV AL,1LP1:INC BXCMP AH,BXJNE NEXT1;AH !BX,转移INC ALNEXT1:LOOP
35、LP1POP CXPOP BXINC BXCMP AL,DLJB NEXT2;AL<DL,本次计数的数字不是最多的MOV DL,ALMOV DH,AHNEXT2:LOOP LP2MOV CX,DXMOV AH,4CHINT 21H;返回DOSCODE ENDS;代码段结束END START;源程序结束22. 有两个长度不等的字符串,分别存于STRN1和STRN2单元开始的存储区,字串长度分别存放于LS1和LS2字节单元,要求编程将短串接在长串之后,并将连接后的串长度存于LS1和LS1+1单元。【解】设两串连接后最大长度为256个字符,连接后的字符串存于STRN3单元开始的存储区。程序代码
36、如下:DATA SEGMENT;数据段开始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;数据段结束CODE SEGMENT;代码段开始ASSUMECS:CODE,DS:DATASTART:MOV AX,DATAMOV DS,AX;装填数据段XOR AX,AXXOR BX,BXMOV AL,LS1MOV BL,LS2CMP AL,BLJA L
37、INK2;AL>BL,大数在LS1中,转移到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;代码段结束END START;源程序结束23. 从BUF字节单元开始存有按增序排好顺序的一个带符号数组,数组长
39、度在LEN字节单元。在POSI字节单元存有一个正数,要求将其按顺序插入到数组中,并修改数组长度。【解】程序代码如下:DATA SEGMENT;数据段开始BUFDB33,29,6,4, 4,21,33, 34, 34,49LEN DB ?POSI DB 32DATA ENDS;数据段结束CODE SEGMENT;代码段开始ASSUMECS:CODE,DS:DATASTART:MOV AX,DATAMOV DS,AX;装填数据段LEA BX,BUF ;传送变量的位置XOR CX,CXMOV CL,LENMOV AH,POSILP1: MOV AL,BXCMP AH,ALJL NEXT;AH <
40、; AL,转移INC BXLOOP LP1MOV BX,AH;新数据插入到数组尾JMP STOPNEXT:ADD BX,CX;指针移向数组尾LP2: MOV AL,BXMOV BX1,ALDEC BXLOOP LP2MOV BX,AH;插入新数据STOP:MOV AL,LENINC ALMOV LEN,AL;修改数组长度MOV AH,4CHINT 21H;返回DOSCODE ENDS;代码段结束END START;源程序结束24. 从DAT单元开始存有20个8位带符号数构成的数组,要求编程去掉数组中的负奇数,并生成一个新的数组存于从RES字节单元开始的存储区中。 【解】程序代码如下:DATA
41、SEGMENT;数据段开始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;数据段结束CODE SEGMENT;代码段开始ASSUMECS:CODE,DS:DATASTART:MOV AX,DATAMOV DS,AX;装填数据段LEA BX,DAT ;传送变量的位置LEA SI,RESMOV CX,20LP1: MOV AL,BXINC BXAND AL,81HCMP AL,81HJZ NEXT;是负奇数,转移MOV AL,BX1MOV SI,ALINC SINEXT:LO
42、OP LP1MOV AH,4CHINT 21H;返回DOSCODE ENDS;代码段结束END START;源程序结束25. 已知某数组ARRAY中有50个8位带符号数,试用汇编语言编写一个完整的程序统计该数组中相邻两数之间符号变化(正数变负数或负数变正数)的次数,并将其存于NUM存储单元。【解】程序代码如下:DATA SEGMENT;数据段开始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;数据段结束CODE SEGMENT;代码段开始ASSUMECS:CODE,DS:DATASTART:MOV AX,DATAMOV DS,AX;装填数据段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;代码段结束END START;源程序结束26. 编写完整的汇编语言程序完成如下功能:首先在屏幕上显示提示行“Input number key, CR or Space return”,显示后回车换行等待用户输入。若用户输入的数字N在19之间,则响铃N次(每次要稍延时以作间隔);若键入的是0或非数字字符则不响铃;若键入的是回车或空格,则直接返回DOS。【解】程序代码如下:DATA SEGMENT;数据段开始STR1 DBInput number key, CR or Space return$DATA ENDS;数据段结束CODE SEGMENT;代码段开始ASSUMECS:CODE,DS:DATASTART:MOV AX,DATAMOV DS,AX;装填数据段LEA DX,STR1 ;传送变量的位置MOV AH,9INT 21H;调用9号系统功能,显示内存缓冲区中的字符串;(以“$”为结束标志)MO
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 2024年度企业并购合同标的及并购交易结构设计
- 2024年度船舶制造与维修分包合同
- 2024年度物流配送合同:柴油运输与仓储条款
- 2024版设备安装调试合同(标的:一条自动化生产线安装)
- 2024年度产品摄影与修图服务合同
- 2024年度房地产开发公司房屋销售合同
- 2024版钢管扣件行业安全生产标准化建设合同
- 2024版智能仓储管理系统服务合同
- 2024年度网络营销与推广合同(含SEO、SEM、社交媒体等)
- 2024年度风电场建设施工劳务分包合同
- 2024届川庆钻探工程限公司高校毕业生春季招聘10人高频500题难、易错点模拟试题附带答案详解
- 护理收费标准课件
- 人教版九年级物理全一册期末测试卷(附答案与解析)
- 期中测试卷(1-4单元)(试题)-2024-2025学年六年级上册数学
- 人教部编版小学语文六年上册《习作:有你真好》说课稿及教学反思共三篇
- 小学主题班会-小学生交通安全
- 《功能性食品开发与应用》课件-增强免疫力功能食品的开发与应用
- DL∕T 1882-2018 验电器用工频高压发生器
- 《经济法基础》全套教学课件
- 全屋定制柜子售后合同模板
- 2024-2030年中国养生行业市场深度调研及前景趋势与投资研究报告
评论
0/150
提交评论