Programming Forums
User Name Password Register
 

RSS Feed
FORUM INDEX | TODAY'S POSTS | UNANSWERED THREADS | ADVANCED SEARCH

Reply
 
Thread Tools Display Modes
Old Nov 6th, 2005, 6:40 PM   #1
sinix
Programmer
 
sinix's Avatar
 
Join Date: Nov 2005
Location: China
Posts: 47
Rep Power: 0 sinix is on a distinguished road
Send a message via MSN to sinix
Smile this a assem calcultor with very simple funciton.

DATA      SEGMENT

EXPRESS   DW 40 DUP(?)

TEMP      DW 0

RESULT    DD 0

ASSIST    DD 0

BUF       DB 0AH,0DH,'Input invalid,Try again'

DATA      ENDS

CODE      SEGMENT

          ASSUME CS:CODE,DS:DATA

MAIN      PROC   FAR

START:    MOV    AX,DATA

          MOV    DS,AX

          CALL   GETINPUT

          CALL   MYCAL

          CALL   DISPLAY

          MOV    AH,4CH

          INT    21H

MAIN      ENDP

GETINPUT  PROC   NEAR

          LEA    DI,EXPRESS

          MOV    AX,0H

          PUSH   AX

S_TART:   AND    AX,0

          AND    BX,0

          AND    CX,0

          MOV    AH,01H

          INT    21H

L1:       CMP    AL,'0'

          JB     L2

          CMP    AL,'9'

          JA     L2

S:        AND    AX,000FH

          MOV    CX,AX

          CALL   GETNUM

L2:       CMP    AL,'='

          JNZ    L3

ONE:      MOV    CX,0

          POP    CX

          AND    CX,00FFH

          CMP    CX,0H

          JZ     ZERO

          MOV   [DI],CX

          ADD    DI,2

          JMP    ONE

ZERO:     AND    AX,00FFH

          MOV   [DI],AX

          ADD    DI,2H

          RET

L3:       CMP    AL,'('

          JNZ    L4

          PUSH   AX

          JMP    S_TART

L4:       CMP    AL,')'

          JNZ    L5

S1:       POP    CX

          AND    CX,00FFH

          CMP    CL,'('

          JZ     S_TART

          CMP    CX,0

          JNZ    AS

          PUSH   CX

          JMP    S_TART

AS:       MOV    [DI],CX

          ADD    DI,2

          JMP    S1

L5:       CMP    AL,'*'

          JZ     L6

          CMP    AL,'/'

          JZ     L6

          JMP    L7

L6:       POP    CX

          AND    CX,00FFH

          CMP    CL,'*'

          JZ     C1

          CMP    CL,'/'

          JZ     C1

          PUSH   CX

          PUSH   AX

          JMP    S_TART

C1:       MOV    [DI],CX

          ADD    DI,2

          PUSH   AX

          JMP    S_TART

L7:       CMP    AL,'+'

          JZ     L8

          CMP    AL,'-'

          JZ     L8

          JMP    L9

L8:       POP    CX

          AND    CX,00FFH

          CMP    CX,'('

          JZ     D1

          CMP    CX, 0

          JZ     D1

          MOV   [DI],CX

          ADD    DI,2

          PUSH   AX

          JMP    S_TART

D1:       PUSH   CX

          PUSH   AX

          JMP    S_TART

L9:       MOV    CX,15

          LEA    BX,BUF

V1:       MOV    DL,[BX]

          INC    BX

          MOV    AH,02H

          INT    21H

          LOOP   V1

          RET

GETINPUT  ENDP



GETNUM    PROC   NEAR

          PUSH   BX

NUM_STAR: MOV    AH,01H

          INT    21H

          CMP    AL,30H

          JC     NUM_OUT

          CMP    AL,3AH

          JNC    NUM_OUT

          ADD    CX,CX

          MOV    BX,CX

          ADD    CX,CX

          ADD    CX,CX

          ADD    CX,BX

          AND    AX,000FH

          ADD    CX,AX

          JMP    NUM_STAR    

