[Assembler] Poprawianie składni

0

Witam czcigodni programiści :) .

Mam taką małą sprawę... małe zadanko, jakby ktoś się na tym znał i chciał się wykazać to prosiłbym o pomoc. Program ma sortować liczby metodą bąbelkową. Na samym dole jest podany kod, który trzeba poprawić tak, aby program działał poprawnie i spełniał swoje zadanie. Oto treść zadania:

; Algorytm sortowania babelkowego:
; 1. Start.
; 2. index = 0; zamiany = 0;
; 3. Odczytaj dwa sasiadujace elementy z tablicy o pozycjach index oraz
; index + 1; jezeli pierwszy z odczytanych elementow jest wiekszy od
; swojego nastepnika, to zamien elementy miejscami oraz zwieksz zamiany.
; 4. Zwieksz index o jeden.
; 5. Jezeli index < dlugosc_tablicy - 2 to skacz do 3.
; 6. Skacz do 2 jezeli zamiany rozne od zera.
; 7. Stop.

A to jest kod do poprawy:

            .MODEL  SHALL.

Dane bx], dx
dec dl
Nastepny:
inc bx
lop Petla
test dl, dl
jnz Petla

            mov     ax, 4C9812h
            int     21h

Dane ENDSGMT

Stosik SEGMEMT STAC

            DB      100h DUP (!)

Stos ENDS

            END     Kod

Czy mógłbym liczyć na czyjąś pomoc ?

0

Niestety jako pierwszy musze odpisać:
Dawno sie tak nie ubawiłem jak przy czytaniu tego kodu, ale to jedyna dobra rzecz jaka z trego wynikła. To własciwie jest parodia assemblera. Wygląda na to, że miałeś poważne luki podczas kopiowania tego kodu na forum, albo ktoś zrobił ci kawał dając tak "błędny" kod.

Właściwie to nie ma szans na jego poprawe i lepiej poproś kogoś żeby napisał to od nowa.

0

Pomogę - zaznaczę błędne fragmenty :>


            .MODEL  <font color=red>SHALL.</span>

<font color="red">Dane bx]</span>, dx
dec dl
Nastepny:
inc bx
<font color="red">lop</span> Petla
test dl, dl
jnz <font color="red">Petla</span>

            mov     ax, <font color=red>4C9812h</span> <font color=green>błąd, gdyż ta liczba nie zmieści się w ax</span>
            int     21h

Dane <font color="red">ENDSGMT</span>

Stosik SEGMEMT <font color="red">STAC</span>

            DB      100h DUP (!)

<font color="red">Stos</span> ENDS <font color="green">błąd, bo nie ma początku takiego segmentu - poza tym nazwa jest niepoprawna - pokrywa się z instrukcją Assemblera</span>

            END     Kod

chyba nic nie pominąłem

.. no tak - dodałem etykietę

0
Marooned napisał(a)

chyba nic nie pominąłem

Petla - etykiety nie ma :)

0

Wiem, że niektórym z Was może się to wydawać śmieszne (chodzi mi o wygląd kodu), ale właśnie na tym polega zadanie :) . Pojęcia nie mam jak to poprawić i co gdzie trzeba dopisać, usunąć lub zamienić bo dopiero zaczynam w tym grzebać, a na czytanie materiałówi instrukcji nie mam zbyt wiele czasu przez inne zajęcia i obowiązki. Dlatego zwróciłem sięo pomoc do Was Geniusze :) . Z tego co widzę poprawienie takiego kodu dla Was nie byłoby zbyt wielkim problemem. Czy w związku z tym mogę liczyć na rozwiązanie tego zadanka? Może mając gotowy przykład szybciej sięczegoś nauczę ;) .

0
Łukasz R. napisał(a)

Może mając gotowy przykład szybciej sięczegoś nauczę ;) .

