东华大学微机实验报告答案(软件)(5)

2020-02-21 12:49

;算法为:一个学生的名次等于成绩高于该生的学生人数加1

RANKP PROC NEAR

MOV DI,COUNT MOV BX,0 _LOOP:

MOV AX,GRADE[BX] ;取学生成绩

MOV WORD PTR RANK[BX],0 ;初始化RANK[BX]的值为0 MOV CX,COUNT

LEA SI,GRADE ;第一个学生的成绩 _NEXT1:

CMP AX,[SI] ;比较两个成绩

JG _JUMP ;成绩大于被比较的跳过 INC WORD PTR RANK[BX] _JUMP:

ADD SI,2 ;取下一个被比较成绩的地址 LOOP _NEXT1

ADD BX,2 ; 下一个成绩

DEC DI ;未比较成绩个数减1 JNE _LOOP RET RANKP ENDP

;OUTPUT程序段

;从rank数组取得一个班的学生名次。把一个班的学生名次以学号为序在终端显示出来 ;调用子模块binidec,以便把rank数组中的二进制数转成十进制数并在终端上显示出来.调用子模块crlf完成回车,换行功能.

OUTPUT PROC NEAR

LEA DX,SHOW MOV AH,09H INT 21H

MOV SI,0

MOV DI,COUNT _NEXT2:

MOV BX,RANK[SI] ;将成绩保存到BX中 CALL BINIDEC ;调用BINIDEC

CMP DI,1 ;将剩余的成绩个数与1比较,若为1则不显示',' JE _NOCOMMA MOV DL,',' MOV AH,02H

INT 21H ;显示','

_NOCOMMA:

ADD SI,02H ;取下一个成绩名次 DEC DI

JNZ _NEXT2

MOV DX,OFFSET CR ;换行 MOV AH,9 INT 21H RET OUTPUT ENDP

;DECIBIN程序段

;从键盘取得一个十进制数。把该数转换成二进制数并存入BX寄存器中。

DECIBIN PROC NEAR

MOV BX,0 _CATCH:

MOV AH,01H INT 21H

MOV DL,AL

SUB AL,30H

JL _ENDCHANGE ;小于则结束SFVOF=1 CMP AL,39H

JG _ENDCHANGE ;大于则结束 CBW

XCHG AX,BX ;AX与BX值交换 MOV CX,10

MUL CX ;无符号数乘法指令,(AX)<----(AL)*(CX)

XCHG AX,BX

ADD BX,AX ;(BX)<------(BX)+(AX) JMP _CATCH _ENDCHANGE:

RET DECIBIN ENDP

;BINIDEC程序段

;把bx寄存器中的二进制数转换成10进制数,并在终端屏幕上显示出来。调用dec_div来作除法运算并显示字符。

BINIDEC PROC NEAR

PUSH BX PUSH CX PUSH SI

PUSH DI ;压栈

MOV CX,10

CALL DEC_DIV ;调用DEC_DIV

MOV CX,1

CALL DEC_DIV ;调用DEC_DIV

POP DI POP SI POP CX

POP BX ;出栈 RET BINIDEC ENDP

;DEC_DIV程序段

;把bx中二进制数除以相应的十的幂,并在屏幕上显示一位商。余数保存在bx寄存器中。

DEC_DIV PROC NEAR

MOV AX,BX MOV DX,0 DIV CX

MOV BX,DX MOV DL,AL ADD DL,30H

MOV AH,02H

INT 21H ;显示 RET DEC_DIV ENDP

CODE ENDS END START

运行结果:

1、 思考题:

(1)写出4位BCD码转二进制数的算法。 设AX寄存器中存放着4位BCD码 BCDTO2 PROC NEAR PUSH BX PUSH CX PUSH DX

MOV BX, AX ;保存AX中的BCD码到BX MOV AX, 0 ;结果单元清0

MOV CX, 4 ;共处理4位BCD码 RETRY: PUSH CX MOV CL, 4

ROL BX, CL ;最高1位BCD码移到BX中的低半字节 POP CX

MUL W10 ;累加和AX x 10 -> DX:AX PUSH BX

AND BX, 000FH ;取出BX中的1位BCD码 ADD AX, BX ;累加到AX中 POP BX LOOP RETRY POP DX POP CX POP BX RET BCDTO2 ENDP

(2) 写出AX中进二制数转BCD码的算法。

W1000 DW 1000,100,10,1 ;十进制数千,百,十,个位权值 ;入口参数:AX=二进制数。出口参数:AX=压缩BCD码 AX2TOBCD PROC NEAR

XOR BX, BX ;BCD码暂存单元清0 MOV SI, OFFSET W1000 ;权值首地址送SI MOV CX, 4 ;循环次数4 -> CX RETRY: PUSH CX

MOV CL, 4 SHL BX, CL

MOV DX, 0 ;DX:AX组成被除数

DIV WORD PTR[SI] ;除以权值,商,余数在AX,DX中 OR BX, AX ;压缩BCD码 MOV AX, DX ;余数送AX POP CX

ADD SI, 2 ;地址加2,指向下一权值 LOOP RETRY

MOV AX, BX ;BCD码由BX -> AX RET

AX2TOBCD ENDP


东华大学微机实验报告答案(软件)(5).doc 将本文的Word文档下载到电脑 下载失败或者文档不完整,请联系客服人员解决!

下一篇:2017-2022年中国粉丝经济市场发展态势及未来前景分析报告

相关阅读
本类排行
× 注册会员免费下载(下载后可以自由复制和排版)

马上注册会员

注:下载文档有可能“只有目录或者内容不全”等情况,请下载之前注意辨别,如果您已付费且无法下载或内容有问题,请联系我们协助你处理。
微信: QQ: