汇编经典代码.docx

上传人:b****4 文档编号:4097704 上传时间:2023-05-06 格式:DOCX 页数:19 大小:18.81KB
下载 相关 举报
汇编经典代码.docx_第1页
第1页 / 共19页
汇编经典代码.docx_第2页
第2页 / 共19页
汇编经典代码.docx_第3页
第3页 / 共19页
汇编经典代码.docx_第4页
第4页 / 共19页
汇编经典代码.docx_第5页
第5页 / 共19页
汇编经典代码.docx_第6页
第6页 / 共19页
汇编经典代码.docx_第7页
第7页 / 共19页
汇编经典代码.docx_第8页
第8页 / 共19页
汇编经典代码.docx_第9页
第9页 / 共19页
汇编经典代码.docx_第10页
第10页 / 共19页
汇编经典代码.docx_第11页
第11页 / 共19页
汇编经典代码.docx_第12页
第12页 / 共19页
汇编经典代码.docx_第13页
第13页 / 共19页
汇编经典代码.docx_第14页
第14页 / 共19页
汇编经典代码.docx_第15页
第15页 / 共19页
汇编经典代码.docx_第16页
第16页 / 共19页
汇编经典代码.docx_第17页
第17页 / 共19页
汇编经典代码.docx_第18页
第18页 / 共19页
汇编经典代码.docx_第19页
第19页 / 共19页
亲,该文档总共19页,全部预览完了,如果喜欢就下载吧!
下载资源
资源描述

汇编经典代码.docx

《汇编经典代码.docx》由会员分享,可在线阅读,更多相关《汇编经典代码.docx(19页珍藏版)》请在冰点文库上搜索。

汇编经典代码.docx

汇编经典代码

1.顺序程序设计

将两个多位十进制数相加,要求被加数、加数均以ASCⅡ码形式各自顺序存放在以DATA1和DATA2为首的五个内存单元中(低位在前),结果送回DATA1处。

DATASEGMENT

DATA1DB34H,35H,39H,38H,36H,'';被加数

DATA2DB37H,34H,33H,36H,32H,'';加数

DATAENDS

CODESEGMENT

MAINPROCFAR

ASSUMECS:

CODE,DS:

DATA

START:

MOVAX,DATA

MOVDS,AX

LEASI,DATA1;有效地址送SI,为调用显示子程序做准备

CALLDISPLAY;调用显示子程序

CALLCRLF;调用回车换行子程序

LEASI,DATA2;有效地址送SI,为调用显示子程序做准备,同时为加法运算做准备

CALLDISPLAY;调用显示子程序

CALLCRLF;调用回车换行子程序

LEADI,DATA1;有效抵制送DI,为加法运算做准备

MOVAX,0

MOVBX,0

MOVCL,05H;记录循环次数

ADDS:

MOVAL,[SI];将加数送往AL

SUBAL,30H

ADDAL,BL;加上进位

MOVBL,[DI];将被加数送往BL

SUBBL,30H

ADDAL,BL;加法运算

ADDAL,30H

CMPAL,3AH

JASUBA;结果>=10,跳到SUBA

JBNSUBA

SUBA:

SUBAL,0AH;减去10的值,并置BL为1MOVBL,01H

JMPCONTINUE

NSUBA:

MOVBL,00H;置BL为0

CONTINUE:

MOV[DI],AL;将相加的结果从AL送往DI的地址,即DATA1的地址

INCDI;地址加1

INCSI;地址加1

LOOPADDS;循环

JCSHUCHU

JNCSHUCHU2

SHUCHU2:

MOVAL,31H;CF为1设置结果最高位为1JMPCONTINUE2

SHUCHU:

MOVAL,30H;CF为0设置结果最高位为0

CONTINUE2:

MOV[DI],AL

LEASI,DATA1;将DATA1的有效地址送往SI,为调用DISPLAY子程序做准备CALLDISPLAY;调用DISPLAY子程序MOVAX,4C00H;返回DOSINT21H

MAINENDP

CRLFPROCNEAR;回车、换行于功能MOVDL,0DH