Mając gotowy program może i szybciej się nauczysz. Ale nie gotowe rozwiązanie zadania. Jeżeli chcesz się tą metodą uczyć to:

  • przeglądasz cudzy kod, najlepiej jakiś prosty - masz to co byś uzyskał, jakby ci podano na tacy
  • poprawiasz ten kod, tak by działał - masz własny wkład, którego innymi sposobami nie osiągniesz

Tak więc raczej nie otrzymasz tutaj kodu. Możesz natomiast wklejać tutaj swoje próby rozwiazania. Wtedy zapewne dostaniesz wskazania co jeszcze jest nie tak.

Sposób całkiem ciekawy na naukę. Jedyna rzecz jaka mi tutaj nie pasuje, to pewne narzucenie składni. Ja akurat wolę troszkę inną składnię, a sam TASM oferuje różne sposoby pisania. Moim zdaniem zadanie powinno skupiać się na problemach dotyczących bardziej samych instrukcji, elementów doczycących procesora. Ale to pewnie pierwsze zadanie z takiego cyklu, więc na zapoznanie się ze składnią, to czemu nie.

Na pewno to jest efektywniejszy sposób niż to co u nas było, że trzeba było napisać najpierw kilka prostych programików, a potem coś troszkę większego na projekt. Jedynym efektem tego, to było to, że parę kumających odrobinę osób zarobiła troszkę na współstudentach.

0

Co innego jakbys mial konkretny problem, pokazales kod ktory nawet sie nie skompiluje nie mowiac juz o robieniu czegokolwiek i chcesz, zeby ktos ci to poprawil, to tak jakbym ja chcial zeby ktos poprawil ten post na referat "wplyw kultury chinskiej na tworczosc Chopina" :/

Poza tym google nie gryzie, PIERWSZA proba:

http://www.google.com/search?hl=en&ie=UTF-8&q=assembly+bubble+sort&spell=1

0

Podejrzewałem, że nic tu nie wskóram... Kilka sprostowań:

Po pierwsze: wiem jak się korzysta z googli. Wspomniałem już, że nie mam czasu przeglądać tych wszystkich materiałów, bo nie mam na to zbyt wiele czasu (w napływie codziennych obowiązków).

Po drugie: Wyobraźcie sobie, że wiem, że ten kod się nie skompiluje. Właśnie na tym polega zadanie. Trzeba to "coś" tak przekształcić żeby się skompilował i działał. Nie wiem kto opracował to zadanie, ale na tym ono polega.

Po trzecie: problem jest konkretny. Patrz: po drugie.

Po czwarte: To fakt, jest to pierwsze zadanie tego typu. Nie mam jednak czasu na to żeby eksperymentować. Z resztą.. wspomniałem już o tym w punkcie pierwszym.

Na marginesie: zamiast pisać tyle na próżno dalibyście gotowca, to mielibyście chociaż spokój ze mną :) .

pÓÓÓÓki co, jeśli znajdę wolny czas, pokombinuję. Dzięki chociaż za podpowiedzi ;)

0

Dzień dobry, to znowu ja. Chciałem zapytać czy poniższy kod będzie według Was działał poprawnie? Kompiluje się bez problemu (żadne błędy się nie pojawiają), ale nie wiem czy działa, bo program nic nie wyświetla na ekranie.

;===Początek===============================

.MODEL SMALL

;========================================
Stosik SEGMENT STACK

DB 100h DUP (?)

Stosik ENDS
;========================================

;========================================
Dane SEGMENT

DL_TABLICA EQU 12h
Tablica DB 1, 2, 11, 1, 12, 33

Dane ENDS
;========================================

Kod SEGMENT

	ASSUME	CS:Kod, SS:Stosik

Start:
mov ax, Dane

	xor	dl, dl
	mov	cx, OFFSET Tablica
	mov	bx, DL_TABLICA

Petla:
mov ax, [bx]
cmp ah, al
jae Petla
xchg al, ah
mov [bx], dx
dec dl
Nastepny:
inc bx
loop Petla
test dl, dl
jnz Petla

	mov	ax, 4C00h
	int	21h

Kod ENDS
END Start

;===Koniec====================================

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