汇编语言小程序例子Word文档格式.docx

上传人:b****5 文档编号:8337521 上传时间:2023-05-11 格式:DOCX 页数:22 大小:21.27KB
下载 相关 举报
汇编语言小程序例子Word文档格式.docx_第1页
第1页 / 共22页
汇编语言小程序例子Word文档格式.docx_第2页
第2页 / 共22页
汇编语言小程序例子Word文档格式.docx_第3页
第3页 / 共22页
汇编语言小程序例子Word文档格式.docx_第4页
第4页 / 共22页
汇编语言小程序例子Word文档格式.docx_第5页
第5页 / 共22页
汇编语言小程序例子Word文档格式.docx_第6页
第6页 / 共22页
汇编语言小程序例子Word文档格式.docx_第7页
第7页 / 共22页
汇编语言小程序例子Word文档格式.docx_第8页
第8页 / 共22页
汇编语言小程序例子Word文档格式.docx_第9页
第9页 / 共22页
汇编语言小程序例子Word文档格式.docx_第10页
第10页 / 共22页
汇编语言小程序例子Word文档格式.docx_第11页
第11页 / 共22页
汇编语言小程序例子Word文档格式.docx_第12页
第12页 / 共22页
汇编语言小程序例子Word文档格式.docx_第13页
第13页 / 共22页
汇编语言小程序例子Word文档格式.docx_第14页
第14页 / 共22页
汇编语言小程序例子Word文档格式.docx_第15页
第15页 / 共22页
汇编语言小程序例子Word文档格式.docx_第16页
第16页 / 共22页
汇编语言小程序例子Word文档格式.docx_第17页
第17页 / 共22页
汇编语言小程序例子Word文档格式.docx_第18页
第18页 / 共22页
汇编语言小程序例子Word文档格式.docx_第19页
第19页 / 共22页
汇编语言小程序例子Word文档格式.docx_第20页
第20页 / 共22页
亲,该文档总共22页,到这儿已超出免费预览范围,如果喜欢就下载吧!
下载资源
资源描述

汇编语言小程序例子Word文档格式.docx

《汇编语言小程序例子Word文档格式.docx》由会员分享,可在线阅读,更多相关《汇编语言小程序例子Word文档格式.docx(22页珍藏版)》请在冰点文库上搜索。

汇编语言小程序例子Word文档格式.docx

INCDI

SUBAX,1

CMPBL,BH

JZAA2

JMPAA1

LEABX,R1

MOVCX,7

AA4:

MOVDL,[BX]

INCBX

MOVAH,2

LOOPAA4

JMPE

LEABX,R2

MOVCX,10

AA5:

LOOPAA5

E:

ENDSTART

3.从键盘读入一个四位的十六进制数,CRT显示等值的二进制数.

由于每个十六进制数位对应4个二进制,所以每读入一个十六进制位后,即可将其对应的4个二进制位依次输出。

由于数字'

0'

~'

9'

的ASCⅡ码为30H~39H,字母'

a'

~'

f'

与'

A'

F'

的ASCⅡ码为61H~66H与41H~46H,因此,如果输入的字母为数字'

,则其低4位即为对应的二进制位;

如果输入的字符为字母'

a'

f'

或'

A'

F'

,则需要减7,然后通过移位将低4位依次输出。

汇编程序如下:

MSG1 DB '

Hex:

'

 '

$'

MSG2 DB 0DH, 0AH, '

Binary:

COUNTEQU4

