Assembly language-branching program

Assembly language-branching program

题目

编写一个单字符加密程序,程序从键盘输入一个字符,经过加密后显示输出。加密 算法为:数字密文=原文循环加3,字母密文=原文循环加5。即0->31->4…7->08->19 既不是数字也不是学母的字符按原样输中。

Tool:

emu8086

Structure:

program:

DATA SEGMENT ;SEGMENT是分段的逻辑标志
    str1 DB "PLEASE INPUT A NUMBER 0-9 OR A CHAR:$"
    str2 DB "OUTPUT:$"
    str3 DB "IF YOU WANT CONTINUE PLEASE ENTER THE #:$ "
    str4 DB "THIS PROGRAM IS OVER,THANKS:$"
    input DB '0'
    output DB '0'
    A DB '0'
DATA ENDS  ;SEGMENT以ENDS结束

CODE SEGMENT ;代码段
    ASSUME CS:CODE,DS:DATA ; 伪指令,告诉编译器段寄存器和段名之间的关系

START: 
        MOV AX,DATA
        MOV DS,AX
        
BEGIN:
        LEA DX,str1 ;输出字符串1
        MOV AH,9
        INT 21H
        
        MOV AH,1  ;从键盘输入一个字符
        INT 21H
        MOV BL,AL  ; 将接收到的字符转到BL寄存器中
        
        MOV DL,0DH  ;回车
        MOV AH,02H
        INT 21H
        MOV DL,0AH  ;换行
        MOV AH,02H
        INT 21H

        LEA DX,str2  ;输出字符串2
        MOV AH,9
        INT 21H
        
        MOV input,BL  ;赋值给input
        CMP input,'0' ;与0比较
        JL L
        CMP input,'9' ;与9比较
        JLE L1
        CMP input,40H
        JL L
        CMP input,'Z'
        JLE L2
        CMP input,60H
        JL L
        CMP input,'z'
        JLE L3

L:     ;L1标志,直接输出BL寄存器的值
        MOV output,BL
        MOV DL,output
        MOV AH,02H
        INT 21H     

L1:     ;L11标志,输出加密结果
        MOV BL,input
        ADD BL,03H
        MOV A,BL
        CMP A,'9' ;与9比较
        JG L11
        MOV output,BL
        MOV DL,output
        MOV AH,02H
        INT 21H
        JMP NEXT

L11: ;数字超出循环输出
        SUB BL,0AH
        MOV output,BL
        MOV DL,output
        MOV AH,02H
        INT 21H
        JMP NEXT

L2:     ;L2标志,输出加密结果
        MOV BL,input
        ADD BL,05H
        MOV A,BL
        CMP A,'Z' ;与Z比较
        JG CHARout
        MOV output,BL
        MOV DL,output
        MOV AH,02H
        INT 21H
        JMP NEXT


L3:     ;L2标志,输出加密结果
        MOV BL,input
        ADD BL,05H
        MOV A,BL
        CMP A,'z' ;与z比较
        JG CHARout
        MOV output,BL
        MOV DL,output
        MOV AH,02H
        INT 21H
        JMP NEXT

CHARout: ;字符超出循环输出
        SUB BL,1AH
        MOV output,BL
        MOV DL,output
        MOV AH,02H
        INT 21H
        JMP NEXT

NEXT: ;继续程序
        MOV DL,0DH  ;回车
        MOV AH,02H
        INT 21H
        MOV DL,0AH  ;换行
        MOV AH,02H
        INT 21H

        LEA DX,str3 ;输出提示字符串3
        MOV AH,09
        INT 21H
        
        MOV AH,1 ;接收一个字符
        INT 21H
        MOV BH,AL

        MOV DL,0DH  ;回车
        MOV AH,02H
        INT 21H
        MOV DL,0AH  ;换行
        MOV AH,02H
        INT 21H

        CMP BH,'#' ;判断用户输入的字符
        JE BEGIN
        JMP DOWN
    
DOWN:
    MOV DL,0DH  ;回车
    MOV AH,02H
    INT 21H
    MOV DL,0AH  ;换行
    MOV AH,02H
    INT 21H
    
    LEA DX,str4 ; 程序结束语
    mov ah,09
    INT 21h
    
    MOV AH,4CH ;结束
    INT 21H
CODE ENDS
    END START

Computational results

Konwledge point

  1. the string value need the $ in ending
  2. need to enter before you wrap,if you need “wrap”
  • 2
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值