高分悬赏,求微机原理与汇编语言课程设计,做一个四则运算计算器。请上传到我的知道!急~!!!!

实现简单的四则运算即可,不要求界面,只要能算就行,在线等~!!!!!... 实现简单的四则运算即可,不要求界面,只要能算就行,在线等~!!!!! 展开
 我来答
283802332
推荐于2016-05-13 · TA获得超过3311个赞
知道小有建树答主
回答量:367
采纳率:0%
帮助的人:177万
展开全部

版本一, 电脑自己运算

ASSUME CS:CODE, DS:DATA, SS:STACK

DATA SEGMENT
NUM1 DB ?
NUM2 DB ?
TABLE DB '+-*/='
OPER DB ?
CRLF DB 0AH,0DH,'$'
DATA ENDS

STACK SEGMENT
DB 100 DUP (?)
STACK ENDS
CODE SEGMENT
START: MOV AX,DATA
MOV DS,AX
MOV AX,STACK
MOV SS,AX
MOV SP,100

;下面4句是获取2个随机数
CALL RAND_NUM1 ;获取随机数
MOV NUM1,AH
CALL RAND_NUM2
MOV NUM2,AH

CALL RAND_OPER ;获取4个随机数(0~3) 0表示加法,1表示减法,2表示乘法,3表示除法
MOV BX,OFFSET TABLE
MOV AL,AH
XLAT TABLE
MOV OPER, AL

DISPLAY: SUB AH,AH
MOV AL,NUM1
CALL DIS_NUM

CALL DIS_OPER

SUB AH,AH
MOV AL,NUM2
CALL DIS_NUM

CALL DIS_EQ

SUB AH,AH
CMP OPER,'+'
JZ OPER_ADD
CMP OPER,'-'
JZ OPER_SUB
CMP OPER,'/'
JZ OPER_DIV

MOV AL,NUM1
MOV CL,NUM2
MUL CL
JMP DONE


OPER_ADD: MOV AL,NUM1
ADD AL,NUM2
JMP DONE

OPER_SUB: MOV AL,NUM1
SUB AL,NUM2
TEST AL,80H
JZ DONE
NEG AL
MOV BL,AL
MOV AH,2
MOV DL,'-'
INT 21H
SUB AH,AH
MOV AL,BL
JMP DONE

OPER_DIV: MOV AH,0
MOV AL,NUM1
MOV CL,NUM2
DIV CL
MOV AH,0
JMP DONE

DIS_NUM: MOV CL,10
DIV CL
MOV BL,AH
MOV DL,AL
ADD DL,30H
MOV AH,2
INT 21H
MOV DL,BL
ADD DL,30H
INT 21H
RET

DIS_OPER: MOV AH,2
MOV DL,20H
INT 21H
MOV DL,OPER
INT 21H
MOV DL,20H ;打印空格
INT 21H
RET

DIS_EQ: MOV AH,2
MOV DL,20H
INT 21H
MOV DL,'='
INT 21H
MOV DL,20H
INT 21H
RET

DONE: MOV CH,0
MOV CL,10
DONE1: DIV CL
PUSH AX
SUB AH,AH
INC CH
CMP AL, 0
JNZ DONE1

MOV CL,CH
SUB CH,CH
DONE_LP: POP AX
MOV DL,AH
ADD DL,30H
MOV AH,2
INT 21H
LOOP DONE_LP

QT: MOV AH,9
LEA DX,CRLF
INT 21H
MOV AX,4C00H
INT 21H



;PAND_NUM子程序的功能是产生一个随机数0~100
RAND_NUM1:MOV AH,0
INT 1AH
MOV AX,DX
AND AH,3 ;为了在进行除法的时候不产生溢出
MOV DL,100 ;除101,产生0~99的余数
DIV DL
RET

;PAND_NUM子程序的功能是产生一个随机数0~100
RAND_NUM2:MOV AH,0
INT 1AH
MOV AX,CX
AND AH,3 ;为了在进行除法的时候不产生溢出
MOV DL,100 ;除101,产生0~99的余数
DIV DL
RET

;PAND_OPER子程序的功能是产生一个随机数0~3
RAND_OPER:MOV AH,0
INT 1AH
MOV AX,DX
AND AH,3 ;为了在进行除法的时候不产生溢出
MOV DL,4 ;除4,产生0~3的余数
DIV DL
RET

CODE ENDS
END START


版本二: 人机对话, 电脑随机出题, 人来回答

ASSUME CS:CODE, DS:DATA, SS:STACK

DATA SEGMENT
STR DB 'I get a expression to you, and please input a result',0AH,0DH,'$'
NUM1 DB ?
NUM2 DB ?
TABLE DB '+-*/='
OPER DB ?
RESULT DW ?
FLAG DB 0
BUF DB 7
DB ?
DB 7 dup (?)
CRLF DB 0AH,0DH,'$'
Y DB 'GOOD! BYE BYE!',0AH,0DH,'$'
N DB 'ERROR, Please input again!', 0AH,0DH,'$'
DATA ENDS

