[Asm] - Czym kompilowac?

0

Czym najlepiej kompilować pliki .asm?
Poza tasmem bo u mnie coś nie działa ( temat wcześniej )
Konketnie chodzi o to żeby skompilować plik który kompilowałem wcześniej tasmem ale za pomocą innego programu.
Dajcie jakieś propozycje bo czas mnie goni a sprawa jest naprawde pilna

0

ee ?? dziwne pytanie, plik *.asm to kod zrodlowy w assemblerze ale skladnia moze byc rozna, s<ort>proboj:</ort>

  • nasm
  • masm
  • fasm
  • as
    i jakies inne
0

jeśli chodzi ci o program, z którym miałeś problem to proszę bardzo - wersja przygotowana do kompilacji pod FASM'em /trochę się pozmieniało :) /

format MZ

entry main:first ; program entry point
stack 100h

segment main

first:
        mov     ax, text
        mov     ds, ax
        mov     sp, 100h


        mov     cx, 10
skok1:
        push    cx
        mov     si, tablica

        mov     cx, 9
skok2:
        mov     ax, word [ds:si]
        mov     bx, word [ds:si+2]
        cmp     ax, bx
        jc      nie_zm

        mov     word [ds:si+2], ax
        mov     word [ds:si], bx
nie_zm:
        inc     esi
        inc     esi

loop    skok2
        pop     cx
loop    skok1


        mov     cx,10
        mov     si, tablica
        xor     bx, bx
petla:  mov     ax, word [ds:si]

cdloop:
        inc     bx
        call    wysw
        inc     si
        inc     si
        loop    petla

        xor     al, al
        mov     ah,4Ch 
        int     21h 

wysw: 
        xor     dx, dx
        mov     bx, 10000 
        div     bx
        push    dx

        add     ax, 30h 
        mov     dx, ax
        mov     ah, 2
        int     21h

        pop     ax
        mov     dx, 0
        mov     bx, 1000
        div     bx
        push    dx

        add     ax, 30h
        mov     dx, ax
        mov     ah, 2
        int     21h

        pop     ax
        xor     dx, dx
        mov     bx, 100
        div     bx
        push    dx

        add     ax, 30h
        mov     dx, ax
        mov     ah, 2
        int     21h

        pop     ax
        xor     dx, dx
        mov     bx, 10
        div     bx
        push    dx

        add     ax, 30h
        mov     dx, ax
        mov     ah, 2
        int     21h


        pop     dx
        add     dx, 30h
        mov     ah, 2h
        int     21h

        mov     dx,10
        mov     ah,2
        int     21h


        mov     dx,13
        mov     ah,2
        int     21h

        ret

segment text                       ;poczatek segmentu dancyh
tablica         dw  10,143,4,54,11,654,48,545,85,43,34
Wynik           db   ? 

Jeśli chodzi o kompilację, to ściągasz FASMW czyli 'flat assembler 1.56 for Win32 GUI' z http://flatassembler.net /zintegrowany kompilator i edytor pod windowsa, ale kompiluje nawet elfy pod linuxa/ , wklejasz kod, zapisujesz i F9 ;)

Nie jestem pewien czy działa poprawnie, ale działa... jeszcze jedno: zmieniłem mov reg, 0 na xor reg, reg oraz add si,2 na 2x inc si ? troche bardziej optymalne.
Nie musisz dziękować :)

0

Wielkie dzięki Deus ( chociaż miałem nie dziękować )
Chodzi o to że muszę troche zmodyfikować ten plik i zanieść na zaliczenie w postaci w której skompiluje ją tasm bo tylko nim kompilujemy na uczelni.
Mam nadzieje że jeżeli po modyfikacji pozamieniam z powrotem te fragmenty które ty zamieniłeś to będzie zrozumiałe dla tasma.
Ale chyba dam rade, pójde do kumpla i sprawdze.
Dzięks!!!

0

Dobra, jak ma być tasm to proszę bardzo :)

assume cs:main, ds:text

main    Segment

start:
        mov     ax, text
        mov     ds, ax
        mov     ax, _stack
        mov     ss, ax
        mov     sp, 100h
        call    first
        xor     al, al
        mov     ah, 4Ch
        int     21h

;-----------------------------------------------------------------------------
first   PROC

        mov     cx, 10
skok1:
        push    cx
        mov     si, OFFSET tablica

        mov     cx,   9
skok2:
        mov     ax, word ptr ds:[si]
        mov     bx, word ptr ds:[si+2]
        cmp     ax, bx
        jc      nie_zm

        mov     word ptr ds:[si+2], ax
        mov     word ptr ds:[si], bx
nie_zm:
        inc     si
        inc     si


loop    skok2
        pop     cx
loop    skok1


        mov     cx,10
        mov     si, OFFSET tablica
        xor     bx, bx
petla:  mov     ax, word ptr ds:[si]

cdloop: inc     bx
        call    wysw

        inc     si
        inc     si
        loop    petla

        xor     al, al
        mov     ah, 4Ch
        int     21h

