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
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
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ć :)
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!!!
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]
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?
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?
Sorki pomyłka
Na nieparzystych miejscach tablicy wpisują sie liczby z klawiatury a na parzystych 221.
I sory za te podwójne wpisy
Dobra, mój bład.
Niepotrzebny enter przy wpisywaniu liczb.
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.
Już napisałem ten programik i jestem z niego dumny ;)
Udało mi się głównie dzięki tobie Deus.
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 :)