萌新0.0急求大佬,汇编——编写程序完成运算X=A*B+C,并将运算结果以十进数显示在屏幕中间。
贺锦 2018-06-15 09:28:59 编写一个运算程序
编写程序完成运算X=A*B+C,并将运算结果以十进数显示在屏幕中间。
要求:A、A为从键盘输入的两位十进制数。
B、B、C为从键盘输入的三位十进制数。
C、A、B、C输入前均要加提示信息。
D、运算结果以“X= ”的形式显示在屏幕中间(考虑结果大于65536)。
希望有大神能帮忙看一下,怎么写,我自己写了一下,结果越写越乱了,脑子有点转不过来了,呜呜呜呜~
DATA SEGMENT
IN1 DB 'Please input A:$'
IN2 DB 'Please input B:$'
IN3 DB 'Please input C:$'
IN4 DB 'X=A*B+C=$'
DATA ENDS
CODE SEGMENT
ASSUME CS:CODE,DS:DATA
START: MOV AX,DATA
MOV DS,AX
MOV AH,9
LEA DX,IN1
INT 21H
MOV CX,2
CALL INPUT
CALL CRLF
MOV BP,BX
MOV AH,9
LEA DX,IN2
INT 21H
MOV CX,3
CALL INPUT
CALL CRLF
MOV AX,BP
MUL BX
MOV SI,AX
MOV DI,DX
MOV AH,9
LEA DX,IN3
INT 21H
MOV CX,3
CALL INPUT
CALL CRLF
MOV AX,BX
CWD
ADD AX,SI
ADC DX,DI
MOV AH,9
LEA DX,IN4
INT 21H
CALL OUTPUT
MOV AX,4C00H
INT 21H
INPUT PROC NEAR
MOV BX,0
P1: MOV AH,1
INT 21H
SUB AL,30H
JL EXIT
SUB AL,9
JG EXIT
CBW
XCHG AX,BX
MOV DX,10
MUL DX
ADD BX,AX
LOOP P1
EXIT: RET
INPUT ENDP
OUTPUT PROC NEAR
MOV CX,10000
CALL DDIV
MOV CX,1000
CALL DDIV
MOV CX,100
CALL DDIV
MOV CX,10
CALL DDIV
MOV CX,1
CALL DDIV
RET
OUTPUT ENDP
DDIV PROC NEAR
MOV AX,SI
MOV DX,DI
DIV CX
MOV BX,DX
MOV DL,AL
ADD DL,30H
MOV AH,2
INT 21H
RET
DDIV ENDP
CRLF PROC NEAR
PUSH AX
PUSH DX
MOV AH,2
MOV DL,0DH
INT 21H
MOV AH,2
MOV DL,0AH
INT 21H
POP DX
POP AX
RET
CRLF ENDP
CODE ENDS
END START
这是我自己写的很多错误的代码,中间有几个问题解决不了
第一,在子函数INPUT里的BX,不知道为什么就是传不到主程序里去,调试的时候,在BX的值为0,搞不明白
第二,两位的十进制数乘以三位的十进制数,应该是要32位了吧,后面的显示,得不到我想要的结果,我知道是运算有问题,但是不知道怎么处理,连接不上来了
希望能有大佬,指导一下,急,谢谢谢谢谢谢谢!