如何用汇编语言设计算器?
发布网友
发布时间:2022-05-09 15:37
我来回答
共2个回答
热心网友
时间:2023-10-08 16:34
DATA SEGMENT
INFO0 DB 13,10,'*************************************************************************$'
INFO1 DB 13,10,'* JIANDAN ZHENGSHU JISHUANQI *$'
INFO2 DB 13,10,'* ZHUOZHE ABCD *$'
INFO3 DB 13,10,'$'
INFO4 DB 13,10,'* SHUOMING: *$'
INFO5 DB 13,10,'* 1.ZHENGSHU + - * / ,FANWEI 0~65535. *$'
INFO6 DB 13,10,'* 2.SHURU SHUJU DE SHIHOU ,RUGUO SHURU HUICHE ZHE TUICHU CHENGXU. *$'
INFO7 DB 13,10,'* 3.CHUFA DE SHIHOU MEIYOU DUI CHUSHU WEI NING ZHUCHU CHULI. *$'
INFO8 DB 13,10,'* 4.CAIYONG ZICHENGXU JI SANJI CAIDAN. *$'
INFO9 DB 13,10,'* 5.SHIYONG SHI, GEGE SHU JI CAOCUO FU SHURU DE SHUNXU RENYI, *$'
INFO10 DB 13,10,'* QIZHONG CAOZHUO FU 1=+ 2=- 3=* 4=/ 5=exit *$'
INFO11 DB 13,10,'PLEASE PRESS KEY TO NEXT,OR ENTER KEY TO EXIT$'
BINFO0 DB 13,10,'* 1.ADD *$'
BINFO1 DB 13,10,'* 2.SUB *$'
BINFO2 DB 13,10,'* 3.MUL *$'
BINFO3 DB 13,10,'* 4.DIV *$'
BINFO4 DB 13,10,'* 5.EXIT (OR OTHER KEY) *$'
STRING DB 13,10,'* PLEASE PRESS NUMBER 1(+),2(-),3(*),4(/),5(EXIT): *$'
CINFO0 DB 13,10,'* 1.INPUT THE FIRST NUMBER *$'
CINFO1 DB 13,10,'* 2.INPUT THE SECOND NUMBER *$'
CINFO2 DB 13,10,'* 3.EXIT(OR OTHER KEY *$'
BUFF DB 10
DB 0
DB 10 DUP(0)
ARRAY1 DB 13,10,'PLEASE INPUT THE FIRST NUMBER:$'
ARRAY2 DB 13,10,'PLEASE INPUT THE SECOND NUMBER:$'
ARRAY DW 2 DUP(0)
RESULT DB 10 DUP(0),'$'
CRLF DB 0DH,0AH,'$'
FLAGS DB 0
DATA ENDS
CODE SEGMENT
ASSUME CS:CODE,DS:DATA
START:MOV AX,DATA
MOV DS,AX
AB: CALL DISPMAINMENU
MOV AH,7
INT 21H
CMP AL,13
JZ EEXIT
CALL TWOMENU
MOV [FLAGS],0FFH
MOV AH,7
INT 21H
CMP AL,31H
JB EEXIT
CMP AL,34H
JA EEXIT
MOV [FLAGS],AL
MOV [ARRAY],0FFH
MOV [ARRAY+2],0FFH
ADS: CALL DISPTHMENU
MOV AH,7
INT 21H
CMP AL,'1'
JZ A1
CMP AL,'2'
JZ A2
JMP EEXIT
A1: MOV DX,OFFSET ARRAY1
CALL INPUTNUMBER
CMP CX,0
JZ EEXIT
MOV WORD PTR [ARRAY],AX
CALL JISHUAN
JC AB
JMP ADS
A2: MOV DX,OFFSET ARRAY2
CALL INPUTNUMBER
CMP CX,0
JZ EEXIT
MOV WORD PTR [ARRAY+2],AX
CALL JISHUAN
JC AB
JMP ADS
ABC PROC
MOV CH,0
MOV BX,OFFSET BUFF
MOV CL,[BX+1]
CMP CX,0
JZ ABCD
PUSH CX
ADD BX,2
PUSH BX
L0: SUB [BX],30H
INC BX
LOOP L0
POP BX
MOV AX,0
MOV CH,0
MOV CL,[BX-1]
L1: MOV DL,10
MUL DL
ADD AL,BYTE PTR [BX]
INC BX
LOOP L1
POP CX
ABCD: RET
ABC ENDP
DEF PROC
MOV SI,OFFSET RESULT
ADD SI,4
MOV [SI+1],"$"
MOV CX,5
AG1: MOV DX,0
MOV BX,10
DIV BX
PUSH DX
ADD DL,30H
MOV [SI],DL
DEC SI
POP DX
LOOP AG1
MOV CX,4
AG3: INC SI
MOV AL,[SI]
CMP AL,30H
JNZ NOZEARO
LOOP AG3
INC SI
NOZEARO:
CALL DISPCRLF
MOV DX,SI
MOV AH,9
INT 21H
RET
DEF ENDP
DISPCRLF PROC
MOV DX,OFFSET INFO3
DISPINFO:MOV AH,9
INT 21H
RET
DISPCRLF ENDP
DISPMAINMENU PROC
MOV DX,OFFSET INFO0
CALL DISPINFO
CALL DISPCRLF
MOV DX,OFFSET INFO1
CALL DISPINFO
MOV DX,OFFSET INFO2
CALL DISPINFO
MOV DX,OFFSET INFO4
CALL DISPINFO
MOV DX,OFFSET INFO5
CALL DISPINFO
MOV DX,OFFSET INFO6
CALL DISPINFO
MOV DX,OFFSET INFO7
CALL DISPINFO
MOV DX,OFFSET INFO8
CALL DISPINFO
MOV DX,OFFSET INFO9
CALL DISPINFO
MOV DX,OFFSET INFO10
CALL DISPINFO
MOV DX,OFFSET INFO11
CALL DISPINFO
MOV DX,OFFSET INFO0
CALL DISPINFO
RET
DISPMAINMENU ENDP
TWOMENU PROC
CALL DISPCRLF
MOV DX,OFFSET INFO0
CALL DISPINFO
CALL DISPCRLF
MOV DX,OFFSET INFO1
CALL DISPINFO
MOV DX,OFFSET INFO2
CALL DISPINFO
MOV DX,OFFSET BINFO0
CALL DISPINFO
MOV DX,OFFSET BINFO1
CALL DISPINFO
MOV DX,OFFSET BINFO2
CALL DISPINFO
MOV DX,OFFSET BINFO3
CALL DISPINFO
MOV DX,OFFSET BINFO4
CALL DISPINFO
CALL DISPCRLF
MOV DX,OFFSET INFO0
CALL DISPINFO
RET
TWOMENU ENDP
DISPTHMENU PROC
CALL DISPCRLF
CALL DISPCRLF
MOV DX,OFFSET INFO0
CALL DISPINFO
CALL DISPCRLF
MOV DX,OFFSET INFO1
CALL DISPINFO
MOV DX,OFFSET INFO2
CALL DISPINFO
CALL DISPCRLF
CALL DISPCRLF
MOV DX,OFFSET CINFO0
CALL DISPINFO
MOV DX,OFFSET CINFO1
CALL DISPINFO
MOV DX,OFFSET CINFO2
CALL DISPINFO
CALL DISPCRLF
CALL DISPCRLF
MOV DX,OFFSET INFO0
CALL DISPINFO
RET
DISPTHMENU ENDP
INPUTNUMBER PROC
MOV AH,9
INT 21H
MOV DX,OFFSET BUFF
MOV AH,0AH
INT 21H
CALL ABC
RET
INPUTNUMBER ENDP
JISHUAN PROC
CMP [ARRAY],0FFH
JZ NNN
CMP [ARRAY+2],0FFH
JZ NNN
CMP [FLAGS],31H
JZ ISADD
CMP [FLAGS],32H
JZ ISSUB
CMP [FLAGS],33H
JZ ISMUL
JMP ISDIV
NNN: CLC
RET
ISADD:MOV BX,WORD PTR [ARRAY]
MOV AX,WORD PTR [ARRAY+2]
ADD AX,BX
JMP DISP
ISSUB: MOV AX,WORD PTR [ARRAY]
MOV BX,WORD PTR [ARRAY+2]
CMP AX,BX
JB SMALL
SUB AX,BX
JMP DISP
SMALL:SUB BX,AX
MOV AX,BX
JMP DISP
ISMUL:MOV AX,WORD PTR [ARRAY]
MOV BX,WORD PTR [ARRAY+2]
MUL BX
MOV DX,0
JMP DISP
ISDIV:MOV AX,WORD PTR [ARRAY]
MOV BX,WORD PTR [ARRAY+2]
MOV DX,0
DIV BX
MOV DX,0
DISP: CALL DEF
STC
RET
JISHUAN ENDP
EEXIT:MOV AH,4CH
INT 21H
CODE ENDS
END START
热心网友
时间:2023-10-08 16:34
比较麻烦