MOVAH,02HINT21HMOVDL,0AH

MOVAH,02HINT21H

RET

CRLFENDP

DISPLAYPROCNEAR;显示于功能

MOVBX,0006H;记录循环次数

DSL:

MOVDL,[SI+BX-1];将有效地址内的内容送往DL

MOVAH,02;2号功能输出

INT21H

DECBX;BX自动减1

JNZDSL

RET

DISPLAYENDP

CODEENDS

ENDSTART

2分支程序设计实验

接收键盘输入字符,将其中的小写字母转换为大写字母并显示。

CODESEGMENT

MAINPROCFAR

ASSUMECS:

CODE

START:

MOVAH,00H

INT16H

CMPAL,0DH

JZOVER

CALLJUDGE

MOVDL,AL

MOVAH,02H

INT21H

JMPSTART

OVER:

MOVAH,4CH

INT21H

MAINENDP

JUDGEPROCNEAR

CMPAL,'a'

JBSTOP

CMPAL,'z'

JASTOP

SUBAL,20H

STOP:

RET

JUDGEENDP

CODEENDS

ENDSTART

3循环程序设计实验

统计一个有10人的班中,男、女生的人数各为多少。

将男生人数存入变量MAN、女生人数存入变量WOMAN中。

DATASEGMENT

MANDB0,0

WOMANDB0,0

STRINGDB'iuputpeoplenumber!

(manis0,womanis1)$'

SMDB'manis:

$'

SWDB'womanis:

$'

DATAENDS

CODESEGMENT

MAINPROCFAR

ASSUMECS:

CODE,DS:

DATA

START:

MOVAX,DATA

MOVDS,AX

MOVAH,09H;将STRING的内容输出

MOVDX,OFFSETSTRING

INT21H

CALLCRLF

MOVCX,10;男女生总人数

AA:

MOVAH,01H;从键盘输入,0为男,1为女

INT21H

CMPAL,30H;与'0'比较

JNZADDW;不为'0',女生人数加1

INCMAN;否则男生人数加1

BB:

LOOPAA

JMPDISPLY;打印

ADDW:

INCWOMAN

JMPBB

DISPLY:

CALLCRLF

MOVAH,09H;字符串输出

MOVDX,OFFSETSM

INT21H

MOVAH,02H;男生人数统计结果输出

MOVDL,MAN

ADDDL,30H

CALLJUDGE

CALLCRLF

MOVAH,09H;字符串输出

MOVDX,OFFSETSW

INT21H

MOVAH,02H;女生人数统计结果输出

MOVDL,WOMAN

ADDDL,30H

CALLJUDGE

MOVAH,4CH;返回DOS

INT21H

MAINENDP

JUDGEPROCNEAR;判断结果是否为39H

CMPDL,3AH

JZSHI

CC:

INT21H

RET

SHI:

MOVDL,31H

INT21H

MOVDL,30H

JMPCC

JUDGEENDP

CRLFPROCNEAR;回车换行子程序

MOVAH,02H;回车

MOVDL,0DH

INT21H

MOVDL,0AH;换行

INT21H

RET

CRLFENDP

CODEENDS

ENDSTART

4子程序设计实验

