⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 1a.asm

📁 自己的课程设计
💻 ASM
📖 第 1 页 / 共 2 页
字号:
OUTPUT MACRO SDF
  LEA DX,SDF
  MOV AH,9H
  INT 21H
  CLS
ENDM
ENTER MACRO 
  MOV DL,0DH
  MOV AH,2H
  INT 21H
  MOV DL,0AH
  MOV AH,2H
  INT 21H
ENDM
CLS  MACRO
   XOR AX,AX
   XOR BX,BX
   XOR CX,CX
   XOR DX,DX
ENDM
ENTER MACRO 
  MOV DL,0DH
  MOV AH,2H
  INT 21H
  MOV DL,0AH
  MOV AH,2H
  INT 21H
ENDM
CLSA MACRO   ;===============清屏函数
   MOV     AH,0FH   
   INT     10H   
   MOV     AH,0   
   INT     10H 
ENDM
WRONG1 MACRO CUO
 ENTER
 LEA DX,WROMES
 MOV AH,9H
 INT 21H
 JMP FAR PTR CUO
ENDM
DATA SEGMENT
  BUF00 DB "             *************************************************$"
  BUF01 DB "             ||           THIS IS A CALCULATRICE            ||$"
  BUF02 DB "             ||            ^_^              ^_^             ||$"
  BUF03 DB "             *************************************************$"
  BUF04 DB "THIS IS A CALCULATRICE,YOU CAN USE IT DO THE CALCULER!!$"
  BUF05 DB "1:>>>>>>>>>>>>>>>>>>>>>>>>>>>>>ADDITION<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<:1$"  
  BUF06 DB "2:>>>>>>>>>>>>>>>>>>>>>>>>>>>SOUSTRACTION<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<:2$"
  BUF07 DB "3:>>>>>>>>>>>>>>>>>>>>>>>>>>MULTIPLICATION<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<:3$"
  BUF08 DB "4:>>>>>>>>>>>>>>>>>>>>>>>>>>>>>DIVISION<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<:4$"
  BUF09 DB "5:>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>CLS<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<:5$"
  BUF10 DB "PLEASE INPUT YOU CHOUSE!!!$"
  ALPH DB "CONTINU OR NOT,YES PRESS Y/NO PRESS ANY KEYS$"
  ALPH1 DB "WRONG,THE TWO NUMBER MUST BE ALL HAVE!!$"
  WROMES DB "YOU HAVE INPUT A WRONG NUMBER!!NOT BETWEEN(0-9 | A-F)$"
  ALPH2 DB "PLEASE INPUT TWO NUMBER:$"
  BUF2 DB "1) $"
  BUF3 DB " 2) $"
  BUF DB 5,?,5 DUP(?)
  BUF1 DB 5,?,5 DUP(0)
  BUF0 DB 5 DUP (?)
  BUF0A DB 9 DUP (?)
  X  DW ?
DATA ENDS       ;====================数据段结束
SSS SEGMENT STACK
  DB 100 DUP(0)
SSS ENDS
CODE SEGMENT    ;===================代码段开始
  ASSUME CS:CODE,DS:DATA
STARTT:
   MOV AX,DATA 
   MOV DS,AX
;==================
ADDNUM PROC FAR
CON0:
   CLS
   CLSA
   ENTER
   MOV SI,0
   MOV DI,0
   LEA DX,ALPH2
   MOV AH,9H
   INT 21H
   ENTER
   XOR DX,DX
   MOV AL,0CH    ;清除键盘缓冲区
   INT 21H
;=================
   OUTPUT BUF2
   LEA DX,BUF    ;输入被加数
   MOV AH,0AH
   INT 21H
   ENTER
;------------
   OUTPUT BUF3
   LEA DX,BUF1   ;输入加数
   MOV AH,0AH
   INT 21H
   CLS
;=====================
   MOV SI,2
   MOV BL,BUF[SI]          ;错误检测
   DEC SI
   CMP BL,0DH
   JE  HIIV
TTQ1:
   INC SI
   MOV BL,BUF[SI]
   CMP BL,0DH
   JE  HII
   CMP BL,'0'
   JB  WRONG           
   CMP BL,'9'
   JBE  TTQ1         
   CMP BL,'A'
   JB   WRONG         
   CMP BL,'F'
   JBE   TTQ1 
   JMP WRONG 
;====================
HII:
   MOV CL,4
   MOV SI,2
   MOV BL,BUF[SI]
   CMP BL,0DH              ;如果不存在就输出出错信息
   JNE  JIXU
   ENTER
HIIV:
   ENTER
   LEA DX,ALPH1
   MOV AH,9H
   INT 21H
   JMP FAR PTR ERR
;=========================                 
JIXU:
   CMP BL,39H
   JA  TA0A
   SUB BL,30H
TTW0:
   INC SI
   CMP BUF[SI],0DH
   JE  TN0
   ROL BL,CL
