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

📄 加减乘除算法.txt

📁 用汇编编写
💻 TXT
字号:
从键盘上输入两个十进制数(大于5位),编写其加减乘除算法


STACK SEGMENT STACK
DB 200 DUP(0)
STACK ENDS



DATA SEGMENT
BUFALL DB 12
DB ?
DB 12 DUP(0) 
COUNT DB 0
BASE DB 10
NUM1L DB 0
NUM2L DB 0
NUM1 DB 0
NUM2 DB 0
无效L DB 0
无效 DB 0
FLAG DB 0
STR1 DB 0AH,0DH,"YOU ARE RIGHT!!!", 0AH,0DH,'$'
STR2 DB 0AH,0DH,"YOU ARE WRONG!!!", 0AH,0DH,'$'
STR3 DB 0AH,0DH,"无效 WRONG!!!",0AH,0DH,'$'
STR4 DB 0AH,0DH,"NO +OR-OR*OR/!!!",0AH,0DH,'$'
STR5 DB 0AH,0DH,"NO =!!!",0AH,0DH,'$'
DATA ENDS



CODE SEGMENT
ASSUME DS:DATA,ES:DATA,SS:STACK,CS:CODE
START: MOV AX,DATA
MOV DS,AX
MOV ES,AX


LEA DX,BUFALL
MOV AH,10
INT 21H


LEA SI,BUFALL
MOV BL,[SI+1]
CMP BL,5
JB EXIT1 ;输入的串长度不合法,exit处给出提示
CMP BL,12
JA EXIT1

MOV COUNT,BL
INC SI
INC SI
MOV DI,SI


CLD
MOV AL,COUNT
CBW
MOV CX,AX
MOV AX,0
MOV DL,0


LOP1: LODSB
CMP AL,'+'
JZ OUT1
CMP AL,'-'
JZ OUT11
CMP AL,'*'
JZ OUT111
CMP AL,'/'
JZ OUT1111
CMP AL,'0'
JB EXIT1
CMP AL,'9'
JA EXIT1
;INC SI
INC DL
LOOP LOP1 ;此处要给出没有找到运算符的错误提示
LEA DX,STR4
MOV AH,9
INT 21H
JMP OVER
JMP OUT11111
EXIT1: JMP EXIT2
OUT1: MOV FLAG,1 
JMP OUT11111
OUT11: MOV FLAG,2
JMP OUT11111
OUT111: MOV FLAG,3
JMP OUT11111
OUT1111: MOV FLAG,4
JMP OUT11111
OUT11111: MOV AL,COUNT
CBW
MOV CX,AX
MOV NUM1L,DL
MOV SI,DI
MOV DH,0
ADD SI,DX
INC SI
MOV AX,0
MOV DL,0

LOP2: LODSB
CMP AL,'='
JZ OUT2
CMP AL,'0'
JB EXIT2
CMP AL,'9'
JA EXIT2
;INC SI
INC DL
LOOP LOP2

;此处要给出没有等号的错误提示
LEA DX,STR5
MOV AH,9
INT 21H
JMP OVER


OUT2: MOV AL,COUNT
CBW
MOV CX,AX
MOV NUM2L,DL
MOV SI,DI
MOV AL,NUM1L
CBW
ADD SI,AX
INC SI
MOV AL,NUM2L
CBW
ADD SI,AX
INC SI
MOV AX,0
MOV DL,0

LOP3: LODSB
CMP AL,13
JZ OUT3
CMP AL,'0'
JB EXIT2
CMP AL,'9'
JA EXIT2
;INC SI
INC DL
LOOP LOP3

EXIT2: JMP EXIT3
OUT3: MOV 无效L,DL
MOV SI,DI
MOV AL,NUM1L
CBW
MOV CX,AX
MOV AX,0
;MOV AL,0

LOP4: MUL BASE
MOV DX,AX
MOV AL,[SI]
SUB AL,30H
CBW
ADD AX,DX
INC SI
LOOP LOP4
JMP ABC 
EXIT3: JMP EXIT4

ABC: MOV NUM1,AL
MOV SI,DI
MOV AL,NUM1L
CBW
ADD SI,AX
INC SI
MOV AL,NUM2L
CBW
MOV CX,AX
MOV AX,0
MOV AL,0

LOP5: MUL BASE
MOV DX,AX
MOV AL,[SI]
SUB AL,30H
CBW
ADD AX,DX
INC SI
LOOP LOP5

JMP DEF
EXIT4: JMP EXIT5

DEF: MOV NUM2,AL

MOV SI,DI
MOV AL,NUM1L
CBW
ADD SI,AX
INC SI
MOV AL,NUM2L
CBW
ADD SI,AX
INC SI
MOV AL,无效L
CBW
MOV CX,AX
MOV AX,0


LOP6: MUL BASE
MOV DX,AX
MOV AL,[SI]
SUB AL,30H
CBW 
ADD AX,DX
INC SI
LOOP LOP6

MOV 无效,AL 

JMP GHI
EXIT5: JMP EXIT

GHI: MOV BL,FLAG
CMP BX,1
JZ JIAFA
CMP BX,2
JZ JIANFA
CMP BX,3
JZ CHENFA


CHUFA: MOV AL,NUM1
CBW
DIV NUM2
SUB AL,无效
JZ RIGHT
JMP WRONG

JIAFA: MOV AL,NUM1
ADD AL,NUM2
SUB AL,无效 
JZ RIGHT
JMP WRONG

JIANFA: MOV AL,NUM1
SUB AL,NUM2
SUB AL,无效
JZ RIGHT
JMP WRONG

CHENFA: MOV AL,NUM1
MUL NUM2
SUB AL,无效
JZ RIGHT
JMP WRONG

EXIT EQU THIS FAR

LEA DX,STR3
MOV AH,9
INT 21H
JMP OVER

RIGHT: LEA DX,STR1
MOV AH,9
INT 21H
JMP OVER

WRONG: LEA DX,STR2
MOV AH,9
INT 21H
JMP OVER


OVER: MOV AH,4CH
INT 21H
CODE ENDS
END START

⌨️ 快捷键说明

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