Arrays TASM:生成一个简单的计算器
我正在尝试在TASM中制作一个简单的计算器,它还没有完成,我正在尝试计算加法部分,但是我被卡住了,因为操作数类型不匹配,这里是我所拥有的Arrays TASM:生成一个简单的计算器,arrays,assembly,macros,tasm,Arrays,Assembly,Macros,Tasm,我正在尝试在TASM中制作一个简单的计算器,它还没有完成,我正在尝试计算加法部分,但是我被卡住了,因为操作数类型不匹配,这里是我所拥有的 ;FILENAME: SimpleClc.asm ;FILE FORMAT: EXE PAGE 55,132 .386 STACK_SEG SEGMENT STACK USE16 DB 100 DUP(?) STACK_SEG ENDS DATA_SEG SEGMENT 'DATA' USE16 ADDITION MACRO
;FILENAME: SimpleClc.asm
;FILE FORMAT: EXE
PAGE 55,132
.386
STACK_SEG SEGMENT STACK USE16
DB 100 DUP(?)
STACK_SEG ENDS
DATA_SEG SEGMENT 'DATA' USE16
ADDITION MACRO Result,Char1,Char2
MOV AX,Char1
CWD
ADD AX,Char2,
MOV Result,AX
ENDM
SUBTRACTION MACRO Char1, Char2
SUB Char1,Char2
ENDM
DIVISION MACRO Char1, Char2
DIV Char1,Char2
ENDM
MULTIPLICATION MACRO Char1, Char2
MUL Char1,Char2
ENDM
Mainmsg DB 'Please enter a algebraic command line: $'
ErMessage DB 'Error!!', 0DH, 0AH
DB 'INPUT FORMAT:Operand1 Operator Operand',0DH, 0AH
DB 'Operand: Decimal Numbers',0DH, 0AH
DB 'Operator: + -'
INCHAR DB 21
Res DB 10 dup('$')
INCDAT DB 21 dup('$')
VarX DB 10 dup('$')
VarY DB 10 dup('$')
DATA_SEG ENDS
CODE_SEG SEGMENT PARA 'CODE' PUBLIC USE16
ASSUME CS:CODE_SEG, DS:DATA_SEG, SS:STACK_SEG
MAIN PROC FAR
PUSH DS ;INITIATE THE PROGRAM
XOR AX,AX
PUSH AX
MOV AX,DATA_SEG
MOV DS,AX
AGAIN:
LEA DX,Mainmsg ;PRINT MESSAGE
MOV AH,9
INT 21H
MOV DX, OFFSET INCHAR
MOV AH,0AH
INT 21H
MOV DX, OFFSET INCHAR
MOV AH,0AH
INT 21H
LEA DX,INCDAT ;Writing the incoming input
MOV AH,9
INT 21H
MOV DI,OFFSET INCDAT
MOV AL, [DI]
CMP AL, 9
JLE OPERAND ; jump if less or equal
JG ERRORMESSAGE ; jump if not less or equal
INC DI
OPERAND:
MOV AL, [DI]
CMP AL, '+'
JE LASTOPERAND
CMP AL, '-'
JE LASTOPERAND
CMP AL, '*'
JE LASTOPERAND
CMP AL, '/'
JE LASTOPERAND
JMP ERRORMESSAGE
INC DI
LASTOPERAND:
MOV AL, [DI]
CMP AL, 9
JLE OPERATION ; jump if less or equal
JG ERRORMESSAGE ; jump if not less or equal
OPERATION:
CMP AL, '+'
JE ADDITION1
JMP AGAIN
ADDITION1:
MOV DI,OFFSET INCDAT
MOV AL,[DI]
MOV VarX,AL
MOV AL,[DI+2]
MOV VarY,AL
ADDITION Res,VarX,VarY
JMP AGAIN
CMP AL, '-'
JE SUBTRACTION1
JMP AGAIN
SUBTRACTION1:
CMP AL, '*'
JE MULTIPLICATION1
JMP AGAIN
MULTIPLICATION1:
JMP AGAIN
CMP AL, '/'
JE DIVISION1
JMP AGAIN
DIVISION1:
ERRORMESSAGE:
LEA DX,ErMessage ;PRINT MESSAGE
MOV AH,9
INT 21H
MAIN ENDP
CODE_SEG ENDS
END MAIN
我知道现在看起来很混乱,只是因为我同时尝试了很多东西,顺便说一句,我的计算器不会计算大于10的结果。谢谢您的帮助。如有任何意见,我们将不胜感激。Ups,很难对所有行号进行数字化 将代码放在数据段内不是最好的主意 以下说明的好处是什么
PUSH DS ; pushing the old address of DS to the stack
XOR AX,AX
PUSH AX ; pushing a zero word to the stack
最后如何终止程序
我不确定,但可能是因为使用类似于汇编程序助记符名称的标签名而出现错误
为什么要一个接一个地使用输入函数覆盖同一个缓冲区
MOV DX, OFFSET INCHAR
MOV AH,0AH
INT 21H
MOV DX, OFFSET INCHAR
MOV AH,0AH
INT 21H
“操作数类型不匹配”是什么意思?你给你的程序输入了什么,你期望的结果是什么,实际的结果是什么?好吧,因为我得到了错误,它不会编译。正如我所研究的,这是关于位差的,但我不知道如何解决这个问题。我的错误在第123-125-126行,也就是说,在第123-125-126行中,您得到的错误消息是什么?操作数类型与第(123)(125)行不匹配,并在第(126)行中添加了(5)个额外字符。这3个错误