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

📄 四则运算.txt

📁 运行程序后实现可控交通灯的红绿黄三灯自动熄灭和点亮
💻 TXT
字号:
DSEG SEGMENT
STR1  DB 0AH,0DH, '********************************************$'
STR2  DB 0AH,0DH, '**                                        **$'
STR3  DB 0AH,0DH, '**            welcome     you !           **$'
STR4  DB 0AH,0DH, '**                                        **$'
STR5  DB 0AH,0DH, '**   this is programme of sizeyunshuan    **$'
STR6  db 0AH,0DH, '**                                        **$'
STR7  db 0AH,0DH, '**          rang(-32768 to 32767)         **$'
STR8  DB 0AH,0DH, '**           press p to exit !            **$'
STR9  DB 0AH,0DH, '**                   maker:fishosoul·yu   **$'
STR10 DB 0AH,0DH, '********************************************',0AH,0DH,'$'
SIGN1 DW 0  ;判断数字是否输入完毕
SIGN2 DW 0  ;判断括号是否配对
SIGN3 DW 0  ;
NUMB DW 20H DUP(0) ;保存输入的数值
MARK DB 'A'  ;保存输入的运算符
 DB 10H DUP(0) ;
ERROR DB 'YOUR INPUT ARE WRONG$' 
DSEG ENDS

DISP    MACRO M
        LEA DX,M
        MOV AH,9
        INT 21H
        ENDM

CHOICE MACRO ASC1,HAO1,HH ;宏定义,给运算符赋权值
 CMP AL,ASC1  ;
 JNE OTHER&HAO1 ;
 MOV CH,HH  ;
 JMP OTHER7  ;
 ENDM

CSEG SEGMENT   ;
 ASSUME CS:CSEG,DS:DSEG
START: CALL        CLEAR
        MOV AX,DSEG  ;
 MOV DS,AX  ;
 LEA DI,NUMB  ;
 LEA SI,MARK  ;
        DISP    STR1
        DISP    STR3
        DISP    STR4
        DISP    STR5
        DISP    STR6
        DISP    STR7
        DISP    STR8
        DISP    STR9
        DISP    STR10 
        ;CALL     CLEAR
        CALL    CR
        ;disp    error
        MOV     AX,0
        MOV     DX,0
        MOV     BX,0
        MOV     CX,0    
STA1 : CALL     CR
INPUT:  MOV AH,1  ;
 INT 21H  ;
        CMP     AL,'P'
        JE      J_SHU0
        CMP     AL,'p'
        JE      J_SHU0
 CMP AL,'='  ;
 JE PD  ;是等号,进一步判断输入括号是否配对
 CMP AL,28H  ;
 JB INPUT  ;
 CMP AL,39H  ;
 JA INPUT  ;
 CMP AL,2FH  ;判断是数字还是符号
 JBE JUD  ;是符号转入响应操作
  
 INC WORD PTR SIGN1 ;将数字标志位加一
 SUB AL,30H  ;将asc码转16进制
 MOV AH,0  ;
 XCHG AX,[DI]  ;
 MOV BX,10  ;
 MUL BX  ;
 XCHG AX,[DI]  ;
 ADD [DI],AX  ;
 JMP INPUT  ;

PD: CMP WORD PTR SIGN2,0  ;判断配对标志位
 JE JUD  ;
 JMP BC  ;

JUD: CMP WORD PTR SIGN1,0  ;判断数值指针是否已经下移一位
 JE FUH1  ;
 ADD DI,2  ;
 MOV WORD PTR SIGN1,0;

FUH1: CALL ADVANCE  ;判定优先级,
 CMP CH,5  ;判断输入的是否是左括号
 JNE PY  ;不是则判断输入的是否是右括号

 INC WORD PTR SIGN2 ;是左括号,括号标志位1
 MOV WORD PTR SIGN3,1;

PY: CMP CH,1  ;判断输入的是否是右括号
 JNE AGAIN  ;
 DEC WORD PTR SIGN2 ;是右括号,括号标志位减1
 
AGAIN: CMP BYTE PTR[SI],'A';判断运算符存储区是否为空
 JE SAVE  ;
 CMP CH,[SI]  ;
 JA SAVE  ;
        CMP     BYTE PTR[SI],'('
        JNE     YIDO
        DEC     SI
        JMP     INPUT
