武汉理工大学《微机原理》课程设计说明书
lea dx,input mov ah,09h int 21h
mov bl,0ffh
mov ibuf+5,bl ;将ibuf里第三位数置为0ffh
lea dx,ibuf mov ah,0ah int 21h mov si,dx mov bl,[si+5]
cmp bl,0ffh ;存在
jne error ;
mov bl,[si+2] ;cmp bl,30h ;jna error ;cmp bl,3ah ;jnb error
mov bl,[si+3] ;cmp bl,2fh ;jna error cmp bl,3ah jnb error jmp correct error:
lea dx,ERROR_MESS ;
与第三位进行比较判断是否有三位判定是否出错 判定输入是否为小于10的数 十位跟零比较
小于等于0就跳到错误 大于9就会错误 个位跟零比较 小于0就错误 出错提示
15武汉理工大学《微机原理》课程设计说明书
mov ah,09h int 21h jmp start exit: mov ah,4ch int 21h
correct: mov cl,ibuf+1 xor ch,ch
mov si,offset ibuf+2
mov ax,0 ;循环运算前的初始化
again: ; (((0*10 * a0)*10 + a1)*10 + a2) mov dx,10
mul dx ;在做乘法的过程中不用考虑dx,因为输入的数为0~99,所以dx总是为0
mov bl,byte ptr [si] ;取出该字符的ASCLL码 sub bl,30h ;将其减去30H得到数值 add al,bl
adc ah,0 ;在做加法是要考虑是否有进位 inc si loop again
mov cx,ax mov ax,0 mov bx,1
loop2: add ax,bx inc bx
loop loop2;这个循环就实现了sum = 1 + 2 + ... + n的操作了
16
武汉理工大学《微机原理》课程设计说明书
mov bx,offset obuf+7
mov byte ptr [bx],'$';将最后一个字节赋值为'$'以便将数字字符串输出出来。
mov cx,10 jmp loop1 loop1 : mov dx,0
div cx ;(ax <- ax/10) ax 中存放的是商,汇编中16进制就可以当做10进制来运算
add dl,30h ; dl中存放的是余数 dec bx ;将指针前移一个字节 mov [bx],dl ;将余数放在字符串的末尾 or ax,ax ;当ax为0时结束
jnz loop1 ;当ZF==0时跳转,jump not zero dec bx
mov byte ptr [bx],0dh dec bx
mov byte ptr [bx],0ah ;在字符串的前面加上回车换行。
lea dx,output ;输出提示 mov ah,09h int 21h mov dx,bx mov ah,09h
int 21h ;显示字符串bx j start
17
武汉理工大学《微机原理》课程设计说明书
code ends end start
18
武汉理工大学《微机原理》课程设计说明书
本科生课程设计成绩评定表
姓 名 专业、班级 课程设计题目: 课程设计答辩或质疑记录: 性 别 成绩评定依据: 最终评定成绩(以优、良、中、及格、不及格评定) 指导教师签字:
年 月 日
19