TER0:
   MOV AL,BUF[SI]
   CMP AL,39H
   JA  QQ0
   SUB AL,30H
DQQ0:
    OR BX,AX
    INC SI
    CMP BUF[SI],0DH
    JE  TN0
    JMP TN10
TA0A:
  SUB BL,37H
  JMP TTW0
QQ0:
  SUB AL,37H
  JMP DQQ0
TN10:
  ROL BX,CL
  JMP TER0
;========显示出错信息
WRONG:
 WRONG1 ERR
;========
AAA20:
   ENTER
   MOV AL,0CH ;清除键盘缓冲区
   INT 21H
   JMP FAR PTR CON0 ;================
;=========================
TN0:
   MOV BUF[SI],'$'
;========================检测加数
   MOV SI,2
   MOV DL,BUF1[SI]          ;错误检测
   DEC SI
   CMP DL,0DH
   JE  HIIVV
TTQ1A:
   INC SI
   MOV DL,BUF1[SI]
   CMP DL,0DH
   JE  HIIVG
   CMP DL,'0'
   JB  WRONG           
   CMP DL,'9'
   JBE  TTQ1A         
   CMP DL,'A'
   JB   WRONG         
   CMP DL,'F'
   JBE   TTQ1A 
   JMP WRONG 
;====================
HIIVG:
   MOV SI,2
   MOV CL,4
   MOV DL,BUF1[SI]
   CMP DL,0DH          ;检测字符是否存在否则输出错误信息
   JNE  SDFD
HIIVV:
   ENTER
   LEA DX,ALPH1
   MOV AH,9H
   INT 21H
   JMP FAR PTR ERR
SDFD:
   CMP DL,39H
   JA  TTT0
   SUB DL,30H
TTTT0:
   INC SI
   CMP BUF1[SI],0DH
   JE  II0
   ROL DL,CL
IO0:
   MOV AL,BUF1[SI]
   CMP AL,39H
   JA  QQ10
   SUB AL,30H
DQQ10:
   OR DL,AL
   INC SI
   CMP BUF1[SI],0DH
   JE  II0
   JMP IV0
TTT0:
  SUB DL,37H
  JMP TTTT0
QQ10:
  SUB AL,37H
  JMP DQQ10
IV0:
  ROL DX,CL
  JMP IO0
;============
II0:
   MOV BUF1[SI],'$'
   MOV CL,4
   MOV SI,0
   ADD BX,DX
   JC  DC0
   MOV BUF0[SI],30H
   INC SI
   JMP TT0
;===============
DC0:
   MOV DL,31H
   MOV BUF0[SI],DL
   INC SI
TT0:
   ROL BX,CL
   MOV AX,BX
   AND BX,0FH  
   CMP BX,9H
   JA  DSS0
   ADD BX,30H
   JMP FF0
;=============================
AAA10:
  JMP FAR PTR AAA20 ;==================
;===========================
DSS0:
   ADD BX,37H
FF0:
   MOV BUF0[SI],BL
   MOV BX,AX
   INC SI
   CMP SI,5H
   JE  EXIT0
   JMP TT0
EXIT0:
   MOV BUF0[SI],'$'
   ENTER
   LEA DX,BUF+2
   MOV AH,9H
   INT 21H
   MOV DL,'+'
   MOV AH,2H
   INT 21H
   LEA DX,BUF1+2
   MOV AH,9H
   INT 21H
   MOV DL,'='
   MOV AH,2H
   INT 21H
   LEA DX,BUF0
   MOV AH,9H
   INT 21H
ERR:
   ENTER
   LEA DX,ALPH         ;========判断是否继续
   MOV AH,9H
   INT 21H 
   ENTER
   MOV AH,1H
   INT 21H
   CMP AL,'Y'
   JE  FAR PTR AAA10
   CMP AL,'y'
   JE  FAR PTR AAA10
   RET 
ADDNUM ENDP
JIAN PROC FAR ;-----减法运算
CON:
   CLSA
   CLS
   ENTER
   MOV SI,0
   MOV DI,0
   LEA DX,ALPH2
   MOV AH,9H
   INT 21H
   ENTER
   XOR DX,DX
   MOV AL,0CH    ;清除键盘缓冲区
   INT 21H
;=================
   OUTPUT BUF2
   LEA DX,BUF    ;输入被减数
   MOV AH,0AH
   INT 21H
   ENTER
;------------
   OUTPUT BUF3
   LEA DX,BUF1   ;输入减数
   MOV AH,0AH
   INT 21H
   CLS
;=====================
   MOV SI,2
   MOV BL,BUF[SI]          ;错误检测
   DEC SI
   CMP BL,0DH
   JE  HIIE
HUI:
   INC SI
   MOV BL,BUF[SI]
   CMP BL,0DH
   JE  HIIT
   CMP BL,'0'
   JB  WRONGA           
   CMP BL,'9'
   JBE  HUI         
   CMP BL,'A'
   JB  WRONGA         
   CMP BL,'F'
   JBE   HUI 
   JMP WRONGA 
