微机原理银行系统

DATA SEGMENT
STR1 DB 'Welcome!',0AH,0DH,'Please Input the Password: ','$'
STR2 DB 0AH,0DH,'Please Input: ','$'
STRPW DB '123456$'
STRPE_LEN EQU 6
STRERROR1 DB 0AH,0DH,'PASSWORD ERROR! You have',0AH,0DH,'$'
STRERROR2 DB ' Chances.Please Input the Right Password:','$'
STRLASTERROR DB 0AH,0DH,'PASSWORD ERROR! You have NO Chance.','$' 
STRRIGHT DB 0AH,0DH,'PASSWORD RIGHT!','$'
STRMENU DB 0AH,0DH,'1.Return DOS',0AH,0DH,'2.Check the Balance',0AH,0DH,'3.Save Money',0AH,0DH,'4.Get Money',0AH,0DH,'Please Input the Number: ','$'
STRGETBALANCE DB 0AH,0DH,'The Balance is:  ','$'
STROVERFLOW DB 0AH,0DH,'Operation Failed:The Number is Overflow','$'
STRZERO DB 0AH,0DH,'Operation Failed:The Number is Less than Zero','$' 
    BUFPW DB 40,?,40 DUP(?);缓冲密码(输入)
 COUNT DB 3;计密码输入次数
 ;ASCII DB 5 DUP(?),'$' ;保存十进制无符号数的ASCII
 ASCII DB 6 DUP(?),'$'
    ;ASCII_End DB '$' ;字符串结束标志
 MONEY DB 40,?,40 DUP(?)
 BALANCE DW 10000
 RESULT DW 0
DATA ENDS
STACK SEGMENT PARA STACK 'STACK'
      DB 100 DUP(?)
STACK ENDS
CODE SEGMENT
      ASSUME CS:CODE ,DS:DATA
START:
      MOV AX,DATA
      MOV DS,AX
   MOV ES,AX
      MOV AX,STACK
   MOV SS,AX
;显示欢迎界面
      MOV DX,OFFSET STR1
      MOV AH,09H
      INT 21H
;输入密码
REPW:
      MOV BX,OFFSET BUFPW
      MOV CL,0
      MOV AH,08H;输入字符不显示,输入字符放到AL中
      INT 21H        
PW:
      MOV [BX],AL
      INC BX
      MOV DL,2AH;显示星号
      MOV AH,02H
      INT 21H
      MOV AH,08H;输入字符不显示,输入字符放到AL中
      INT 21H
      INC CL;密码计数
      CMP AL,0DH;比较,改变标志位,输入结束判断标志
      JNZ PW
;输入串结束符   
      MOV CH,0
      MOV DX,OFFSET BUFPW
      ADD DX,CX
      MOV BX,DX
      MOV BYTE PTR[BX],'$'
;比较
      MOV BL,STRPE_LEN
      CMP CL,BL
      JNZ PWERR;密码长度不等时跳转到"PWERR"
 
      MOV DI,OFFSET STRPW
      MOV SI,OFFSET BUFPW
      REPZ CMPSB;检查两个字符串是否相等
      JZ  PWRIG;密码长度等时跳转到"PWEIG"
      JNZ PWERR;密码长度不等时跳转到"PWERR"
;密码输错了
PWERR:
 DEC COUNT;输入密码的次数减一
 JZ LAST
 ;显示strerror1
 MOV DX,OFFSET STRERROR1
 MOV AH,09H
 INT 21H
 ;显示count
 MOV DL,COUNT
 ADD DL,30H;转换成ASCII码,输出字符需要用到ASCII码
 MOV AH,02H
 INT 21H
 ;显示strerror2
        MOV DX,OFFSET STRERROR2
        MOV AH,09H
        INT 21H
  
 JNZ REPW;count不等于0的时候重新开始输入
;不可以再输入密码
LAST:
      MOV DX,OFFSET STRLASTERROR
      MOV AH,09H
      INT 21H     
      MOV AH,4CH
      INT 21H
;显示密码输入正确
PWRIG:
      MOV DX,OFFSET STRRIGHT
      MOV AH,09H
      INT 21H
  
;显示菜单
MENU:
      MOV DX,OFFSET STRMENU
      MOV AH,09H
      INT 21H
;读取菜单编号
   MOV AH,01H
   INT 21H
   CMP AL,'2'
   JZ  GETBALANCE
   CMP AL,'3'
   JZ  SAVE
   CMP AL,'4'
   JZ  GET
   JMP EXIT
 
GETBALANCE: 
   MOV DI,OFFSET ASCII
   MOV AX,BALANCE        
   MOV BX,10000
   MOV CX,5
        
      DEC2ASC:;每一位变成ACSII码显示
          XOR DX,DX  
   DIV BX
   ADD AX,30H
   MOV [DI],AX
   INC DI
   MOV SI,DX
   ;BX除以10
   MOV AX,BX
   MOV BX,10
   XOR DX,DX
   DIV BX
   MOV BX,AX 
          MOV AX,SI
   LOOP DEC2ASC
  
   LEA DX,STRGETBALANCE   
   MOV AH,09H       ;显示结果
   INT 21H
  
   MOV DX,OFFSET ASCII  
          MOV AH,09H
          INT 21H
 
   JMP MENU
;存钱
SAVE:
   CALL TRANSFORM  
   ADD BALANCE,SI
   JNC MENU;判断是否溢出
   SUB BALANCE,SI
   LEA DX,STROVERFLOW  
          MOV AH,09H      
          INT 21H 
  
   JMP MENU
;取钱  
GET:
   CALL TRANSFORM  
   SUB BALANCE,SI
   JNC MENU
   ADD BALANCE,SI
   LEA DX,STRZERO 
          MOV AH,09H      
          INT 21H
  
   JMP MENU
;输入钱数  
TRANSFORM:
          LEA DX,STR2  
          MOV AH,09H      
          INT 21H   
  
   LEA DX,MONEY
   MOV AH,0AH;字符串输入
   INT 21H
   MOV CL,MONEY+1   ;实际读入字符的个数
   XOR CH,CH
   ADD DX,CX
   ADD DX,2
   MOV BX,DX
   MOV BYTE PTR[BX],'$'
     
          MOV DI,OFFSET MONEY
   ADD DI,CX
   ADD DI,1   ;得到最后一位数的地址
  
   MOV AX,1
   MOV SI,0
;钱数以十进制形式计算
TRANS1:
   XOR BX,BX
   MOV BL,[DI]
   SUB BL,30H  
   XCHG AX,BX  
   MUL BX  
   ADD SI,AX         ;加入DX总和  
   DEC DI     
   MOV AX,10
   MUL BX    
   LOOP TRANS1
          RET   
  
;退出
EXIT:
      MOV AH,4CH
      INT 21H
CODE ENDS
      END START
   
  • 1
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值