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

发布时间 : 星期六 文章东华大学微机实验报告答案(软件) (3000字)更新完毕开始阅读

int 21h

mov ax,4ch int 21h

;input程序段

;以学号为序从键盘输入一个班的学生成绩,各个成绩之间 用逗号格开,最后以回车符结束。

;然后把一个班的成绩存入grade数组。 input proc near lea dx,enter mov ah,9

int 21h ;提示用户输入 mov si,0

mov count,0 ;将输入用户的输入个数置0

_enter: ;对用户的输入进行监视,对错误输入立即进行出错处理call decibin ;调用decibin ;对用户输入进行处理 inccount

cmp dl,, ;与,比较,相同则保存成绩,不同出错je _store

cmp dl,0dh ;与回车键进行比较,回车则成绩输入结束je _endenter jne _error ;出错处理:显示出错信息 _store:;保存成绩 mov grade[si],bx add si,2 jmp _enter _error:

lea dx,error mov ah,9 int 21h

_endenter: ;用户结束成绩输入 mov grade[si],bx

mov dx,offset cr ;换行 mov ah,9 int 21h ret

input endp

;rankp程序段

;从grade数组取得一个班的成绩,以学号为序计算出该班每个学生的名次存入rank数组。;算法为:一个学生的名次等于成绩高于该生的学生人数加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 ;成绩大于被比较的跳过 incword 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 int21h

mov si,0 mov di,count _next2:

mov bx,rank[si] ;将成绩保存到bx中 call binidec ;调用binidec mov dl,,

mov ah,02hint21h ;显示,

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 int21h

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 divcx

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 retrymov ax, bx ;bcd码由bx -> ax ret ax2tobcd endp

实验九 综合程序设计

设有十个学生成绩分别是76,69,84,90,73,88,99,63,100和80分。试编制一个子程序,统计低于60分,60~69分,70~79分,80~89分,90~99分和100分的人数,并输出显示统计结果。 源程序: data segment

s1 db below 60:,$ s2 db 60~69: ,$

联系合同范文客服:xxxxx#qq.com(#替换为@)