;====================
HIIT:
   MOV SI,2
   MOV CL,4
   MOV BL,BUF[SI]
   CMP BL,0DH
   JNE  SDF1
HIIE:
   ENTER
   LEA DX,ALPH1
   MOV AH,9H
   INT 21H
   JMP FAR PTR ERR2
SDF1:
   CMP BL,39H
   JA  TA
   SUB BL,30H
TTW:
   INC SI
   CMP BUF[SI],0DH
   JE  TN
   ROL BL,CL
TER:
   MOV AL,BUF[SI]
   CMP AL,39H
   JA  QQ
   SUB AL,30H
DQQ:
    OR BX,AX
    INC SI
    CMP BUF[SI],0DH
    JE  TN
    JMP TN1
TA:
  SUB BL,37H
  JMP TTW
QQ:
  SUB AL,37H
  JMP DQQ
TN1:
  ROL BX,CL
  JMP TER
;====================
WRONGA:
 WRONG1 ERR2
;=================   
AAA2:
   ENTER
   MOV AL,0CH ;清除键盘缓冲区
   INT 21H
   JMP FAR PTR CON ;继续开始减法运算
;=========================
TN:
   MOV BUF[SI],'$'
;========================检测减数
   MOV SI,2
   MOV DL,BUF1[SI]          ;错误检测
   DEC SI
   CMP DL,0DH
   JE  SUBL
TTQ1AA:
   INC SI
   MOV DL,BUF1[SI]
   CMP DL,0DH
   JE  HIIVP
   CMP DL,'0'
   JB  WRONGA           
   CMP DL,'9'
   JBE  TTQ1AA         
   CMP DL,'A'
   JB  FAR PTR WRONGA         
   CMP DL,'F'
   JBE   TTQ1AA 
   JMP FAR PTR WRONGA 
;====================
HIIVP:
   MOV SI,2
   MOV CL,4
   MOV DL,BUF1[SI]
   CMP DL,39H
   JA  TTT
   SUB DL,30H
TTTT:
   INC SI
   CMP BUF1[SI],0DH
   JE  II
   ROL DL,CL
IO:
   MOV AL,BUF1[SI]
   CMP AL,0DH
   JNE  SDF2
SUBL:
   ENTER
   LEA DX,ALPH1
   MOV AH,9H
   INT 21H
   JMP FAR PTR ERR2
SDF2:
   CMP AL,39H
   JA  QQ1
   SUB AL,30H
DQQ1:
   OR DL,AL
   INC SI
   CMP BUF1[SI],0DH
   JE  II
   JMP IV
TTT:
  SUB DL,37H
  JMP TTTT
QQ1:
  SUB AL,37H
  JMP DQQ1
IV:
  ROL DX,CL
  JMP IO
;============
II:
   MOV BUF1[SI],'$'
   MOV CL,4
   MOV SI,0
   SUB BX,DX
   JC  FAR PTR DC
   MOV BUF0[SI],30H
   INC SI
   JMP TT
;===============
DC:
   MOV DL,46H
   MOV BUF0[SI],DL
   INC SI
TT:
   ROL BX,CL
   MOV AX,BX
   AND BX,0FH  
   CMP BX,9H
   JA  DSS
   ADD BX,30H
   JMP FF
;=========================
AAA1:
  JMP FAR PTR AAA2 ;=================
DSS:
   ADD BX,37H
FF:
   MOV BUF0[SI],BL
   MOV BX,AX
   INC SI
   CMP SI,5H
   JE  EXIT
   JMP TT
EXIT:
   MOV BUF0[SI],'$'
   ENTER
   LEA DX,BUF+2
   MOV AH,9H
   INT 21H
   MOV DL,'-'
   MOV AH,2H
   INT 21H
   LEA DX,BUF1+2
   MOV AH,9H
   INT 21H
   MOV DL,'='
   MOV AH,2H
   INT 21H
   LEA DX,BUF0
   MOV AH,9H
   INT 21H
ERR2:
   ENTER
   LEA DX,ALPH         ;========判断是否继续
   MOV AH,9H
   INT 21H 
   ENTER
   MOV AH,1H
   INT 21H
   CMP AL,'Y'
   JE  FAR PTR AAA1
   CMP AL,'y'
   JE  FAR PTR AAA1
   RET 
JIAN ENDP
;======================乘法运算
MULTI PROC FAR
CON2:
   CLSA
   ENTER
   CLS
   MOV SI,0
   MOV DI,0
   LEA DX,ALPH2   ;输出提示信息
   MOV AH,9H
   INT 21H
   ENTER
   XOR DX,DX
   MOV AL,0CH    ;清除键盘缓冲区
   INT 21H
;=================
   OUTPUT BUF2
   LEA DX,BUF    ;输入被乘数

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -