Jump to content

help in a calculator code

- - - - -

  • Please log in to reply
4 replies to this topic

#1
topman

topman

    Newbie

  • Members
  • Pip
  • 2 posts
i have a calculator code but there is a problem in the division
i can not get the correct answer

thank you

Q: should i write the code here or what should i do??



.MODEL SMALL 

.STACK

.DATA

 MSG0 DB 0DH,0AH,  '                                      ' 

 MSG1 DB 0DH,0AH,  '					  '

 MSG2 DB 0DH,0AH,  '         1- ADDITION                  '

 MSG3 DB 0DH,0AH,  '         2- SUBTRACTION               '

 MSG4 DB 0DH,0AH,  '         3- MULTIPLCATION             '

 MSG5 DB 0DH,0AH,  '         4- DIVISION                  '

 MSG6 DB 0DH,0AH,  '				 	  '

 MSG7 DB 0DH,0AH,'     enter a number from 1 to 4:$   '

 MSG8 DB 0DH,0AH,'     enter the first number in HEX:$ '

 MSG9 DB 0DH,0AH,'     enter the second number in HEX:$'

 MSG10 DB 0DH,0AH,'                                     '

 MSG11 DB 0DH,0AH,'you have entered a wrong number please try again$'

 MSG12 DB 0DH,0AH,'                                     '

 MSG13 DB 0DH,0AH,'    the answer =$'

 MSG14 DB 0DH,0AH,'    the remainder =$'

 MSG15 DB 0DH,0AH,'					'

 MSG16 DB 0DH,0AH,'     thank you	'

 MSG17 DB 0DH,0AH,'					$'

 ANS  DB  ?, '$'



.CODE 


 MOV AX,@DATA 

 MOV DS,AX 


AGAIN:

 MOV AH,9

 LEA SI,MSG0 

 MOV DX,SI 

 INT 21H 


 MOV AH,01

 INT 21H

 MOV [CS:0000H],AL

 

 CMP AL,31H

 JB FD1

 CMP AL,34H

 JA FD1

 JMP DO


FD1:


	MOV AH,9

	LEA SI,MSG10 

	MOV DX,SI 

	INT 21H


JMP AGAIN


DO:

 MOV AH,9

 LEA SI,MSG8 

 MOV DX,SI 

 INT 21H


 MOV AH,01

 INT 21H

 CALL NUM

 MOV BH,AL

 

 

 MOV AH,01

 INT 21H

 CALL NUM

 MOV BL,AL 


 CALL FD2

 MOV [DS:0000H],BH


 MOV AH,01

 INT 21H

 CALL NUM

 MOV BH,AL

 

 

 MOV AH,01

 INT 21H

 CALL NUM

 MOV BL,AL 


 CALL FD2

 MOV BL,BH

 MOV BH,[DS:0000H]

 MOV [DS:0001H],BX 


 MOV AH,9

 LEA SI,MSG9 

 MOV DX,SI 

 INT 21H

  

 MOV AH,01

 INT 21H

 CALL NUM

 MOV BH,AL

 

 

 MOV AH,01

 INT 21H

 CALL NUM

 MOV BL,AL 


 CALL FD2

 MOV [DS:0003H],BH


 MOV AH,01

 INT 21H

 CALL NUM

 MOV BH,AL

 

 

 MOV AH,01

 INT 21H

 CALL NUM

 MOV BL,AL 


 CALL FD2

 MOV BL,BH

 MOV BH,[DS:0003H]

 MOV [DS:0003H],BX 

 MOV BX,[DS:0001H]

 MOV CX,[DS:0003H]



 MOV AL,[CS:0000H]

 CMP AL,31H

 JE ADDITION


 CMP AL,32H

 JE SUBTRACTION


 CMP AL,33H

 JE MULL


 CMP AL,34H

 JE CONT



ADDITION:

	ADD BX,CX

	MOV AL,00H

	ADC AL,00H

	MOV [CS:1111H],AL

	JMP SHOW

		

SUBTRACTION:

	SUB BX,CX

	MOV AL,00H

	ADC AL,00H

	MOV [CS:1111H],AL

	JMP SHOW

CONT:

	JMP DIVISION


