需求分析:
- 提示输入一个字符:please input a letter:
- 判断是大写范围还是小写范围cmp al<5bH 且>=41h则是大写范围,al>60h,且<=7ah则是小写范围,这里请参考assic码对照表
- 不在字母范围 提示只能有三次错误机会,超出三次,程序将会退出
- 在字母范围 大写->小写+20h ,小写->大写-20h
程序设计:
- 通用代码段
– 输入提示
– 输出结果显示 输入+3eh(>) +输出
– 换行代码段 (设计为子程序,随处调用)
– 错误提示 - 程序逻辑
– 输入字符并显示
– 循环控制 loop
– 逻辑跳转 jl (小于转移)jlz(大于等于) jgz(小于等于)
– 输出转换结果 a->A
– 未有输入错误则继续提示输入
– 记录错误次数
代码展示
data segment
input_str db 'please input a letter: ','$'
result_str db 'result is: ','$'
error_str db 'error: What you typed is not a letter, and after three errors, the program will exit','$'
end_str db 'program ends.....','$'
data ends
code segment
assume cs:code,ds:data
start:
mov ax,data
mov ds,ax
mov cx,30h
input: ;输入逻辑
mov dx,offset input_str
call ah09
mov ah,01h
int 21h
cmp al,5bh
jl upper
cmp al,60h
jg lower
jmp error
lower: ;//小写处理
cmp al,7ah
jg error
sub al,20h
jmp result
upper: ;//大写处理
cmp al,41h
jl error
add al,20h
jmp result
result: ;//结果处理
mov dl,al
push dx
call ah0a
mov dx,offset result_str
call ah09
pop dx
call ah02
call ah0a
jmp input
error: ;输入有误
call ah0a
mov dx,offset error_str
call ah09
inc cx
cmp cx,33h
je exit
call ah0a
jmp input
exit:
call ah0a
mov dx,offset end_str
call ah09
mov ah,4ch
int 21h
ah09 proc near ;显示字符串
mov ah,09h
int 21h
ret
ah09 endp
ah02 proc near ;显示输出
mov ah,02h
int 21h
ret
ah02 endp
ah0a proc near
mov dl,0ah
call ah02
ret
ah0a endp
code ends
end start
本代码是我作为初学汇编语言的一个探索,希望能得到批评指正。