[ glorius @ 06.09.2005. 00:10 ] @
Juce sam instalirao MASM i provalio ( jedva... ) kako da pocnem sa svojim prvim programom u konzoli windows-a.

Imam dosta znanja o programiranju ( C++, OpenGL, DirectX - svuda sam po malo programirao)

Sada se osecam kao da sam na pocetku, dok posmatram sebe kako kucam kod koji izbacuje Hello, World ... :)

Verovatno ce sve ici brze kada pohvatam termine i logiku koja se koristi u asembleru, a do tada evo jednog malog koda koji sabira dva broja ( pa trebalo bi ).

Code:

.386
.model flat, stdcall
option casemap: none

include \masm32\include\windows.inc
include \masm32\include\kernel32.inc
include \masm32\include\user32.inc
include \masm32\include\masm32.inc

includelib \masm32\lib\kernel32.lib
includelib \masm32\lib\masm32.lib
includelib \masm32\lib\user32.lib

uint            typedef word            ;Unsigned integers.
integer         typedef sword           ;Signed integers.


.data 
        broj1         uint ?
        broj2         uint ?
        rezultat      uint ?
        opcija        uint ?
        res              byte 128 dup  (?)
        template      db "%d", 0
        recenica1     db "Unesite prvi broj: ", 0
        recenica2     db "Unesite drugi broj ", 0
        recenica3     db "Sabiranje(1) Oduzimanje(2) Mnozenje(3) Deljenje(4)", 0
.code 



start:
    invoke StdOut, addr recenica1
    invoke StdIn, addr broj1, 100   ; unosimo broj 1
    invoke StdOut, addr recenica2
    invoke StdIn, addr broj2, 100   ; unosimo broj 2
    invoke StdOut, addr recenica3
    invoke StdIn, addr opcija, 100  ; opcija
    
    .if(opcija == 1)                ; sabiramo broj1 i broj2
        mov ax, broj1
        add ax, broj2
        mov rezultat, ax  
    .endif
    
    invoke wsprintf, addr res, addr template, rezultat  ; priprema za out to screen
    invoke StdOut, addr res 
    
    invoke StdIn, addr broj1, 1     ; cekamo pritisak dugmeta za izlazak ( budjavo, ali ne znam drugacije - interupt or something)

    invoke ExitProcess,0

end start


Ovi silni include-ovi su tu jer isprobavam sve i svasta pa da se ne smaram o tome koji cu da umetnem u kod.

Sve radi kako treba... Osim izbacivanja pravog rezultata. Uvek mi izadje na ekranu 10.

Mislim da je greska kod wsprintf naredbe, mada sam sve OK uradio ( addr - zato sto su pointeri u pitanju i tako dalje )

Gde je greska i ( ako moze ) sta treba poboljsati na ovom kodu ( na nivou beginner-a ) tj. ima li boljeg nacina da se sve ovo izbaci na ekran u silu assemblera, a ne pomocu WinAPI-ja...