| | |
| Stránka: 1 z 1
| [ Príspevok: 1 ] | |
Autor | Správa |
---|
|
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ď.
|
|
| Stránka: 1 z 1
| [ Príspevok: 1 ] | |
Podobné témy | Témy | Odpovede | Zobrazenia | Posledný príspevok |
---|
| Kalkulacka v Ostatné | 6 | 763 | 10.03.2012 21:36 F3RY | | kalkulačka v Ostatné programy | 0 | 636 | 21.02.2009 21:24 bugi512 | | Kalkulačka v Ostatné programy | 1 | 492 | 30.05.2011 23:00 shiro | | kalkulacka v Ostatné | 3 | 363 | 25.01.2012 14:54 jtbs | | kalkulacka v JavaScript, VBScript, Ajax | 2 | 722 | 09.08.2008 18:39 exoomer | | kalkulačka v Ostatné | 3 | 495 | 03.02.2011 22:16 elfman | | jednoducha kalkulacka v Assembler, C, C++, Pascal, Java | 6 | 1471 | 17.01.2012 15:33 vychytraly | | Java Kalkulacka v Assembler, C, C++, Pascal, Java | 1 | 961 | 19.04.2010 15:04 Forty- | | euro kalkulacka v PHP, ASP | 16 | 1685 | 12.08.2008 9:22 javo | | Delphi-kalkulačka v Delphi, Visual Basic | 17 | 1156 | 02.03.2013 10:18 expoox | | Socialne stipendium - kalkulacka? v Vzdelanie, štúdium, škola | 5 | 1642 | 02.10.2013 17:12 Ominous | | Pomoc kalkulacka C++ v Assembler, C, C++, Pascal, Java | 2 | 1986 | 21.01.2008 17:23 Peto670 | | anketa, počitadlo, kalkulačka.... v Webdesign | 9 | 542 | 05.07.2014 15:00 shaggy | | kalkulacka v C++ v Assembler, C, C++, Pascal, Java | 12 | 2054 | 16.09.2007 16:51 Bacil | | kalkulacka ceny produktu v JavaScript, VBScript, Ajax | 11 | 1243 | 14.02.2009 19:06 pildo | | Visual Basic Kalkulačka v Delphi, Visual Basic | 1 | 1021 | 29.04.2011 12:28 walther |
| 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
|
|