BUFDB4DUP(?

MOVAX,DATA

MOVDS,AX

LEADX,MSG1

MOVAH,9

MOVCX,COUNT

MOVSI,0

INPUT:

通过四次循环从键盘读入四位十六进制数

MOVAH,1

MOVBUF[SI],AL

DECCX

CMPCX,0

JNZINPUT

NEXT3:

LEADX,MSG2

NEXT2:

MOVBL,BUF[SI]

CMPBL,'

9'

JBEOK;

读入的字符<=9 转向 OK:

SUBBL,7 ;

读入字符>

=9减7

OK:

PUSHCX

MOVCL,4

SHLBL,CL;

逻辑左移4位,低4位à

高4位

MOVCX,4;

4次循环将当前处理字符的4位二进制输出

NEXT1:

MOVDL,'

0'

SHLBL,1

JNCSKIP

INCDL

SKIP:

MOVAH,2

LOOPNEXT1

POPCX;

LOOPNEXT2;

4次循环将4位十六进制数,每位转换为对应的4位二进制

EXIT:

MOVAH,4CH

CODEENDS

4.设从STRING开始存放一个以$为结束标志的字符串,试编写把字符串中的字符进行分类的源程序,数字字符送入NUM开始的内存中,大写字母送入BCHAR开始的内存区中,小写字母存入LCHAR开始的内存中,其他字符存入OTHER开始的内存区中。

STRINGDB'

abc123ABC'

'

NEQU$-STRING

NUMDBNDUP(?

BCHARDBNDUP(?

LCHARDBNDUP(?

OTHERDBNDUP(?

MOVAX,DATA

LEABX,STRING

DECBX

LEASP,BCHAR

LEACX,LCHAR

LEADX,OTHER

LEASI,NUM

INCBX

MOVAL,[BX]//判断是否为$,是否结束

CMPAL,'

JZAA5

CMPAL,30H//判定数字字符

JCAA4

CMPAL,39H

JAAA2

MOV[SI],AL

CMPAL,41H//判定大写字母

CMPAL,5AH

JAAA3

MOVDI,SP

MOV[DI],AL

INCSP

CMPAL,61H//判定小写字母

CMPAL,7AH

JAAA4

MOVDI,CX

INCCX

MOVDI,DX//判定其他

MOV[DI],AL

INCDX

MOVAH,4CH//返回DOS结束

5.试编写找出首地址为BUF数据块中的最小偶数(该数据块中有100个带符号字节数),并以十六进制的形式显示在CRT上的源程序。

答:

BUFDB100DUP(?

);

要比较的数

LEABX,BUF;

BUF首地址送BX

MOVCL,101;

循环控制

MOVDL,126;

DL存放最小偶数

MOVAH,0;

标志是不是有偶数

LOOP1:

DECCL;

循环计数减1

JZTOEND;

ZF标志0则跳转

MOVAL,[BX];

BX内存内容送AL

INCBX;

BX指向下一内存单元

SHRAL,1;

AL逻辑右移一位

JCLOOP1;

是基数则接着循环

SHLAL,1;

是偶数,因为上面右移了左移得到原数值

MOVAH,1;

能进行这一步则说明数值中有偶数

CMPAL,DL;

与CH比较大小

JGELOOP1;

AL大DL小则循环

MOVDL,AL;

保证DL存放最小偶数

JMPLOOP1;

CL不为0继续循环

TOEND:

CMPAH,1

JCL;

有借位则说明数值中无偶数直接返DOS

MOVBL,DL

SHRDL,1

SHRDL,1

ANDDL,0FH

CMPDL,10

JBL4

ADDDL,7

L4:

ADDDL,30H;

显示高四位对应的十六进制的ascii码

MOVDL,BL

JBL6

L6:

显示低四位对应的十六进制的ascii码

MOVDL,'

H'

;

显示H

L:

MOVAH,4CH;

返回DOS

6.已知数据块BUFA中存放15个互不相等的字节数据,BUFB中存放20个互不相等的字节数据,试编写将既在BUFA中出现,又在BUFB中出现的数据存放到BUFC开始的缓冲区中的源程序。

BUFADB41H,42H,43H,44H,45H,46H,47H,48H,49H,4AH,4BH,4CH,4DH,4EH,4FH

BUFBDB31H,32H,33H,41H,42H,43H,44H,45H,46H,47H,48H,49H,4AH,4BH,4CH

DB50H,51H,52H,53H,54H

BUFCDB15DUP(0)

LEASI,BUFA

LEABX,BUFC

MOVCX,15;

外层循环计数

MOVAH,20;

内层循环20次

MOVAL,[SI]

LEADI,BUFB

CMPAL,[DI]:

比较BUFA,BUFB内容

JNZAA3;

内容不同,跳至AA3

MOV[BX],AL;

内容相同,将其存入BUFC单元

JMPAA4;

找到相同内容,结束本次内层循环

DECAH;

内层循环计数减一

JNZAA2;

内层循环结束

LOOPAA1;

外层循环结束

此行以下将BUFC中的内容输出

BB1:

LOOPBB1

7.试编写由键盘输入一个以回车作为结束的字符串,将其按ASCII码由大到小的顺序输入到CRT上的源程序。

DATASEGMENT;

数据段

BUFDB200DUP(?

DATAENDS

CODESEGMENT;

代码段

ASSUMECS:

CODE,DS:

START:

MOVAX,DATA

MOVDS,AX

MOVDI,0;

记录输入的字符串个数

MOVBX,OFFSETBUF

AA1:

MOVAH,1;

键盘输入字符

CMPDI,201;

是否超出缓冲区

JNCAA6;

超过缓冲区大小

CMPAL,0DH;

是否为回车,回车表输入结束

JZAA6;

是回车

MOV[BX],AL;

将字符存入缓冲区

AA6:

MOVDX,DI

CMPDI,0;

没有字符则无输出

JZAA7

CMPDI,1;

有一个字符则直接输出

JZAA8

DECDX;

外循环计数初值,即遍数,数据个数减1

AA2:

MOVCX,DI

DECCX;

内循环计数初值,即比较次数,数据个数减1

AA3:

MOVAL,[BX]

CMPAL,[BX+1];

比较

JNCAA4;

前大后小转

XCHGAL,[BX+1];

前小后大交换

MOV[BX],AL

AA4:

LOOPAA3

DECDX

JNZAA2

AA8:

MOVBX,OFFSETBUF;

输出字符

MOVCX,DI;

循环计数初值

AA5:

MOVDL,[BX]

MOVAH,2

AA7:

MOVAH,4CH

8.设从BUFFER开始存放若干个以$为结束标志的带符号字节数据,试编写将其中的正数按由大到小的顺序存入PLUS开始的缓冲区中的源程序。

方法一

思路:

将正数先存到目标地址,然后再排序。

BUFFERDB1,2,3,4,5,6,7,-8,9,2,-1,-2,-3,-4,-5,-6,-7,-8,-9,1,'

PLUSDB(?

CODE,DS:

DATA

MOVDI,-1;

初始化外循环计数器

LEABX,BUFFER

LEASI,PLUS

L1:

MOVAL,[BX]

XORAL,'

判断当前字符是否为'

JNZL2;

不是'

转移

JMPL4

L2:

MOVAL,[BX];

判断当前字符是否为正数

ROLAL,1

JNCL3;

是正数转移

JMPL1

L3:

RORAL,1;

恢复数据

MOV[SI],AL;

将数据存入目标地址

CMPDI,0

JGL5;

正数个数>

=2则开始排序

MOVAH,4CH

INT21H;

正数个数为0或1均跳出

L5:

LEASI,PLUS;

以下为使用冒泡排序的方法对数据排序

MOVCX,DI

CMPAL,[SI+1]

JNCL7

XCHGAL,[SI+1]

L7:

LOOPL6

DECDI

JNZL5

方法二

在数据存放的原地址将数据进行由小到大的冒泡排序,则每次那循环可得到本次排序中的最大数,将其存入目的地址,直到得到一个非正的数后跳出。

PLUSDB(?

LEASI,PLUS

MOVAL,[BX]

检查当前字符是否为'

JNZL2

JMPL3

INCDI

INCBX

LEABX,BUFFER;

开始排序

CMPAL,[BX+1]

JLEL5;

前小后大转移

XCHGAL,[BX+1]

MOV[BX],AL

INCBX

LOOPL4

得到本次循环的最大数

JNCAA4;

检验是否为正数,是则转移

MOV[SI],DL;

保存数据

DECDI

JNZL3;

进入下一次循环

9.试编写一源程序,要求将一个包含有20个数据的数组M分成两个数组:

正数数组P和负数组N,并分别把这两个数组中数据的个数在CRT上显示出来。

DATASEGMENT

ORG100H

MDB12,23,58,15,36,55,44,89,45,-23,-56,-47,-21,-65,32,69,82,58,29,-14;

待处理数组

PDB20DUP(?

正数数组P

NDB20DUP(?

负数数组N

DATAENDS

CODESEGMENT

ASSUMECS:

DATA

MOVDS,AX

LEASI,P;

P的首址送SI

LEADI,N;

N的首址送DI

LEABX,M;

M的首址送BX

XORAX,AX;

AX清0

XORDX,DX;

DX清0,DL/DH分别用于正/负数计数

MOVCX,20;

分别处理M的20个数据

MOVAL,[BX];

取一个数组元素

TESTAL,80H;

AL,80H按位与

JZL2;

结果为0,则AL为正,转L2

MOV[DI],AL;

AL为负,送负数数组N

BX+1,准备取M的下一个元素

INCDI;

负数数组N写位置后移一位

INCDH;

负数计数DH+1

JMPL3;

本次处理结束

MOV[SI],AL;

AL为正,送正数数组P

INCBX

INCSI;

正数数组P写位置后移一位

INCDL;

正数计数DL+1

LOOPL1;

跳转进入下一次循环

MOVCX,2;

二次输出循环,分别显示正负数的个数

MOVBL,DL;

保存DL,实质是暂时保存DL的低4位

SHRDL,1

SHRDL,1;

逻辑右移4位,即取高4位

CMPDL,10

JBL4;

DL<

10

ADDDL,7;

DL>

=10时,DL+7,9的ASCII码为39H,A的ASCII码为41H,相差8

ADDDL,30H

MOVAH,2;

输出DL,正/负数个数的高位

MOVDL,BL;

BL送DL,准备显示正/负数个数的低位

ANDDL,0FH;

DL高4位置0,因为DL的高4位已显示

ADDDL,30H

MOVDL,0AH;

换行

MOVDL,0DH;

回车

MOVDL,DH;

DH送DL,准备显示负数的个数

LOOPL5

10.试编写一源程序,要求能从键盘接收一个个位数N,然后响铃N次(响铃的ASCII码为07)。

输入一个个位数N

INT21H

CMPAL,30H

JCSTART;

小于0,要求重新输入

CMPAL,3AH

JNCSTART;

大于9,要求重新输入

ANDAL,0FH

XORCX,CX;

CX清0

MOVCL,AL;

循环响铃N次

MOVDL,07H;

响铃的ASCII码为07

AA1:

MOVAH,2

LOOPAA1;

循环响铃

MOVAH,4CH

11.在STRING到STRING+99单元中存放着一个字符串,试编制一程序测试该字符串中是否有数字。

如有,则把CL置0FFH,否则将CL置0。

DATASSEGMENT

STRINGDB'

XYZIL12LWR'

;

'

内可以是任意字符串

NEQU$-STRING;

字符串长度

DATASENDS

CODESSEGMENT

CODES,DS:

DATAS

MOVAX,DATAS

MOVCX,N

MOVAL,[BX]

CMPAL,30H;

字符ASCII码小于30H,转移

JBAA2

CMPAL,39H;

字符ASCII码大于39H,转移

JMPAA3;

数字,符合条件

INCBX

LOOPAA1

MOVCL,0

JMPAA4

MOVCL,0FFH

MOVAH,4CH

CODESENDS

12.试编制一源程序,把DX中的十六进制数转换为ASCII码,并将对应的ASCII码依次存放到MEM数组中的4个字符中.例如,当DX=2A49H时,程序执行完后,MEM中的4个字节内容为39H、34H、41H、和32H。

SOURCEDW2A49H

MEMDB4DUP(?

MOVDX,SOURCE

LEABX,MEM

settheloop

MOVCX,4

theloopbody

LB:

MOVAX,DX

ANDAX,000FH

CMPAL,10

JCAD

ADDAL,7

AD:

ADDAL,30H

SHRDX,1

LO

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

当前位置:首页 > 考试认证 > 司法考试

copyright@ 2008-2023 冰点文库 网站版权所有

经营许可证编号:鄂ICP备19020893号-2