微机原理上机答案(西电)Word文件下载.docx
《微机原理上机答案(西电)Word文件下载.docx》由会员分享,可在线阅读,更多相关《微机原理上机答案(西电)Word文件下载.docx(19页珍藏版)》请在冰点文库上搜索。
4.ShowTime;
STRING5 DB'
5.Exit.'
STRINGN DB'
Inputthenumberyouselect(1-5):
$'
IN_STR DB'
Inputthestring(includingletters&
numbers,lessthan60letters):
PRESTR DB'
Originalstring:
NEWSTR DB'
Newstring:
OUT_STR DB'
Thestringis$'
MAXCHR DB'
Themaximumis$'
IN_NUM DB'
Inputthenumbers(0-255,nomorethan20numbers):
'
OUT_NUM DB'
Sortednumbers:
IN_TIM DB'
Correctthetime(HH:
MM:
SS):
HINTSTR DB'
PressESC,gobacktothemenu;
orpressanykeytoplayagain!
KEYBUF DB61
DB?
DB61DUP(?
NUMBUF DB?
DB20DUP(?
DATA ENDS
CODE SEGMENT
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
5'
JAAGAIN
SUBAL,'
;
N-1
SHLAL,1 ;
(N-1)*2
CBW ;
AL->
AX
LEABX,TABLE
ADDBX,AX
JMPWORDPTR[BX]
G1:
CALLFARPTRCHGLTR
MOVAH,8
CMPAL,1BH
JZMAIN
JMPG1
G2:
CALLFARPTRMAXLTR
JMPG2
G3:
CALLFARPTRSORTNUM
JMPG3
G4:
CALLFARPTRTIMCHK
JZMAIN
JMPG4
G5:
MOVAH,4CH
MENU PROCFAR ;
显示主界面
;
设置显示器方式
MOVAH,0
MOVAL,3;
MOVBL,0;
清屏
MOVDL,5 ;
MOVDH,5 ;
MOVAH,9
LEADX,STRING1
MOVDH,6 ;
LEADX,STRING2
MOVDH,7 ;
LEADX,STRING3
MOVDH,8 ;
LEADX,STRING4
MOVDH,9 ;
LEADX,STRING5
LEADX,STRINGN
RET
MENU ENDP
CHGLTR PROCFAR ;
将输入字符串中小写字母便换成大写字母
RECHG:
MOVAL,3
MOVBL,0
输入提示光标位置设置
LEADX,IN_STR
INT21H ;
输入字符串提示
输入字符串光标位置设置
MOVAH,0AH
LEADX,KEYBUF
输入字符串
CMPKEYBUF+1,0
JZRECHG ;
判断输入字符串是否为空串
LEABX,KEYBUF+2
MOVAL,KEYBUF+1
CBW
MOVCX,AX
MOVBYTEPTR[BX],'
;
在输入字符串尾加结束标志$
源字符串提示光标位置设置
LEADX,PRESTR
输出源字符串提示
LEADX,KEYBUF+2
输出源字符串
LCHG:
CMPBYTEPTR[BX],61H
JBNOCHG
ANDBYTEPTR[BX],0DFH
NOCHG:
INCBX
LOOPLCHG ;
将字符串中小写字母转换成大写字母
新字符串提示光标位置设置
LEADX,NEWSTR
输出新字符串提示
输出新字符串
提示信息光标位置设置
LEADX,HINTSTR
输出提示信息
CHGLTR ENDP
MAXLTR PROCFAR ;
在输入字符串中找出最大值
REMAX:
JZREMAX ;
在输入字符串位加结束标志$
LEADX,OUT_STR
输出字符串提示
输出字符串
LEADX,MAXCHR
输出字符串中最大值提示
MOVDL,0
LCMP:
CMP[BX],DL
JBNOLCHG
MOVDL,[BX]
NOLCHG:
LOOPLCMP ;
找出字符串中最大字符,放入DL
输出字符串中最大字符
MAXLTR ENDP
SORTNUM PROCFAR ;
对输入数据组排序
RESORT:
LEADX,IN_NUM
输入数据组光标位置设置
输入数据组字符串
CALLCIN_INT ;
字符串转换成数据串
CMPAL,0
JZRESORT ;
判断数据串是否有错
CMPNUMBUF,0
判断数据串是否为空
输出提示光标位置设置
LEADX,OUT_NUM
输出数据串提示
输出数据组光标位置设置
CALLFARPTRMPSORT ;
数据组排序
CALLFARPTRINT_OUT ;
数据组的输出
SORTNUM ENDP
CIN_INT PROCNEAR ;
读入整型数
;
入口参数:
无
出口参数为:
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 ;
判断当前字符是否为空格
0'
JBERRNUM
9'
JAERRNUM ;
判断当前字符是否在'
-'
之间
MOVDL,1 ;
有无数据标志置1,即有数据
MULDH
XORBH,BH
MOVBL,[SI]
ADDAX,BX
SUBAX,'
计算出当前数据x
CMPAH,0
判断x是否越界
JMPNEXT
ADDNUM:
CMPDL,1
JNZNEXT ;
判断是否有数据
INCCH ;
数据组数据个数加1
CALLADDNEW
清零
NEXT:
INCSI
DECCL
CMPCL,0
JNZFNDNUM ;
依次检查各字符
JNZTOTAL ;
判断是否有未加入的数据
INCCH
TOTAL:
MOVNUMBUF,CH ;
置数据组数据个数
MOVAL,1 ;
输入数据无错误
JMPCRTNUM
ERRNUM:
输入数据有错误
CRTNUM:
RET
CIN_INTENDP
ADDNEW PROCNEAR ;
增加新数
CH(数据组数据个数)、AL(当前数据x)
出口参数:
PUSHAX
LEABX,NUMBUF
MOVAL,CH
POPAX
MOV[BX],AL
ADDNEW ENDP
MPSORT PROCFAR ;
MOVAL,NUMBUF
CMPAL,1
JBENOSORT ;
若只有一个元素,停止排序
LEASI,NUMBUF ;
SI指向数据组首地址
ADDSI,CX ;
SI指向数据组末地址
DECCX ;
外循环次数
LP1:
;
外循环开始
PUSHCX
PUSHSI
交换标志置0
LP2:
内循环开始
MOVAL,[SI]
CMPAL,[SI-1]
JAENOXCHG
XCHGAL,[SI-1] ;
交换操作
MOV[SI],AL
交换标志置1
NOXCHG:
DECSI
LOOPLP2
POPSI
POPCX
JNZNOSORT ;
判断交换标志
LOOPLP1
NOSORT:
RET
MPSORT ENDP
INT_OUT PROCFAR ;
输出数据组
MOVBL,10H
LEASI,NUMBUF+1
PRINT:
CALLOUTNUM
MOVDL,'
LOOPPRINT
INT_OUTENDP
OUTNUM PROCNEAR ;
将十进制数以十六进制输出
AL(待转换的数据),BL(转换进制数16)
DIVBL
CMPAH,10
JBPNUM
ADDAH,7
PNUM:
ADDAH,30H
MOVDL,AH
PUSHDX
JZOUTN
OUTN:
POPDX
OUTNUM ENDP
TIMCHK PROCFAR ;
设定并显示时间
设置提示光标位置设置
LEADX,IN_TIM
时间串提示
输入时间串
MOVBL,10
MOVAL,KEYBUF+2
MULBL
ADDAL,KEYBUF+3
JBINVALID
CMPAL,24
JAEINVALID ;
判断时有效性
MOVCH,AL
MOVAL,KEYBUF+5
ADDAL,KEYBUF+6
CMPAL,60
JAEIN