YIDO: DEC SI  ;
 MOV CL,[SI]  ;
 CALL MATCH  ;判断是什么运算符并进行相应的计算
 ;DEC SI  ;
 JMP AGAIN  ;
Z_Z: JMP INPUT
J_SHU0: JMP         J_SHU  ;
SAVE: CMP CH,0  ;
 JE OVER1  ;
 CMP CH,1  ;
 JE Z_Z  ;“)”不保存,输入下一个数
 INC SI  ;
 MOV [SI],AL  ;
 INC SI  ;
 CMP CH,5  ;
 JNE GO_ON  ;
 MOV CH,2  ;改变(的权值
GO_ON: MOV [SI],CH  ;
 JMP INPUT  ;
BC: LEA DX,ERROR ;
 MOV AH,9  ;
 INT 21H  ;
 JMP J_SHU  ;
OVER1: JMP OVER  ; 
MATCH PROC   ;子程序,进行相应的运算
 PUSH  AX  ;
 XOR AX,AX
 XOR BX,BX
 CMP CL,2AH  ;乘法运算
 JNE NEXT1
 SUB DI,2
 XCHG BX,[DI]
 SUB DI,2
 XCHG AX,[DI]
 IMUL BX
 MOV [DI],AX
 ADD DI,2
 JMP FINISH
NEXT1: CMP CL,2FH  ;除法运算
 JNE NEXT2
 SUB DI,2
 XCHG BX,[DI]
 SUB DI,2  
 XCHG AX,[DI]
 CWD
 IDIV BX
 MOV [DI],AX
 ADD DI,2
 JMP FINISH
NEXT2: CMP CL,2BH  ;加法运算
 JNE NEXT3
 SUB DI,2
 XCHG BX,[DI]
 SUB DI,2
 ADD [DI],BX
 ADD DI,2
 JMP FINISH
NEXT3: CMP CL,2DH  ;减法运算
 JNE FINISH
 SUB DI,2
 XCHG BX,[DI]
 SUB DI,2
 SUB [DI],BX  
 ADD DI,2
FINISH: POP AX 
 RET
MATCH ENDP

ADVANCE PROC
 CHOICE 28H,1,5  ;(
OTHER1: CHOICE 29H,2,1  ;)
OTHER2: CHOICE 2AH,3,4  ;*
OTHER3: CHOICE 2FH,4,4  ;/
OTHER4: CHOICE 2BH,5,3  ;+
OTHER5: CHOICE 2DH,6,3  ;-
OTHER6: CHOICE 3DH,7,0  ;=
OTHER7: RET
ADVANCE ENDP

;***清屏***
clear proc near
      push ax
      push bx
      push cx
      push dx
      mov  ah,06h
      mov al,00h
      mov ch,0
      mov cl,0
      mov bh,0fH
      mov dh,18H
      mov dl,4FH      
      int 10h
      mov bh,0
      mov dx,0
      MOV AH,02H
     ; MOV DL,0
      INT 10H
     
      pop dx
      pop cx
      pop bx
      pop ax
      ret
clear endp

;****回车换行****

CR  PROC  
       PUSH  AX
       PUSH  DX
       MOV  ah,2
       MOV   dl,13
       INT     21H
       mov    ah,2
       MOV    dl,10
       INT     21H
       POP    DX
       POP    AX
       RET
CR   ENDP

OVER: 
        SUB DI,2
 CMP WORD PTR[DI],0
 JGE W1
 NEG WORD PTR[DI]
 MOV DL,'-'
 MOV AH,2
 INT 21H
W1: MOV BX,10000
 MOV CX,5
 MOV SI,0
W2: MOV AX,[DI]
 MOV DX,0
 DIV BX
 MOV [DI],DX
 CMP AL,0
 JNE W3
 CMP SI,0
 JNE W3
 CMP CX,1
 JE W3
 JMP W4
W3: MOV DL,AL
 ADD DL,30H
 MOV AH,2
 INT 21H
 MOV SI,1
W4: MOV AX,BX
 MOV DX,0
 MOV BX,10
 DIV BX
 MOV BX,AX
 LOOP W2
        ;CALL    CR
                
J_SHU1: MOV WORD PTR[DI+2],0  
        CALL    CR
        LEA DI,NUMB  ;
 LEA SI,MARK 
        JMP     STA1
J_SHU: MOV AH,4CH
 INT 21H
CSEG ENDS
 END START

⌨️ 快捷键说明

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