微机原理上机汇编语言程序.docx

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

微机原理上机汇编语言程序.docx

《微机原理上机汇编语言程序.docx》由会员分享,可在线阅读,更多相关《微机原理上机汇编语言程序.docx(25页珍藏版)》请在冰点文库上搜索。

微机原理上机汇编语言程序.docx

微机原理上机汇编语言程序

上机作业四

1.实验目的

1.增强和提高汇编语言程序设计的能力,掌握模块化程序设计的方法.

2.熟练掌握DOS常用功能的调用方法.

2.试验仪器

586微机一台

3.实验内容

编写如下程序,并在机器上调试成功。

程序采用菜单式选择,可以接收用户从键盘输入的五个命令(1-5),各命令功能分别为:

(1)按下“1”键,完成字符串小写字母变成大写字母。

用户输入一由英文大小写字母或数字0-9组成的字符串(以回车结束),程序逐个检查字符串中各字符,将原串中小写字母变成大写字母,其他字符不变,并在屏幕上显示。

用户按任一键,重做,按ESC键,返回主菜单。

(2)按下“2”键,完成找最大值(二选一)。

a.接收用户输入的可显示字符串(以回车结束),程序将其中ASCII码值最大的字符显示出来;

b.接收用户输入若干个无符号8位数(以空格或逗号为分隔符,以回车结束),程序将其中最大的数显示出来。

用户按任一键,重做,按ESC键,返回主菜单。

(3)按下“3”键,完成排序(二选一)。

a.接收用户输入的可显示字符串,以回车结束。

程序按ASCII码值大小由大到小排序并输出显示;

b.接收用户输入若干个有符号8位数(以空格或逗号为分隔符,以回车结束),程序将其中最大的数显示出来。

用户按任一键,重做,按ESC键,返回主菜单。

(4)按下“4”键,显示时间。

首先提示用户对时,即用户输入时、分、秒(以空格或逗号为分隔符,以回车结束),然后,在屏幕上不断显示时间,格式为:

XX(时):

XX(分):

XX(秒)

最好定点显示。

用户按任一键,重新对时,按ESC键,返回主菜单。

(5)按下“5”键,结束程序运行,返回系统提示符。

四.程序代码

STACKSEGMENTSTACK

DB256DUP(?

TOPLABELWORD

STACKENDS

DATASEGMENT

TABLEDWG1,G2,G3,G4,G5

STRING1DB'1.Changesmalllettersintocapitallettersofstring;',0DH,0AH,'$'

STRING2DB'2.Findthemaximumofstring;',0DH,0AH,'$'

STRING3DB'3.Sortfordatas;',0DH,0AH,'$'

STRING4DB'4.ShowTime;',0DH,0AH,'$'

STRING5DB'5.Exit.',0DH,0AH,'$'

STRINGNDB'Inputthenumberyouselect(1-5):

$'

IN_STRDB'Inputthestring(includingletters&numbers,lessthan60letters):

',0DH,0AH,'$'

PRESTRDB'Originalstring:

$'

NEWSTRDB'Newstring:

$'

OUT_STRDB'Thestringis$'

MAXCHRDB'Themaximumis$'

IN_NUMDB'Inputthenumbers(0-255,nomorethan20numbers):

',0DH,0AH,'$'

OUT_NUMDB'Sortednumbers:

',0DH,0AH,'$'

IN_TIMDB'Correctthetime(HH:

MM:

SS):

$'

HINTSTRDB'PressESC,gobacktothemenu;orpressanykeytoplayagain!

$'

KEYBUFDB61

DB?