STACK SEGMENT
DB 100 DUP (?)
STACK ENDS
CODE SEGMENT
START: MOV AX,DATA
MOV DS,AX
MOV AX,STACK
MOV SS,AX
MOV SP,100

MOV AH,9
LEA DX,STR
INT 21H

;下面4句是获取2个随机数
CALL RAND_NUM1 ;获取随机数
MOV NUM1,AH
CALL RAND_NUM2
MOV NUM2,AH
CALL RAND_OPER ;获取4个随机数(0~3) 0表示加法,1表示减法,2表示乘法,3表示除法
MOV BX,OFFSET TABLE
MOV AL,AH
XLAT TABLE
MOV OPER, AL

DISPLAY: MOV RESULT, 0
SUB AX,AX
MOV AL,NUM1
CALL DIS_NUM

CALL DIS_OPER

SUB AX,AX
MOV AL,NUM2
CALL DIS_NUM

CALL DIS_EQ

;接收用户输入的字符串
MOV AH,10
LEA DX,BUF
INT 21H

MOV CL,BUF+1
LEA SI,BUF+2
CMP BYTE PTR [SI],'-' ;如果用户输入字符串有符号(这里只有减法运算有可能有符号),那么求补
JNZ LP0
MOV FLAG,1 ;FLAG = 1,表示有符号
INC SI ;跳过符号
DEC CL ;循环次数减1
LP0: MOV AX,RESULT
MOV BL,10
LP: MUL BL
ADD AL,[SI]
SUB AL,30H
INC SI
LOOP LP
MOV RESULT,AX

SUB AX,AX
CMP OPER,'+' ;加法
JZ OPER_ADD
CMP OPER,'-' ;减法
JZ OPER_SUB
CMP OPER,'/' ;除法
JZ OPER_DIV

MOV AL,NUM1 ;乘法
MOV CL,NUM2
MUL CL
JMP DONE

OPER_ADD: MOV AL,NUM1
ADD AL,NUM2 ;结果存于AX(这时候AH = 0),然后跳转到DONE,与RESULT比较,一样就正确,不一样就不正确
JMP DONE
OPER_SUB: MOV AL,NUM1
SUB AL,NUM2
CMP FLAG,1
JNZ OPER_SUB1
NEG AL
OPER_SUB1:JMP DONE
OPER_DIV: MOV AL,NUM1
MOV CL,NUM2
DIV CL
SUB AH,AH
JMP DONE

DIS_NUM: MOV CL,10 ;显示数,因为这里是2位数,2位数除以10后,AH保存的是余数(个位),AL保存的是商(十位)
DIV CL
MOV BL,AH
MOV AH,2
MOV DL,AL
ADD DL,30H
INT 21H
MOV DL,BL
ADD DL,30H
INT 21H
RET

DIS_OPER: MOV AH,2 ;显示操作数,OPER已经在前面求出了
MOV DL,20H
INT 21H
MOV DL,OPER
INT 21H
MOV DL,20H ;打印空格
INT 21H
RET

DIS_EQ: MOV AH,2
MOV DL,20H
INT 21H
MOV DL,'='
INT 21H
MOV DL,20H
INT 21H
RET

DONE: CMP AX,RESULT
JZ YES
MOV AH,9
LEA DX,N
INT 21H
JMP DISPLAY
YES: MOV AH,9
LEA DX,CRLF
INT 21H
LEA DX,Y
INT 21H



QT: MOV AX,4C00H
INT 21H



;PAND_NUM子程序的功能是产生一个随机数0~100
RAND_NUM1:MOV AH,0
INT 1AH
MOV AX,DX ;这里是DX
AND AH,3 ;为了在进行除法的时候不产生溢出
MOV DL,100 ;除101,产生0~99的余数
DIV DL
RET

;PAND_NUM子程序的功能是产生一个随机数0~100
RAND_NUM2:MOV AH,0
INT 1AH
MOV AX,CX ;这里是CX
AND AH,3 ;为了在进行除法的时候不产生溢出
MOV DL,100 ;除101,产生0~99的余数
DIV DL
RET

;PAND_OPER子程序的功能是产生一个随机数0~3
RAND_OPER:MOV AH,0
INT 1AH
MOV AX,DX
AND AH,3 ;为了在进行除法的时候不产生溢出
MOV DL,4 ;除4,产生0~3的余数
DIV DL
RET

CODE ENDS
END START



PS:若有不明白的地方, 请追问

吉列微风
2013-06-16 · TA获得超过592个赞
知道小有建树答主
回答量:377
采纳率:60%
帮助的人:126万
展开全部
用过EMU8086这款小软件吗,这个软件里的 Example 里就有,非常清楚。
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 1条折叠回答
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式