ENDP    first
;-----------------------------------------------------------------------------
wysw    PROC

        xor     dx, dx
        mov     bx, 10000
        div     bx
        push    dx

        add     ax, 30h
        mov     dx, ax
        mov     ah, 2
        int     21h

        pop     ax
        mov     dx, 0
        mov     bx, 1000
        div     bx
        push    dx

        add     ax, 30h
        mov     dx, ax
        mov     ah, 2
        int     21h

        pop     ax
        xor     dx, dx
        mov     bx, 100
        div     bx
        push    dx

        add     ax, 30h
        mov     dx, ax
        mov     ah, 2
        int     21h

        pop     ax
        xor     dx, dx
        mov     bx, 10
        div     bx
        push    dx

        add     ax, 30h
        mov     dx, ax
        mov     ah, 2
        int     21h


        pop     dx
        add     dx, 30h
        mov     ah, 2h
        int     21h

        mov     dx, 10
        mov     ah, 2
        int     21h


        mov     dx, 13
        mov     ah, 2
        int     21h

        ret

ENDP    wysw

ENDS
;==============================================================================
text    Segment

tablica         dw  10, 143, 4 , 54, 11, 654, 48, 545, 85, 43, 34
Wynik           db  ?

ENDS
;==============================================================================
_stack  Segment stack

        db 100h dup (?)

ENDS

end start
end

Cały Twój problem to brak 'start:' i co równie ważne 'end start'. Teraz juz widzi ep. Przepisałem kod na nowo, w oparciu o wersję dla fasma, chciaż różnice są minimalne. Jak już mówiłem\pisałem - nie dziękuj. To ja jestem Ci wdzięczny - odnowiłem znajomość z tasm'em :) . Jak już to wisisz mi piwo [rotfl]. Wiesz, dla mnie ta cała zabawa jest formą relaksu, odpoczynku od pracy nad własnym debuggerem. Powodzenia jeżeli chodzi o zaliczenie [!!!]
BTW skoro już wspomniałem o moim debuggerze /patrz podpis/ to nie pozostaje mi nic innego jak oznajmić iż za kilkanaście tygodnie /może/ dostaniecie do oględzin wersję alfa RP. Ja to nie Wyder, nieczego pÓÓÓÓki co nie obiecuję; mogę powiedzieć tylko jedno ? nie będzie kopiczkowo [rotfl]

0

Browar ci się należy Deus!!!
Podaj adres to ci wyślę pocztą.
Ale może jeśli już tak bardzo mi pomogłeś to pomożesz w jeszcze jednej sprawie.
Chodzi o to że mam ten program zmodyfikować tak żeby wczytywać liczby do tablicy z klawiatury.
Już mi prawie to działa tylko że jest mały zonk.

Ten kawałek kodu który ma to robić napisałem tak:

mov cx, 10
mov si,offset tablica

skok:

mov ah,01h
mov al,0
int 21h
sub al,30h
mov ah,0
mov word ptr ds:[si],ax
add si,2

loop skok

No i ok, działa ale wczytuje się tylko 5 liczb.
A powinni 10 bo przecież w CX wstawiłem 10.
Masz może pomysł czemu tak jest?

0

Browar ci się należy Deus!!!
Podaj adres to ci wyślę pocztą.
Ale może jeśli już tak bardzo mi pomogłeś to pomożesz w jeszcze jednej sprawie.
Chodzi o to że mam ten program zmodyfikować tak żeby wczytywać liczby do tablicy z klawiatury.
Już mi prawie to działa tylko że jest mały zonk.

Ten kawałek kodu który ma to robić napisałem tak:

mov cx, 10
mov si,offset tablica

skok:

mov ah,01h
mov al,0
int 21h
sub al,30h
mov ah,0
mov word ptr ds:[si],ax
add si,2

loop skok

No i ok, działa ale wczytuje się tylko 5 liczb.
A powinni 10 bo przecież w CX wstawiłem 10.
W pozostałyc 5 miejscach tablicy wstawia się liczba 221
Masz może pomysł czemu tak jest?

0

Sorki pomyłka
Na nieparzystych miejscach tablicy wpisują sie liczby z klawiatury a na parzystych 221.
I sory za te podwójne wpisy

0

Dobra, mój bład.
Niepotrzebny enter przy wpisywaniu liczb.

0

Jak już tyle zrobiłem to zrobię coś jeszcze ? stuknąłem nową prockę konwertujęco-wyświetlającą :) /i tak za kilka dni musiałbym napisać podobną tyle, że 32bit/. Parenaście linii kodu mniej, paredziesiąt bajtów kodu mniej :) A co do tego piwa ? to kiedyś się rozliczymy [rotfl]

wysw    PROC

        push    si
        push    cx
        push    bp
        mov     bp, sp
        mov     cx, 5
        sub     sp, cx   ; bufor na stosie
        mov     bx, 10
conv_1:
        xor     dx, dx
        div     bx
        or      dl, 30h
        mov     di, sp
        add     di, cx
        mov     byte ptr ss:[di], dl
        loop    conv_1

        mov     cx, 5
        mov     si, sp
conv_2:
        inc     si
        mov     dl, byte ptr ss:[si]
        mov     ah, 2
        int     21h
        loop    conv_2

        mov     dl, 0Ah
        mov     ah, 2
        int     21h

        mov     sp, bp
        pop     bp
        pop     cx
        pop     si
        ret

ENDP    wysw                   

//dopisek:
ekhm... wcześniej bufor był jak dla hexa - 4, poprawiłem na 5 /bo przecież to dec/... sorry.

0

Już napisałem ten programik i jestem z niego dumny ;)
Udało mi się głównie dzięki tobie Deus.

0

A co ja takiego zrobiłem ?? Znalazłem błąd /łatwy do przeoczenia/, z którym też dawno temu się spotkałem i przerobiłem lekko jedną prockę przy okazji... No problem :)

1 użytkowników online, w tym zalogowanych: 0, gości: 1