汇编答案Word下载.docx

上传人:b****3 文档编号:18434724 上传时间:2022-12-16 格式:DOCX 页数:47 大小:30.81KB
下载 相关 举报
汇编答案Word下载.docx_第1页
第1页 / 共47页
汇编答案Word下载.docx_第2页
第2页 / 共47页
汇编答案Word下载.docx_第3页
第3页 / 共47页
汇编答案Word下载.docx_第4页
第4页 / 共47页
汇编答案Word下载.docx_第5页
第5页 / 共47页
点击查看更多>>
下载资源
资源描述

汇编答案Word下载.docx

《汇编答案Word下载.docx》由会员分享,可在线阅读,更多相关《汇编答案Word下载.docx(47页珍藏版)》请在冰豆网上搜索。

汇编答案Word下载.docx

程序如下:

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

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 医药卫生 > 基础医学

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1