1.键盘输入字符,依次显示在行的最左端(即每接受一个字符,显示在屏幕上并回车换行。

2.对频繁使用的回车换行编写为子程序,在主程序中调用完成分行显示。

CODESEGMENT

MAINPROCFAR

ASSUMECS:

CODE

START:

MOVCX,10;设置循环次数

NEXT:

MOVAH,01H;从键盘输入一个字符

INT21H

CALLCRLF;调用回车换行子程序

LOOPNEXT

MOVAH,4CH;返回DOS

INT21H

MAINENDP

CRLFPROCNEAR;回车换行子程序

MOVAH,02H;回车

MOVDL,0DH

INT21H

MOVDL,0AH;换行

INT21H

RET

CRLFENDP

CODEENDS

ENDSTART

5码制转换程序实验

将ASCⅡ码数据转换成二进制数据。

要求从键盘上输入十进制整数(假定范围0~32767),然后转换成二进制格式存储。

DATASEGMENT

STRING1DB'PLEASEINPUTANUMBER(0~32767):

$'

STRING2DB'THEASCIIIS:

$'

STRING3DB'THEBINARYIS:

$'

DATAENDS

CODESEGMENT

ASSUMECS:

CODE,DS:

DATA

MAINPROCFAR

START:

MOVAX,DATA

MOVDS,AX

MOVDX,OFFSETSTRING1

MOVAH,09H

INT21H

CALLCRLF

INPUT:

MOVAH,01H;输入数据

INT21H

CMPAL,0DH

JZNEXT

SUBAL,30H

JLINPUT

CMPAL,39H

JGINPUT

CBW

XCHGAX,BX;AX为输入值,BX保存结果,两个对调为MUL做准备

MOVDX,10D;将上一次结果乘10

MULDX

XCHGAX,BX;AX为本次输入的值,BX为之前的结果

ADDBX,AX

JMPINPUT

NEXT:

CALLCRLF

MOVCL,4D

MOVCH,4D

MOVDX,OFFSETSTRING2

MOVAH,09H

INT21H

CALLCRLF

LOOP0:

ROLBX,CL;循环左移,将最高为存到BL的低四位

MOVAL,BL

ANDAL,0FH;

ADDAL,30H

CMPAL,3AH

JLOUTPUT

ADDAL,07H

OUTPUT:

MOVAH,02H

MOVDL,AL

INT21H

DECCH

JNZLOOP0

CALLCRLF

MOVDX,OFFSETSTRING3

MOVAH,09H

INT21H

CALLCRLF

MOVCH,16D

MOVCL,1D

LOOP1:

ROLBX,CL

MOVAL,BL

ANDAL,01H

ADDAL,30H

MOVAH,02H

MOVDL,AL

INT21H

DECCH

JNZLOOP1

MOVAH,4CH

INT21H

MAINENDP

OUTSPROCNEAR;字符串输出子程序

MOVAH,09H

INT21H

RET

OUTSENDP

CRLFPROCNEAR;回车换行子程序

MOVAH,02H;回车

INT21H

MOVDL,0AH;换行

INT21H

RET

CRLFENDP

CODEENDS

ENDSTART

6两个数相乘的实验

实现十进制数的乘法,被乘数和乘数均以ASCⅡ码形式放在内存中,乘积在屏幕上显示出来。

DATASEGMENT

MBCSDW0

MCSDW0

RESULTDW0

STRING1DB'THEBEICHENGSHUIS:

$'

STRING2DB'THECHENGSHUIS:

$'

STRING3DB'THERESULTIS:

$'

STRINGDB'THEASCIIIS:

$'

DATAENDS

CODESEGMENT

MAINPROCFAR

ASSUMECS:

CODE,DS:

DATA

START:

MOVAX,DATA

MOVDS,AX

MOVDX,OFFSETSTRING1

CALLOUTS

CALLINPUT;输入被乘数

MOVDX,OFFSETSTRING

CALLOUTS

CALLCRLF

CALLASCII;被乘数转化为ASCII码输出

CALLCRLF

MOVMBCS,BX;被乘数保存到MBCS中

MOVDX,OFFSETSTRING2

CALLOUTS

CALLINPUT;输入乘数

MOVDX,OFFSETSTRING

CALLOUTS

CALLCRLF

CALLASCII;乘数转化为ASCII码输出

CALLCRLF

MOVMCS,BX;乘数保存到MCS中

MOVDX,OFFSETSTRING3

CALLOUTS

CALLCRLF

MOVAX,MBCS;被乘数

MULBX;乘数与被乘数相乘,结果高位DX,低位AX

MOVRESULT,AX;将AX中的内容保存到RESULT中

MOVBX,DX;将高位DX的值送给BX输出

CALLASCII

MOVBX,RESULT;将低位AX的值送给BX输出

CALLASCII

MOVAH,4CH

INT21H

MAINENDP

INPUTPROCNEAR;输入十进制数,将其转化为ASCII码存到BX中

CALLCRLF

MOVBX,0

AA:

MOVAH,01H

INT21H

CMPAL,0DH

JZSTOP

SUBAL,30H

JLAA

CMPAL,39H

JGAA

CBW

XCHGAX,BX;AX为输入值,BX保存结果,两个对调为MUL做准备

MOVDX,10D;将上一次结果乘10

MULDX

XCHGAX,BX;AX为本次输入的值,BX为之前的结果

ADDBX,AX

JMPAA

STOP:

CALLCRLF

RET

INPUTENDP

ASCIIPROCNEAR

MOVCL,4D

MOVCH,4D

CC:

ROLBX,CL;循环左移,将最高为存到BL的低四位

MOVAL,BL

ANDAL,0FH;

ADDAL,30H

CMPAL,3AH

JLBB

ADDAL,07H

BB:

MOVAH,02H

MOVDL,AL

INT21H

DECCH

JNZCC

RET

ASCIIENDP

OUTSPROCNEAR

MOVAH,09H

INT21H

RET

OUTSENDP

CRLFPROCNEAR;回车换行子程序

MOVAH,02H;回车

MOVDL,0DH

INT21H

MOVDL,0AH;换行

INT21H

RET

CRLFENDP

CODEENDS

ENDSTART

7从键盘输入数据并显示的程序

编写程序将键盘接收到的四位十六进制数据转换为等值的二进制数,再显示在终端上。

DATASEGMENT

STRING1DB'Pleaseenterafour-digithexadecimalnumber:

$'

DATAENDS

CODESEGMENT

ASSUMECS:

CODE,DS:

DATA

MAINPROCFAR

START:

MOVAX,DATA

MOVDS,AX

MOVDX,OFFSETSTRING1

MOVAH,09H

INT21H

CALLCRLF

MOVCL,4D

INPUT:

MOVAH,01H

INT21H

CMPAL,'0'

JBINPUT

CMPAL,'9'

JAZIMU

SUBAL,30H

JMPNEXT

ZIMU:

CMPAL,'A'

JBINPUT

CMPAL,'Z'

JAINPUT

SUBAL,37H

NEXT:

CBW

XCHGAX,BX

MOVDX,16D

MULDX

XCHGAX,BX

ADDBX,AX

LOOPINPUT

CALLCRLF

MOVCL,1D

MOVCH,16D

TO:

ROLBX,1

MOVDL,BL

ANDDL,01H

ADDDL,30H

MOVAH,02H

INT21H

DECCH

JNZTO

MOVAH,4CH

INT21H

MAINENDP

CRLFPROCNEAR;回车换行子程序

MOVAH,02H;回车

MOVDL,0DH

INT21H

MOVDL,0AH;换行

INT21H

RET

CRLFENDP

CODEENDS

ENDSTART

8字符和数据的显示程序

先显示信息“INPUTSTRINGTHEENDFLAGIS$”再接受字符如为0~9则计数器加1并显示数据。

如为非数字,则直接显示但不计数。

DATASEGMENT

STRING1DB'INPUTSTRINGTHEENDFLAGIS$'

COUNTDB0

DATAENDS

CODESEGMENT

ASSUMECS:

CODE,DS:

DATA

MAINPROCFAR

START:

MOVAX,DATA

MOVDS,AX

MOVDX,OFFSETSTRING1

MOVAH,09H

INT21H

CALLCRLF

INPUT:

MOVAH,0

INT16H

CMPAL,0DH

JZSTOP

CMPAL,'0'

JBTO

CMPAL,'9'

JATO

INCCOUNT

TO:

MOVAH,02H

MOVDL,AL

INT21H

JMPINPUT

STOP:

CALLCRLF

MOVAH,02H

MOVDL,COUNT

ADDDL,30H

INT21H

MOVAH,4CH

INT21H

MAINENDP

CRLFPROCNEAR;回车换行子程序

MOVAH,02H;回车

MOVDL,0DH

INT21H

MOVDL,0AH;换行

INT21H

RET

CRLFENDP

CODEENDS

ENDSTART

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

当前位置:首页 > 自然科学 > 物理

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

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