Obsah fóra
PravidláRegistrovaťPrihlásenie




Odpovedať na tému [ Príspevok: 1 ] 
AutorSpráva
Offline

Zmazaný užívateľ
Zmazaný užívateľ
Obrázok užívateľa
Príspevok NapísalOffline : 10.11.2011 18:54

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ď.


Odpovedať na tému [ Príspevok: 1 ] 


Podobné témy

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

v Ostatné

6

763

10.03.2012 21:36

F3RY Zobrazenie posledných príspevkov

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

v Ostatné programy

0

636

21.02.2009 21:24

bugi512 Zobrazenie posledných príspevkov

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

v Ostatné programy

1

492

30.05.2011 23:00

shiro Zobrazenie posledných príspevkov

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

v Ostatné

3

363

25.01.2012 14:54

jtbs Zobrazenie posledných príspevkov

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

v JavaScript, VBScript, Ajax

2

722

09.08.2008 18:39

exoomer Zobrazenie posledných príspevkov

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

v Ostatné

3

495

03.02.2011 22:16

elfman Zobrazenie posledných príspevkov

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

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

6

1471

17.01.2012 15:33

vychytraly Zobrazenie posledných príspevkov

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

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

1

961

19.04.2010 15:04

Forty- Zobrazenie posledných príspevkov

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

v PHP, ASP

16

1685

12.08.2008 9:22

javo Zobrazenie posledných príspevkov

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

v Delphi, Visual Basic

17

1156

02.03.2013 10:18

expoox Zobrazenie posledných príspevkov

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

v Vzdelanie, štúdium, škola

5

1642

02.10.2013 17:12

Ominous Zobrazenie posledných príspevkov

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

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

2

1986

21.01.2008 17:23

Peto670 Zobrazenie posledných príspevkov

V tomto fóre nie sú ďalšie neprečítané témy. anketa, počitadlo, kalkulačka....

v Webdesign

9

542

05.07.2014 15:00

shaggy Zobrazenie posledných príspevkov

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

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

12

2054

16.09.2007 16:51

Bacil Zobrazenie posledných príspevkov

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

v JavaScript, VBScript, Ajax

11

1243

14.02.2009 19:06

pildo Zobrazenie posledných príspevkov

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

v Delphi, Visual Basic

1

1021

29.04.2011 12:28

walther Zobrazenie posledných príspevkov


Nemôžete zakladať nové témy v tomto fóre
Nemôžete odpovedať na témy v tomto fóre
Nemôžete upravovať svoje príspevky v tomto fóre
Nemôžete mazať svoje príspevky v tomto fóre

Skočiť na:  

Powered by phpBB Jarvis © 2005 - 2024 PCforum, webhosting by WebSupport, secured by GeoTrust, edited by JanoF
Ako väčšina webových stránok aj my používame cookies. Zotrvaním na webovej stránke súhlasíte, že ich môžeme používať.
Všeobecné podmienky, spracovanie osobných údajov a pravidlá fóra