汇编答案Word下载.docx
- 文档编号:18434724
- 上传时间:2022-12-16
- 格式:DOCX
- 页数:47
- 大小:30.81KB
汇编答案Word下载.docx
《汇编答案Word下载.docx》由会员分享,可在线阅读,更多相关《汇编答案Word下载.docx(47页珍藏版)》请在冰豆网上搜索。
程序如下:
D_SEGSEGMENT
AUGWLABELWORD
AUGENDDD99251
SUMDD?
D_SEGENDS;
E_SEGSEGMENT
ADDWLABELWORD
ADDENDDD-15962
E_SEGENDS;
以上定义附加段
C_SEGSEGMENT
C_SEG,DS:
D_SEG,ES:
E_SEG
PUSHDS;
MOVAX,D_SEG
MOVAX,E_SEG
MOVES,AX;
给ES赋值
MOVAX,AUGW;
以下6条指令进行加法计算
MOVBX,AUGW+2
ADDAX,ES:
ADDW
ADCBX,ES:
ADDW+2;
不考虑有符号数溢出
MOVWORDPTRSUM,AX
MOVWORDPTR[SUM+2],BX
C_SEGENDS;
5.1答:
程序段如下:
BEGIN:
MOVAH,1;
从键盘输入一个字符的DOS调用
INT21H
CMPAL,‘a’;
输入字符<
‘a’吗?
JBSTOP
CMPAL,‘z’;
输入字符>
‘z’吗?
JASTOP
SUBAL,20H;
转换为大写字母,用ANDAL,11011111B也可
MOVDL,AL;
显示一个字符的DOS调用
MOVAH,2
INT21H
JMPBEGIN
STOP:
RET
5.2答:
DECAL;
得到前导字符
准备显示三个字符
MOVCX,3
DISPLAY:
MOVAH,2;
INCDL
LOOPDISPLAY
5.15.3将AX寄存器中的16位数分成4组,每组4位,然后把这四组数分别放在AL、BL、CL和DL中。
DSEGSEGMENT
STOREDB4DUP(?
DSEGENDS
┇
MOVCL,4;
右移四次
MOVCH,4;
循环四次
LEABX,STORE
A10:
MOVDX,AX
ANDDX,0FH;
取AX的低四位
MOV[BX],DL;
低四位存入STORE中
INCBX
SHRAX,CL;
DECCH
JNZA10;
循环四次完了码?
B10:
MOVDL,STORE;
四组数分别放在AL、BL、CL和DL中
MOVCL,STORE+1
MOVBL,STORE+2
MOVAL,STORE+3
5.25.4试编写一程序,要求比较两个字符串STRING1和STRING2所含字符是否完全相同,若相同则显示‘MATCH’,若不相同则显示‘NOMATCH’。
STRING1DB‘Iamastudent.’
STRING2DB‘Iamastudent!
’
YESDB‘MATCH’,0DH,0AH,‘$’
NODB‘NOMATCH’,0DH,0AH,‘$’
--------------------------------------------------------------------------
CSEGSEGMENT
CSEG,DS:
DSEG,ES:
DSEG
MOVAX,DSEG
LEASI,STRING1;
设置串比较指令的初值
LEADI,STRING2
CLD
MOVCX,STRING2-STRING1
REPECMPSB;
串比较
JNEDISPNO
LEADX,YES;
显示MATCH
JMPDISPLAY
DISPNO:
LEADX,NO;
显示NOMATCH
MOVAH,9;
显示一个字符串的DOS调用
CSEGENDS;
5.35.5试编写一程序,要求能从键盘接收一个个位数N,然后响铃N次(响铃的ASCII码为07)。
SUBAL,‘0’
JBSTOP;
‘0’吗?
CMPAL,9;
‘9’吗?
CBW
MOVCX,AX;
响铃次数N
JCXZSTOP
BELL:
MOVDL,07H;
准备响铃
MOVAH,2;
显示一个字符的DOS调用,实际为响铃
CALLDELAY100ms;
延时100ms
LOOPBELL
5.45.6编写程序,将一个包含有20个数据的数组M分成两个数组:
正数数组P和负数数组N,并分别把这两个数组中数据的个数显示出来。
COUNTEQU20
ARRAYDW20DUP(?
);
存放数组
COUNT1DB0;
存放正数的个数
ARRAY1DW20DUP(?
存放正数
COUNT2DB0;
存放负数的个数
ARRAY2DW20DUP(?
存放负数
ZHENDB0DH,0AH,‘Thepositivenumberis:
’,‘$’;
正数的个数是:
FUDB0DH,0AH,‘Thenegativenumberis:
负数的个数是:
CRLFDB0DH,0AH,‘$’
MOVCX,COUNT
LEABX,ARRAY
LEASI,ARRAY1
LEADI,ARRAY2
BEGIN1:
MOVAX,[BX]
CMPAX,0;
是负数码?
JSFUSHU
MOV[SI],AX;
是正数,存入正数数组
INCCOUNT1;
正数个数+1
ADDSI,2
JMPSHORTNEXT
FUSHU:
MOV[DI],AX;
是负数,存入负数数组
INCCOUNT2;
负数个数+1
ADDDI,2
NEXT:
ADDBX,2
LOOPBEGIN1
LEADX,ZHEN;
显示正数个数
MOVAL,COUNT1
CALLDISPLAY;
调显示子程序
LEADX,FU;
显示负数个数
MOVAL,COUNT2
DISPLAYPROCNEAR;
显示子程序
MOVAH,9;
AAM;
将(AL)中的二进制数转换为二个非压缩BCD码
ADDAH,‘0’;
变为0~9的ASCII码
MOVDL,AH
ADDAL,‘0’;
MOVDL,AL
LEADX,CRLF;
显示回车换行
DISPLAYENDP;
显示子程序结束
5.55.7试编写一个汇编语言程序,求出首地址为DATA的100D字数组中的最小偶数,并把它存放在AX中。
MOVBX,0
MOVCX,100
COMPARE:
MOVAX,DATA[BX];
取数组的第一个偶数
ADDBX,2
TESTAX,01H;
是偶数吗?
LOOPNZCOMPARE;
不是,比较下一个数
JNZSTOP;
没有偶数,退出
JCXZSTOP;
最后一个数是偶数,即为最小偶数,退出
COMPARE1:
MOVDX,DATA[BX];
取数组的下一个偶数
TESTDX,01H;
JNZNEXT;
CMPAX,DX;
(AX)<
(DX)吗?
JLENEXT
MOVAX,DX;
(DX),则置换(AX)为最小偶数
LOOPCOMPARE1
5.65.8把AX中存放的16位二进制数K看作是8个二进制的“四分之一字节”。
试编写程序要求数一下值为3(即11B)的四分之一字节数,并将该数(即11B的个数)在终端上显示出来。
MOVDL,0;
计数初始值
MOVCX,8
TESTAX,03H;
是数03吗?
JNZNOEQUAL;
不是,转走
INCDL;
是,计数
NOEQUAL:
RORAX,1;
准备判断下一个数
RORAX,1
LOOPCOMPARE
ADDDL,‘0’;
将计数值转换为ASCII码
进行显示
5.75.9试编写一个汇编语言程序,要求从键盘接收一个四位的16进制数,并在终端上显示与它等值的二进制数。
MOVBX,0;
用于存放四位的16进制数
MOVCH,4
MOVCL,4
INPUT:
SHLBX,CL;
将前面输入的数左移4位
MOVAH,1;
从键盘取数
CMPAL,30H;
<
0吗?
JBINPUT;
不是‘0~F’的数重新输入
CMPAL,39H;
是‘0~9’吗?
JAAF;
不是,转‘A~F’的处理
ANDAL,0FH;
转换为:
0000B~1001B
JMPBINARY
AF:
ANDAL,11011111B;
转换为大写字母
CMPAL,41H;
又<
A吗?
不是‘A~F’的数重新输入
CMPAL,46H;
>
F吗?
JAINPUT;
1010B~1111B
ADDAL,9
BINARY:
ORBL,AL;
将键盘输入的数进行组合
DELCH
JNZINPUT
DISPN:
MOVCX,16;
将16位二进制数一位位地转换成ASCII码显示
DISP:
MOVDL,0
ROLBX,1
RCLDL,1
ORDL,30H
LOOPDISP
5.85.10设有一段英文,其字符变量名为ENG,并以$字符结束。
试编写一程序,查对单词SUN在该文中的出现次数,并以格式“SUN:
xxxx”显示出次数。
ENGDB‘Hereissun,sun,…,$’
DISPDB‘SUN:
DATDB‘0000’,0DH,0AH,‘$’
KEYWORDDB‘sun’
MOVAX,0
MOVDX,DISP-ENG-2;
计算ENG的长度(每次比较sun,因此比较次数-2)
LEABX,ENG
COMP:
MOVDI,BX
LEASI,KEYWORD
JNZNOMATCH
INCAX;
是,SUN的个数加1
NOMATCH:
INCBX;
指向ENG的下一个字母
DECDX
JNZCOMP
DONE:
MOVCH,4;
将次数转换为16进制数的ASCII码
LEABX,DAT;
转换结果存入DAT单元中
DONE1:
ROLAX,CL
MOVDX,AX
ANDDL,0FH;
取一位16进制数
ADDDL,30H
CMPDL,39H
JLESTORE
ADDDL,07H;
是“A~F”所以要加7
STORE:
MOV[BX],DL;
JNZDONE1
LEADX,DISP;
显示字符串程序(将DISP和DAT一起显示)
MOVAH,09H
5.95.11从键盘输入一系列以$为结束符的字符串,然后对其中的非数字字符计数,并显示出计数结果。
BUFFDB50DUP(‘’)
COUNTDW0
LEABX,BUFF
MOVCOUNT,0
MOVAH,01;
从键盘输入一个字符的功能调用
MOV[BX],AL
CMPAL,‘$’;
是$结束符吗?
JNZINPUT;
不是,继续输入
LEABX,BUFF;
对非数字字符进行计数
MOVCL,[BX]
CMPCL,‘$’;
是$结束符,则转去显示
JZDISP
CMPCL,30H;
小于0是非数字字符
JBNEXT
CMPCL,39H;
大于9是非数字字符
JANEXT
INCCOUNT;
个数+1
JMPNEXT
┇;
16进制数显示程序段(省略)
5.105.12有一个首地址为MEM的100D字数组,试编制程序删除数组中所有为0的项,并将后续项向前压缩,最后将数组的剩余部分补上0。
MEMDW100DUP(?
MOVSI,(100-1)*2;
(SI)指向MEM的末元素的首地址
MOVBX,-2;
地址指针的初值
CMPMEM[BX],0
JZCONS
LOOPCOMP
JMPFINISH;
比较完了,已无0则结束
CONS:
CONS1:
CMPDI,SI;
到了最后单元码?
JAENOMOV
MOVAX,MEM[DI+2];
后面的元素向前移位
MOVMEM[DI],AX
JMPCONS1
NOMOV:
MOVWORDPTR[SI],0;
最后单元补0
FINISH:
5.11在STRING到STRING+99单元中存放着一个字符串,试编制一个程序测试该字符串中是否存在数字,如有则把CL的第5位置1,否则将该位置0。
STRINGDB100DUP(?
MOVSI,0;
(SI)作为地址指针的变化值
REPEAT:
MOVAL,STRING[SI]
CMPAL,30H
JBGO_ON
CMPAL,39H
JAGO_ON
ORCL,20H;
存在数字把CL的第5位置1
JMPEXIT
GO_ON:
INCSI
LOOPREPEAT
ANDCL,0DFH;
不存在数字把CL的第5位置0
EXIT:
CSEGENDS
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 汇编 答案
![提示](https://static.bdocx.com/images/bang_tan.gif)