西电微机基础原理上机课后复习第三.docx

上传人:b****5 文档编号:8310282 上传时间:2023-01-30 格式:DOCX 页数:23 大小:157.04KB
下载 相关 举报
西电微机基础原理上机课后复习第三.docx_第1页
第1页 / 共23页
西电微机基础原理上机课后复习第三.docx_第2页
第2页 / 共23页
西电微机基础原理上机课后复习第三.docx_第3页
第3页 / 共23页
西电微机基础原理上机课后复习第三.docx_第4页
第4页 / 共23页
西电微机基础原理上机课后复习第三.docx_第5页
第5页 / 共23页
点击查看更多>>
下载资源
资源描述

西电微机基础原理上机课后复习第三.docx

《西电微机基础原理上机课后复习第三.docx》由会员分享,可在线阅读,更多相关《西电微机基础原理上机课后复习第三.docx(23页珍藏版)》请在冰豆网上搜索。

西电微机基础原理上机课后复习第三.docx

西电微机基础原理上机课后复习第三

微机上机作业三

 

内容:

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

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

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

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

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

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

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

汇编程序:

STACKSEGMENTSTACK

DB256DUP(?

TOPLABELWORD

STACKENDS

DATASEGMENT

TABLEDWG1,G2,G3,G4,G5

STRING0DB'FormtheschoolIDis02111460LiCheng',0DH,0AH,'$'

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,STRING0

INT21H

MOVAH,2

MOVDL,5;列号

MOVDH,6;行号

INT10H;光标位置设置

MOVAH,9

LEADX,STRING1

INT21H

MOVAH,2

MOVDL,5;列号

MOVDH,7;行号

INT10H;光标位置设置

MOVAH,9

LEADX,STRING2

INT21H

MOVAH,2

MOVDL,5;列号

MOVDH,8;行号

INT10H;光标位置设置

MOVAH,9

LEADX,STRING3

INT21H

MOVAH,2

MOVDL,5;列号

MOVDH,9;行号

INT10H;光标位置设置

MOVAH,9

LEADX,STRING4

INT21H

MOVAH,2

MOVDL,5;列号

MOVDH,10;行号

INT10H;光标位置设置

MOVAH,9

LEADX,STRING5

INT21H

MOVAH,2

MOVDL,5;列号

MOVDH,11;行号

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'

CMPAL,0

JBINVALID

CMPAL,60

JAEINVALID;判断分有效性

MOVCL,AL

MOVAL,KEYBUF+8

SUBAL,'0'

MULBL

ADDAL,KEYBUF+9

SUBAL,'0'

CMPAL,0

JBINVALID

CMPAL,60

JAEINVALID;判断秒有效性

MOVDH,AL

MOVDL,0

MOVAH,2DH

INT21H;置系统时间

INVALID:

CALLTIME

RET

TIMCHKENDP

TIMEPROC

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

当前位置:首页 > 工程科技 > 建筑土木

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

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