NUM_OUT:  MOV   [DI],CX

          ADD    DI,2

          POP    BX

          RET

GETNUM    ENDP



MYCAL     PROC   NEAR

          LEA    SI,RESULT

          LEA    DI,ASSIST

          LEA    BX,EXPRESS

CAL_STAR: AND    DX,0

          AND    AX,0

          CMP   [BX],'*'

          JZ     CAL_MUL

          CMP   [BX],'/'

          JZ     CAL_DIV

          CMP   [BX],'+'

          JZ     CAL_ADD

          CMP   [BX],'-'

          JZ     CAL_SUB

          CMP   [BX],'='

          JZ     CAL_OUT

          PUSH   WORD PTR [BX]

          ADD    BX,2

          JMP    CAL_STAR

CAL_MUL:  POP    DX

          POP    AX

          IMUL   DX

          PUSH   AX

          ADD    BX,2

          JMP    CAL_STAR

CAL_DIV:  POP    DX

          POP    AX

          IDIV   DL

          PUSH   AX

          ADD    BX,2

          JMP    CAL_STAR

CAL_ADD:  POP    DX

          POP    AX

          ADC    AX,DX

          PUSH   AX

          ADD    BX,2

          JMP    CAL_STAR

CAL_SUB:  POP    DX

          POP    AX

          SBB    AX,DX

          PUSH   AX

          ADD    BX,2

          JMP    CAL_STAR

CAL_OUT:  POP    CX

          RET

MYCAL     ENDP



DISPLAY   PROC   NEAR

          CMP    CX,10000

          JNC    AA12

          CMP    CX,1000

          JNC    AA4

          CMP    CX,100

          JNC    AA6

          CMP    CX,10

          JNC    AA8

          JMP    AA10

AA12:     MOV    DL,-1

AA3:      SUB    CX,10000

          INC    DL

          JNC    AA3

          ADD    CX,10000

          OR     DL,30H

          MOV    AH,2H

          INT    21H

AA4:      MOV    DL,-1

AA5:      SUB    CX,1000

          INC    DL

          JNC    AA5

          ADD    CX,1000

          OR     DL,30H

          MOV    AH,2H

          INT    21H

AA6:      MOV    DL,-1

AA7:      SUB    CX,100

          INC    DL

          JNC    AA7

          ADD    CX,100

          OR     DL,30H

          MOV    AH,2H

          INT    21H

AA8:      MOV    DL,-1

AA9:      SUB    CX,10

          INC    DL

          JNC    AA9

          ADD    CX,10

          OR     DL,30H

          MOV    AH,2H

          INT    21H

AA10:     MOV    DL,CL

          OR     DL,30H

          MOV    AH,2H

          INT    21H

          RET

DISPLAY   ENDP



CODE      ENDS

          END START
sinix is offline   Reply With Quote
Old Nov 6th, 2005, 6:41 PM   #2
sinix
Programmer
 
sinix's Avatar
 
Join Date: Nov 2005
Location: China
Posts: 47
Rep Power: 0 sinix is on a distinguished road
Send a message via MSN to sinix
sorry,a calculator,with simple function
sinix is offline   Reply With Quote
Reply

Bookmarks

« Previous Thread in Forum | Next Thread in Forum »

Currently Active Users Viewing This Thread: 1 (0 members and 1 guests)
 
Thread Tools
Display Modes

Posting Rules
You may not post new threads
You may not post replies
You may not post attachments
You may not edit your posts

BB code is On
Smilies are On
[IMG] code is On
HTML code is Off
Forum Jump




DaniWeb IT Discussion Community
All times are GMT -5. The time now is 6:29 PM.

Powered by vBulletin® Version 3.7.0, Copyright ©2000 - 2008, Jelsoft Enterprises Ltd.
Copyright ©2007 DaniWeb® LLC