[ Príspevok: 1 ] 
AutorSpráva
Offline

Zmazaný užívateľ
Zmazaný užívateľ
Obrázok užívateľa
NapísalOffline : 10.11.2011 18:54 | Kalkulačka - assembler

Dobrý deň, chcel by som sa opýtať, či sa dá tento môj výtvor kalkulačky spracovať aj v inom kompilátore než je fasm32.
V masm32 mi to totiž vôbec nefunguje.

Zdrojový kód kalkulačky:
Kód:
name "Reverser_Kalkulacka"
PUTC    MACRO   char
        PUSH    AX
        MOV     AL, char
        MOV     AH, 0Eh
        INT     10h     
        POP     AX
ENDM
org 100h
jmp start
opr db '?'
num1 dw ?
num2 dw ?
start:
mov dx, offset msg0
mov ah, 9
int 21h
lea dx, msg1
mov ah, 09h
int 21h 
call scan_num
mov num1, cx
putc 0Dh
putc 0Ah
lea dx, msg2
mov ah, 09h
int 21h 
mov ah, 1
int 21h
mov opr, al
putc 0Dh
putc 0Ah
cmp opr, 'q'   
je exit
cmp opr, '*'
jb wrong_opr
cmp opr, '/'
ja wrong_opr
lea dx, msg3
mov ah, 09h
int 21h 
call scan_num
mov num2, cx
lea dx, msg4
mov ah, 09h     
int 21h 
cmp opr, '+'   
je do_plus
cmp opr, '-'   
je do_minus
cmp opr, '*'           
je do_mult
cmp opr, '/'
je do_div
wrong_opr:
lea dx, err1
mov ah, 09h   
int 21h 
exit:
lea dx, msg5
mov ah, 09h
int 21h 
mov ah, 0
int 16h
ret
do_plus:
mov ax, num1
add ax, num2
call print_num   
jmp exit
do_minus:
mov ax, num1
sub ax, num2
call print_num   
jmp exit
do_mult:
mov ax, num1
imul num2
call print_num
jmp exit
do_div:
mov dx, 0
mov ax, num1
idiv num2
cmp dx, 0
jnz approx
call print_num 
jmp exit
approx:
call print_num
lea dx, smth
mov ah, 09h 
int 21h 
jmp exit
SCAN_NUM        PROC    NEAR
        PUSH    DX
        PUSH    AX
        PUSH    SI
       
        MOV     CX, 0
        MOV     CS:make_minus, 0

next_digit:
        MOV     AH, 00h
        INT     16h
        MOV     AH, 0Eh
        INT     10h
        CMP     AL, '-'
        JE      set_minus
        CMP     AL, 0Dh
        JNE     not_cr
        JMP     stop_input
not_cr:


        CMP     AL, 8                   
        JNE     backspace_checked
        MOV     DX, 0                   
        MOV     AX, CX               
        DIV     CS:ten               
        MOV     CX, AX
        PUTC    ' '                   
        PUTC    8                   
        JMP     next_digit
backspace_checked:
        CMP     AL, '0'
        JAE     ok_AE_0
        JMP     remove_not_digit
ok_AE_0:       
        CMP     AL, '9'
        JBE     ok_digit
remove_not_digit:       
        PUTC    8   
        PUTC    ' '   
        PUTC    8         
        JMP     next_digit     
ok_digit:
        PUSH    AX
        MOV     AX, CX
        MUL     CS:ten           
        MOV     CX, AX
        POP     AX
        CMP     DX, 0
        JNE     too_big
        SUB     AL, 30h

        MOV     AH, 0
        MOV     DX, CX     
        ADD     CX, AX
        JC      too_big2
        JMP     next_digit
set_minus:
        MOV     CS:make_minus, 1
        JMP     next_digit
too_big2:
        MOV     CX, DX     
        MOV     DX, 0     
too_big:
        MOV     AX, CX
        DIV     CS:ten
        MOV     CX, AX
        PUTC    8     
        PUTC    ' '   
        PUTC    8             
        JMP     next_digit       
stop_input:
 
        CMP     CS:make_minus, 0
        JE      not_minus
        NEG     CX
not_minus:

        POP     SI
        POP     AX
        POP     DX
        RET
make_minus      DB      ?     
SCAN_NUM        ENDP
PRINT_NUM       PROC    NEAR
        PUSH    DX
        PUSH    AX

        CMP     AX, 0
        JNZ     not_zero

        PUTC    '0'
        JMP     printed
not_zero:
        CMP     AX, 0
        JNS     positive
        NEG     AX

        PUTC    '-'

positive:
        CALL    PRINT_NUM_UNS
printed:
        POP     AX
        POP     DX
        RET
PRINT_NUM       ENDP
PRINT_NUM_UNS   PROC    NEAR
        PUSH    AX
        PUSH    BX
        PUSH    CX
        PUSH    DX
        MOV     CX, 1
        MOV     BX, 10000 
        CMP     AX, 0
        JZ      print_zero

