汇编程序实验

从键盘输入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’

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值