DB61DUP(?

NUMBUFDB?

DB20DUP(?

DATAENDS

CODESEGMENT

ASSUMECS:

CODE,DS:

DATA,SS:

STACK

START:

MOVAX,DATA

MOVDS,AX

MOVAX,STACK

MOVSS,AX

MOVSP,OFFSETTOP

MAIN:

CALLFARPTRMENU;设置显示器

AGAIN:

MOVAH,2

MOVBH,0;页号

MOVDL,41;列号

MOVDH,10;行号

INT10H;光标位置设置

MOVAH,1

INT21H

CMPAL,'1'

JBAGAIN

CMPAL,'5'

JAAGAIN

SUBAL,'1';N-1

SHLAL,1;(N-1)*2

CBW;AL->AX

LEABX,TABLE

ADDBX,AX

JMPWORDPTR[BX]

G1:

CALLFARPTRCHGLTR

MOVAH,8

INT21H

CMPAL,1BH

JZMAIN

JMPG1

G2:

CALLFARPTRMAXLTR

MOVAH,8

INT21H

CMPAL,1BH

JZMAIN

JMPG2

G3:

CALLFARPTRSORTNUM

MOVAH,8

INT21H

CMPAL,1BH

JZMAIN

JMPG3

G4:

CALLFARPTRTIMCHK

MOVAH,8

INT21H

CMPAL,1BH

JZMAIN

JMPG4

G5:

MOVAH,4CH

INT21H

MENUPROCFAR;显示主界面

;设置显示器方式

MOVAH,0

MOVAL,3;

MOVBL,0;

INT10H;清屏

MOVAH,2

MOVBH,0;页号

MOVDL,5;列号

MOVDH,5;行号

INT10H;光标位置设置

MOVAH,9

LEADX,STRING1

INT21H

MOVAH,2

MOVDL,5;列号

MOVDH,6;行号

INT10H;光标位置设置

MOVAH,9

LEADX,STRING2

INT21H

MOVAH,2

MOVDL,5;列号

MOVDH,7;行号

INT10H;光标位置设置

MOVAH,9

LEADX,STRING3

INT21H

MOVAH,2

MOVDL,5;列号

MOVDH,8;行号

INT10H;光标位置设置

MOVAH,9

LEADX,STRING4

INT21H

MOVAH,2

MOVDL,5;列号

MOVDH,9;行号

INT10H;光标位置设置

MOVAH,9

LEADX,STRING5

INT21H

MOVAH,2

MOVDL,5;列号

MOVDH,10;行号

INT10H;光标位置设置

MOVAH,9

LEADX,STRINGN

INT21H

RET

MENUENDP

CHGLTRPROCFAR;将输入字符串中小写字母便换成大写字母

RECHG:

;设置显示器方式

MOVAH,0

MOVAL,3

MOVBL,0

INT10H;清屏

MOVAH,2

MOVBH,0;页号

MOVDL,5;列号

MOVDH,5;行号

INT10H;输入提示光标位置设置

MOVAH,9

LEADX,IN_STR

INT21H;输入字符串提示

MOVAH,2

MOVDL,5;列号

MOVDH,6;行号

INT10H;输入字符串光标位置设置

MOVAH,0AH

LEADX,KEYBUF

INT21H;输入字符串

CMPKEYBUF+1,0

JZRECHG;判断输入字符串是否为空串

LEABX,KEYBUF+2

MOVAL,KEYBUF+1

CBW

MOVCX,AX

ADDBX,AX

MOVBYTEPTR[BX],'$';在输入字符串尾加结束标志$

MOVAH,2

MOVBH,0;页号

MOVDL,5;列号

MOVDH,7;行号

INT10H;源字符串提示光标位置设置

MOVAH,9

LEADX,PRESTR

INT21H;输出源字符串提示

MOVAH,9

LEADX,KEYBUF+2

INT21H;输出源字符串

LEABX,KEYBUF+2

LCHG:

CMPBYTEPTR[BX],61H

JBNOCHG

ANDBYTEPTR[BX],0DFH

NOCHG:

INCBX

LOOPLCHG;将字符串中小写字母转换成大写字母

MOVAH,2

MOVBH,0;页号

MOVDL,5;列号

MOVDH,8;行号

INT10H;新字符串提示光标位置设置

MOVAH,9

LEADX,NEWSTR

INT21H;输出新字符串提示

MOVAH,9

LEADX,KEYBUF+2

INT21H;输出新字符串

MOVAH,2

MOVBH,0;页号

MOVDL,5;列号

MOVDH,9;行号

INT10H;提示信息光标位置设置

MOVAH,9

LEADX,HINTSTR

INT21H;输出提示信息

RET

CHGLTRENDP

MAXLTRPROCFAR;在输入字符串中找出最大值

REMAX:

;设置显示器方式

MOVAH,0

MOVAL,3

MOVBL,0

INT10H;清屏

MOVAH,2

MOVBH,0;页号

MOVDL,5;列号

MOVDH,5;行号

INT10H;输入提示光标位置设置

MOVAH,9

LEADX,IN_STR

INT21H;输入字符串提示

MOVAH,2

MOVDL,5;列号

MOVDH,6;行号

INT10H;输入字符串光标位置设置

MOVAH,0AH

LEADX,KEYBUF

INT21H;输入字符串

CMPKEYBUF+1,0

JZREMAX;判断输入字符串是否为空串

LEABX,KEYBUF+2

MOVAL,KEYBUF+1

CBW

MOVCX,AX

ADDBX,AX

MOVBYTEPTR[BX],'$';在输入字符串位加结束标志$

MOVAH,2

MOVBH,0;页号

MOVDL,5;列号

MOVDH,7;行号

INT10H;源字符串提示光标位置设置

MOVAH,9

LEADX,OUT_STR

INT21H;输出字符串提示

MOVAH,9

LEADX,KEYBUF+2

INT21H;输出字符串

MOVAH,2

MOVBH,0;页号

MOVDL,5;列号

MOVDH,8;行号

INT10H;新字符串提示光标位置设置

MOVAH,9

LEADX,MAXCHR

INT21H;输出字符串中最大值提示

MOVDL,0

LEABX,KEYBUF+2

LCMP:

CMP[BX],DL

JBNOLCHG

MOVDL,[BX]

NOLCHG:

INCBX

LOOPLCMP;找出字符串中最大字符,放入DL

MOVAH,2

INT21H;输出字符串中最大字符

MOVAH,2

MOVBH,0;页号

MOVDL,5;列号

MOVDH,9;行号

INT10H;提示信息光标位置设置

MOVAH,9

LEADX,HINTSTR

INT21H;输出提示信息

RET

MAXLTRENDP

SORTNUMPROCFAR;对输入数据组排序

RESORT:

;设置显示器方式

MOVAH,0

MOVAL,3

MOVBL,0

INT10H;清屏

MOVAH,2

MOVBH,0;页号

MOVDL,5;列号

MOVDH,5;行号

INT10H;输入提示光标位置设置

MOVAH,9

LEADX,IN_NUM

INT21H

MOVAH,2

MOVDL,5;列号

MOVDH,6;行号

INT10H;输入数据组光标位置设置

MOVAH,0AH

LEADX,KEYBUF

INT21H;输入数据组字符串

CALLCIN_INT;字符串转换成数据串

CMPAL,0

JZRESORT;判断数据串是否有错

CMPNUMBUF,0

JZRESORT;判断数据串是否为空

 

MOVAH,2

MOVBH,0;页号

MOVDL,5;列号

MOVDH,7;行号

INT10H;输出提示光标位置设置

MOVAH,9

LEADX,OUT_NUM

INT21H;输出数据串提示

MOVAH,2

MOVBH,0;页号

MOVDL,5;列号

MOVDH,8;行号

INT10H;输出数据组光标位置设置

CALLFARPTRMPSORT;数据组排序

CALLFARPTRINT_OUT;数据组的输出

MOVAH,2

MOVBH,0;页号

MOVDL,5;列号

MOVDH,9;行号

INT10H;提示信息光标位置设置

MOVAH,9

LEADX,HINTSTR

INT21H;输出提示信息

RET

SORTNUMENDP

CIN_INTPROCNEAR;读入整型数

;入口参数:

;出口参数为:

AL(有无错误标志,0为有,1为无)

MOVCL,KEYBUF+1

LEASI,KEYBUF+2

MOVCH,0;数据组数据个数置0

MOVDH,10

MOVAL,0;当前数据x=0

MOVDL,0;有无数据标志置0,即无数据

FNDNUM:

CMPBYTEPTR[SI],''

JZADDNUM;判断当前字符是否为空格

CMPBYTEPTR[SI],'0'

JBERRNUM

CMPBYTEPTR[SI],'9'

JAERRNUM;判断当前字符是否在'0'-'9'之间

MOVDL,1;有无数据标志置1,即有数据

MULDH

XORBH,BH

MOVBL,[SI]

ADDAX,BX

SUBAX,'0';计算出当前数据x

CMPAH,0

JAERRNUM;判断x是否越界

JMPNEXT

ADDNUM:

CMPDL,1

JNZNEXT;判断是否有数据

INCCH;数据组数据个数加1

CALLADDNEW

MOVDL,0

MOVAL,0;清零

NEXT:

INCSI

DECCL

CMPCL,0

JNZFNDNUM;依次检查各字符

CMPDL,1

JNZTOTAL;判断是否有未加入的数据

INCCH

CALLADDNEW

TOTAL:

MOVNUMBUF,CH;置数据组数据个数

MOVAL,1;输入数据无错误

JMPCRTNUM

ERRNUM:

MOVAL,0;输入数据有错误

CRTNUM:

RET

CIN_INTENDP

ADDNEWPROCNEAR;增加新数

;入口参数:

CH(数据组数据个数)、AL(当前数据x)

;出口参数:

PUSHAX

LEABX,NUMBUF

MOVAL,CH

CBW

ADDBX,AX

POPAX

MOV[BX],AL

RET

ADDNEWENDP

MPSORTPROCFAR;数据组排序

MOVAL,NUMBUF

CMPAL,1

JBENOSORT;若只有一个元素,停止排序

CBW

MOVCX,AX

LEASI,NUMBUF;SI指向数据组首地址

ADDSI,CX;SI指向数据组末地址

DECCX;外循环次数

LP1:

;外循环开始

PUSHCX

PUSHSI

MOVDL,0;交换标志置0

LP2:

;内循环开始

MOVAL,[SI]

CMPAL,[SI-1]

JAENOXCHG

XCHGAL,[SI-1];交换操作

MOV[SI],AL

MOVDL,1;交换标志置1

NOXCHG:

DECSI

LOOPLP2

POPSI

POPCX

CMPDL,1

JNZNOSORT;判断交换标志

LOOPLP1

NOSORT:

RET

MPSORTENDP

INT_OUTPROCFAR;输出数据组

MOVAL,NUMBUF

CBW

MOVCX,AX

MOVBL,10H

LEASI,NUMBUF+1

PRINT:

MOVAL,[SI]

CALLOUTNUM

INCSI

MOVAH,2

MOVDL,''

INT21H

LOOPPRINT

RET

INT_OUTENDP

OUTNUMPROCNEAR;将十进制数以十六进制输出

;入口参数:

AL(待转换的数据),BL(转换进制数16)

;出口参数:

MOVAH,0

DIVBL

PUSHAX

CMPAH,10

JBPNUM

ADDAH,7

PNUM:

ADDAH,30H

MOVDL,AH

POPAX

PUSHDX

CMPAL,0

JZOUTN

CALLOUTNUM

OUTN:

POPDX

MOVAH,2

INT21H

RET

OUTNUMENDP

TIMCHKPROCFAR;设定并显示时间

;设置显示器方式

MOVAH,0

MOVAL,3;

MOVBL,0;

INT10H;清屏

MOVAH,2

MOVBH,0;页号

MOVDL,5;列号

MOVDH,6;行号

INT10H;设置提示光标位置设置

MOVAH,9

LEADX,IN_TIM

INT21H;时间串提示

MOVAH,0AH

LEADX,KEYBUF

INT21H;输入时间串

 

MOVBL,10

MOVAL,KEYBUF+2

SUBAL,'0'

MULBL

ADDAL,KEYBUF+3

SUBAL,'0'

CMPAL,0

JBINVALID

CMPAL,24

JAEINVALID;判断时有效性

MOVCH,AL

MOVAL,KEYBUF+5

SUBAL,'0'

MULBL

ADDAL,KEYBUF+6

SUBAL,'0'

CMP

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

当前位置:首页 > IT计算机 > 电脑基础知识

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

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