begin_print:

        CMP     BX,0
        JZ      end_print

        CMP     CX, 0
        JE      calc

        CMP     AX, BX
        JB      skip
calc:
        MOV     CX, 0
        MOV     DX, 0
        DIV     BX     
        ADD     AL, 30h   
        PUTC    AL

        MOV     AX, DX

skip:
        PUSH    AX
        MOV     DX, 0
        MOV     AX, BX
        DIV     CS:ten
        MOV     BX, AX
        POP     AX
        JMP     begin_print
       
print_zero:
        PUTC    '0'
       
end_print:

        POP     DX
        POP     CX
        POP     BX
        POP     AX
        RET
PRINT_NUM_UNS   ENDP

ten             DW      10     .

GET_STRING      PROC    NEAR
PUSH    AX
PUSH    CX
PUSH    DI
PUSH    DX

MOV     CX, 0                 

CMP     DX, 1                 
JBE     empty_buffer         

DEC     DX 
wait_for_key:
MOV     AH, 0               
INT     16h
CMP     AL, 0Dh             
JZ      exit_GET_STRING
CMP     AL, 8                   
JNE     add_to_buffer
JCXZ    wait_for_key           
DEC     CX
DEC     DI
PUTC    8                     
PUTC    ' '                 
PUTC    8                   
JMP     wait_for_key
add_to_buffer:
        CMP     CX, DX       
        JAE     wait_for_key   
        MOV     [DI], AL
        INC     DI
        INC     CX
        MOV     AH, 0Eh
        INT     10h

JMP     wait_for_key
exit_GET_STRING:
MOV     [DI], 0

empty_buffer:

POP     DX
POP     DI
POP     CX
POP     AX
RET
GET_STRING      ENDP


Vopred ďakujem za odpoveď.


 [ Príspevok: 1 ] 


Kalkulačka - assembler



Podobné témy

 Témy  Odpovede  Zobrazenia  Posledný príspevok 
V tomto fóre nie sú ďalšie neprečítané témy.

kalkulačka

v Ostatné programy

0

678

21.02.2009 21:24

bugi512

V tomto fóre nie sú ďalšie neprečítané témy.

Kalkulačka

v Ostatné programy

1

531

30.05.2011 23:00

shiro

V tomto fóre nie sú ďalšie neprečítané témy.

kalkulacka

v Ostatné

3

407

25.01.2012 14:54

jtbs

V tomto fóre nie sú ďalšie neprečítané témy.

kalkulacka

v JavaScript, VBScript, Ajax

2

755

09.08.2008 18:39

exoomer

V tomto fóre nie sú ďalšie neprečítané témy.

kalkulačka

v Ostatné

3

548

03.02.2011 22:16

elfman

V tomto fóre nie sú ďalšie neprečítané témy.

Kalkulacka

v Ostatné

6

855

10.03.2012 21:36

F3RY

V tomto fóre nie sú ďalšie neprečítané témy.

Java Kalkulacka

v Assembler, C, C++, Pascal, Java

1

1004

19.04.2010 15:04

Forty-

V tomto fóre nie sú ďalšie neprečítané témy.

euro kalkulacka

v PHP, ASP

16

1723

12.08.2008 9:22

javo

V tomto fóre nie sú ďalšie neprečítané témy.

Delphi-kalkulačka

v Delphi, Visual Basic

17

1221

02.03.2013 10:18

expoox

V tomto fóre nie sú ďalšie neprečítané témy.

jednoducha kalkulacka

v Assembler, C, C++, Pascal, Java

6

1532

17.01.2012 15:33

vychytraly

V tomto fóre nie sú ďalšie neprečítané témy.

kalkulacka v C++

v Assembler, C, C++, Pascal, Java

12

2102

16.09.2007 16:51

Bacil

V tomto fóre nie sú ďalšie neprečítané témy.

kalkulacka ceny produktu

v JavaScript, VBScript, Ajax

11

1299

14.02.2009 19:06

pildo

V tomto fóre nie sú ďalšie neprečítané témy.

Visual Basic Kalkulačka

v Delphi, Visual Basic

1

1058

29.04.2011 12:28

walther

V tomto fóre nie sú ďalšie neprečítané témy.

Socialne stipendium - kalkulacka?

v Vzdelanie, štúdium, škola

5

1706

02.10.2013 17:12

Ominous

V tomto fóre nie sú ďalšie neprečítané témy.

Pomoc kalkulacka C++

v Assembler, C, C++, Pascal, Java

2

2021

21.01.2008 17:23

Peto670

V tomto fóre nie sú ďalšie neprečítané témy.

anketa, počitadlo, kalkulačka....

v Webdesign

9

598

05.07.2014 15:00

shaggy



© 2005 - 2024 PCforum, edited by JanoF