MULL:

	MOV AX,BX

	MUL cX

	

	MOV [ES:0000H],DX

	MOV BX,AX

	MOV DX,BX

	AND BX,0F0FH

	MOV AL,BH 

	CALL FD4

	MOV BH,AL

	MOV AL,BL

	CALL FD4

	MOV BL,AL

	AND DX,0F0F0H

	MOV CL,04

	ROL DX,CL

	MOV AL,DH

	CALL FD4

	MOV DH,AL

	MOV AL,DL

	CALL FD4

	MOV DL,AL

	MOV CX,DX

	PUSH CX

	PUSH BX


	MOV DX,[ES:0000H]

	MOV BX,DX

	AND BX,0F0FH

	MOV AL,BH 

	CALL FD4

	MOV BH,AL

	MOV AL,BL

	CALL FD4

	MOV BL,AL

	AND DX,0F0F0H

	MOV CL,04

	ROL DX,CL

	MOV AL,DH

	CALL FD4

	MOV DH,AL

	MOV AL,DL

	CALL FD4

	MOV DL,AL

	MOV CX,DX

	



	MOV AH,9

	LEA SI,MSG12 

	MOV DX,SI 

	INT 21H


	

	LEA DI,ANS

	MOV [DI],CL

	MOV DL,[DI]

	MOV AH,02H

	INT 21H 

 

	LEA DI,ANS

	MOV [DI],BH

	MOV DL,[DI]

	MOV AH,02H

	INT 21H


	LEA DI,ANS

	MOV [DI],CH

	MOV DL,[DI]

	MOV AH,02H

	INT 21H



	LEA DI,ANS

	MOV [DI],BL

	MOV DL,[DI]

	MOV AH,02H

	INT 21H


	POP BX

	POP CX


	LEA DI,ANS

	MOV [DI],CL

	MOV DL,[DI]

	MOV AH,02H

	INT 21H 

 

	LEA DI,ANS

	MOV [DI],BH

	MOV DL,BH

	MOV AH,02H

	INT 21H

	

	

	LEA DI,ANS

	MOV [DI],CH

	MOV DL,CH

	MOV AH,02H

	INT 21H


	

	LEA DI,ANS

	MOV [DI],BL

	MOV DL,BL

	MOV AH,02H

	INT 21h 

	JMP CONT1

DIVISION:

	MOV DX,00H

	MOV AX,BX

	DIV CX

	MOV [ES:0007H],DX

	MOV BX,AX

	MOV DX,BX

	AND BX,0F0FH

	MOV AL,BH 

	CALL FD4

	MOV BH,AL

	MOV AL,BL

	CALL FD4

	MOV BL,AL

	AND DX,0F0F0H

	MOV CL,04

	ROL DX,CL

	MOV AL,DH

	CALL FD4

	MOV DH,AL

	MOV AL,DL

	CALL FD4

	MOV DL,AL

	MOV CX,DX

	MOV AH,9

	LEA SI,MSG12

	MOV DX,SI 

	INT 21H


	CMP BX,0FFFFH

	JE PP0	


	LEA DI,ANS

	MOV [DI],CL

	MOV DL,[DI]

	MOV AH,02H

	INT 21H 


	LEA DI,ANS

	MOV [DI],BH

	MOV DL,[DI]

	MOV AH,02H

	INT 21H


	LEA DI,ANS

	MOV [DI],CH

	MOV DL,[DI]

	MOV AH,02H

	INT 21H


PP0:

	CMP AL,0FFH

	JNE PP1


	LEA DI,ANS

	MOV [DI],BL

	MOV DL,[DI]

	MOV AH,02H

	INT 21H

	MOV DX,[ES:0007H]

	MOV BX,DX

	AND BX,0F0FH

	MOV AL,BH 

	CALL FD4

	MOV BH,AL

	MOV AL,BL

	CALL FD4

	MOV BL,AL

	AND DX,0F0F0H

	MOV CL,04

	ROL DX,CL

PP1:

	CMP DX,0FFFFH

	JNE PP

	MOV AL,DH

	CALL FD4

	MOV DH,AL

	MOV AL,DL

	CALL FD4

	MOV DL,AL

	MOV CX,DX

	MOV AH,9

	LEA SI,MSG14

	MOV DX,SI 

	INT 21H


	LEA DI,ANS

	MOV [DI],CL

	MOV DL,[DI]

	MOV AH,02H

	INT 21H 


	LEA DI,ANS

	MOV [DI],BH

	MOV DL,[DI]

	MOV AH,02H

	INT 21H


	LEA DI,ANS

	MOV [DI],CH

	MOV DL,[DI]

	MOV AH,02H

	INT 21H


	LEA DI,ANS

	MOV [DI],BL

	MOV DL,[DI]

	MOV AH,02H

	INT 21H

	JMP CONT1

