从键盘输入8位二进制数作为逻辑尺。再输入一个英文字母,根据逻辑尺当前的最高位标志显示输出该字母的相邻字符,标志位为0则,判断前驱字符是否存在,如果存在则显示其前趋字符,否则打印处’no pre-char’, 打印字符本身,标志位为1则,判断后继字符是否存在,如果存在则显示其后继字符,否则打印处’no next-char’, 打印字符本身。显示相邻字符后,逻辑尺循环左移一位,再接收下一个字母的输入,并依据逻辑尺显示相邻字符,直到回车键结束程序。
代码:
data segment
Tip1 db 'no pre-char$'
Tip2 db 'no next-char$'
Tip3 db 'Please input binary numbers$'
Tip4 db 'Please input a letter$'
Tip5 db 'Error ,please retype!$'
Tip6 db 'The pre-char:$'
Tip7 db 'The next-char:$'
letter db ?
data ends
code segment
assume ds:data,cs:code
main proc far
mov ax,data
mov ds,ax
mov ah,9;输出Tip3,二进制数
lea dx,Tip3
int 21h
call crlf
CALL input
call crlf
call fun
ret
main endp
input proc near;二进制输入到bx寄存器
mov bx,0
mov cx,8
s1:
mov ah,1
int 21h
cmp al,30h
jb a;若不是数则报错并退出子程序
cmp al,31h
ja a;若不是数则报错并退出子程序
sub al,30h
shl bl,1
add bl,al
loop s1
jmp e
a: call crlf
mov ah,9
lea dx,Tip5
int 21h
call crlf
mov bx,0
mov cx,8
jmp s1
e:ret
input endp
fun proc near
mov cx,8
snn:
mov ah,9;输出Tip4,输入一个字母
lea dx,Tip4
int 21h
call crlf
mov ah,1;键盘输入,放在al中
int 21h
mov [letter],al
mov al,bl
and al,80h
cmp al,80h
je t1
jmp t2
d: rol bx,1
loop snn
jmp exit1
t1: call crlf
mov ah,09;后继字母
lea dx,Tip7
int 21h
mov al,letter
cmp al,'z'
je q1
add al,1
mov ah,2
mov dl,al
int 21h
call crlf
jmp d
t2: call crlf
mov ah,09;前序字母
lea dx,Tip6
int 21h
mov al,letter
cmp al,'a'
je q2
sub al,1
mov ah,2
mov dl,al
int 21h
call crlf
jmp d
q1:
mov ah,9
lea dx,Tip2
int 21h
call crlf
jmp d
q2:
mov ah,9
lea dx,Tip1
int 21h
call crlf
jmp d
exit1:ret
fun endp
crlf proc near
mov ah,02
mov dl,0ah
int 21h
ret
crlf endp
code ends
end main
测试结果截图:
功能介绍:
①自动查错,出错之后提示重新输入
②提示输出一个字母,逻辑尺为1时输出字母的后继字母,如果没有后继字母则提示’no next-char’
③提示输出一个字母,逻辑尺为0时输出字母的前驱字母,如果没有前驱字母则提示’no pre-char’