PP:

	JMP FD3

SHOW:

	MOV DX,BX

	AND BX,0F0FH

	MOV AL,BH 

	CALL FD4

	MOV BH,AL

	MOV AL,BL

	CALL FD4

	MOV BL,AL

	AND DX,0F0F0H

	MOV CL,04

	ROL DX,CL

	MOV AL,DH

	CALL FD4

	MOV DH,AL

	MOV AL,DL

	CALL FD4

	MOV DL,AL

	MOV CX,DX

	MOV [DS:1111H],CL

	ADD [CS:1111H],30H

	MOV AH,9

	LEA SI,MSG12

	MOV DX,SI 

	INT 21H

	MOV CL,[CS:1111H]

	LEA DI,ANS

	MOV [DI],CL

	MOV DL,[DI]

	MOV AH,02H

	INT 21H

	MOV CL,[DS:1111H]

	LEA DI,ANS

	MOV [DI],CL

	MOV DL,[DI]

	MOV AH,02H

	INT 21H 

	LEA DI,ANS

	MOV [DI],BH

	MOV DL,[DI]

	MOV AH,02H

	INT 21H

	LEA DI,ANS

	MOV [DI],CH

	MOV DL,[DI]

	MOV AH,02H

	INT 21H

	LEA DI,ANS

	MOV [DI],BL

	MOV DL,[DI]

	MOV AH,02H

	INT 21H

CONT1:	

	MOV AH,9

	LEA SI,MSG15 

	MOV DX,SI 

	INT 21H 

	JMP AGAIN

NUM PROC

	CMP AL,39H

	JBE NUMBER41

	CMP AL,46H

	JBE NUMBER42 

	CMP AL,66H 

	JBE NUMBER43 

	JMP FD3 

NUMBER41: 

	CMP AL,30H

	JB FD3 

	SUB AL,30H

	RET

NUMBER42: 

	CMP AL,41H

	JB FD3 

	SUB AL,37H

	RET

NUMBER43: 

	CMP AL,61H

	JB FD3 

	SUB AL,57H

	RET

NUM ENDP

FD2 PROC

	MOV CL,04

	ROL BH,CL

	ADD BH,BL	

	RET

FD2 ENDP

FD4 PROC

	CMP AL,09H

	JBE NUMBER4

	CMP AL,0FH

	JBE NUMBER5

NUMBER4:

	ADD AL,30H

	RET

NUMBER5:

	ADD AL,37H

	RET

FD4 ENDP

FD3:

	MOV AH,9

	LEA SI,MSG10 

	MOV DX,SI 

	INT 21H

JMP AGAIN

 

MOV AX,4C00H 

INT 21H


END


Edited by Roger, 30 May 2011 - 01:36 PM.
added code from your cal.asm file


#2
Alexander

Alexander

    It's Science!

  • Moderators
  • 4,118 posts
  • Location:Vancouver, Eh! Cleverness: 200
Hello topman, feel free to write your code here so we can review it.
Be sure to read the updated FAQ! || Health is achieved through the same 10,000 steps.
If a suggested code/method fails, informing us is less important than telling us why or what errors occurred.

#3
topman

topman

    Newbie

  • Members
  • Pip
  • 2 posts
i have inserted the code in the first line as attachment

#4
RhetoricalRuvim

RhetoricalRuvim

    JavaScript Programmer

  • Members
  • PipPipPipPipPipPipPipPip
  • 1,252 posts
  • Location:C:\Countries\US

Quote

DIVISION:

	MOV DX,00H

	MOV AX,BX

	DIV CX

	MOV [ES:0007H],DX

	MOV BX,AX

	MOV DX,BX

	AND BX,0F0FH

	MOV AL,BH 

	CALL FD4

	MOV BH,AL

	MOV AL,BL

	CALL FD4

	MOV BL,AL

	AND DX,0F0F0H

What does this instruction do?:
MOV [ES:0007H],DX


#5
dargueta

dargueta

    Writes binary right handed and hex left handed

  • Moderators
  • 4,705 posts
  • Programming Language:C, Java, C++, PHP, Python, Perl, Assembly, Bash, Others
  • Learning:JavaScript
What're all the hard-coded addresses for? And why are you writing to CS:0000H? You should never write data to the CS segment.
sudo rm -rf /




1 user(s) are reading this topic

0 members, 1 guests, 0 anonymous users