[MASM/FASM] Zadanie - zbudowanie trójkąta

shoorick

Użytkownik
Dołączył
Lipiec 17, 2008
Posty
66
własnie to jest pierwszy kod elkozirro, w którem zmieniałem tylko kalkulację wyniku ;)
 

shoorick

Użytkownik
Dołączył
Lipiec 17, 2008
Posty
66
chcesz powiedzieć że skompilowałeś kod, który podałem powyżej, fasmem i ów program ciągle wyświetla że taki trójkat nie istnieje? jaki strony używasz?
 

elkozirro

Użytkownik
Dołączył
Maj 30, 2012
Posty
20
a gdybym chciał żeby liczby mogły być dwu cyfrowe lub więcej to jaki kod powinienem zastosować na wczytanie znaku z klawiatury??
 

shoorick

Użytkownik
Dołączył
Lipiec 17, 2008
Posty
66
niestety nie mogę obejrzeć twojego zdjęcia (załącznik oczekiwa zatwerdzenia :( )

gdybyś chciał mieć prawdziwe wczytanie liczby z klawiatury musialbyś używać wczytanie wiersza (? tekstu), a potem używać prcedurę do konwersji tekstu na liczbę - zwykłe taki procedury mają nazwe "a2i" (ascii to integer)
 

trojanxem

Użytkownik
Dołączył
Grudzień 6, 2011
Posty
239
Załącznik już jest, sorki że niekiedy musicie dłużej na coś czekać, ale w czerwcu mam mniej czasu, bądźcie cierpliwi :)
 

shoorick

Użytkownik
Dołączył
Lipiec 17, 2008
Posty
66
dziękuję :)
musiałbyś zrobić png albo gif niż jpg: bardzo trudno go przeglądać...

1.to nie jest mój kod, który podałem :S
2.nie mogę zrozumieć w jaki moment zrobiono owe zdjęcie:
- jesli w moment 0727:0051, wtedy dlaczego CL=07, AL=09 i co jest w BL, jesli AL musi być 05, BL - 03 i CL - 04???
- jesli program już doszedł do końca (widzę wiadomość "program has returned control to operation system") - wtedy dlaczego nie ma wiadomości w oknu konsolu???

zrob następne:
-A-
1.wklej mój kod do emu8086
2.postaw kursor na "mov al,[X]" naraz po etyketu "kalkulacja"
3.idź do menu "debug" i wybierz opcję "set breakpoint"
4.przyciśni "run", drukuj "2","3","4"
5.przyciśni "single step" trzy razy
-- musisz zobaczyć ekran jak u mnie:
View attachment 228
zauważ: AL=02,BL=03,CL=04
póky nie otrzymasz tego iść dalej nie ma sensu

-B-
1.przycisni "flags" żeby odkryć okno z flagi
2.przyciskaj "single step" i każdego razu uwaznie spojrz co każda komenda robi z rejestramy i jaki flagi masz po porównianiu. dla "jbe" ma znaczenie flagi CF i ZF, dla "jle" jeszcze i SF (dobrze poczytać o tych komendach co one robą)

w mieściu "cmp al,bl" u mnie wygląda tak:
View attachment 229
-- zauważ: AL=06 (=02+04), CF=0 (tutaj: nie mniej) ZF=0 (tutaj: nie równo), więc program nie pojdzie do etyketu "nie"

no... i tak do końca:
View attachment 230
 
Ostatnia edycja:

elkozirro

Użytkownik
Dołączył
Maj 30, 2012
Posty
20
Ale mam jeszcze jeden problem w innym zadaniu w którym mam zastosować sortowanie bąbelkowe:

Jak zainicjować tablice wartości.
Czy trzeba każdą wartość wprowadzać do innego rejestru czy całą tablice w 1 ??
 

elkozirro

Użytkownik
Dołączył
Maj 30, 2012
Posty
20
treść zadania to:
Dany jest ciąg liczb całkowitych . Posortuj go niemalejąco. Zastosuj sortowanie bąbelkowe.

no i posiedziałem i wyklepałem takie coś:
kod.jpg

tylko nie wiem jak na końcu wyświetlić posortowaną tablice.
 

elkozirro

Użytkownik
Dołączył
Maj 30, 2012
Posty
20
data segment
info DB "Program sortuje 4 liczby $"
wiad DB "Podaj liczbe1 : $"
wiad1 DB "Podaj liczbe2 : $"
wiad2 DB "Podaj liczbe3 : $"
wiad3 DB "Podaj liczbe4 : $"
tabela DB [A],,[C],[D]
tabela_size EQU 4
jeszcze_raz DB 0



A DB 0
B DB 0
C DB 0
D DB 0

ends

stack segment
dw 128 dup(0)
ends

code segment
start:
mov dx, @DATA
mov ds, dx

mov dx, offset info
mov ah, 9
int 21h

mov dx, offset wiad
mov ah, 9
int 21h

mov ah,01h ;wczytywanie liczby klawiatury
int 21h
sub al, 30h
mov [A],al


mov dx, offset wiad1
mov ah, 9
int 21h

mov ah,01h ;wczytywanie liczby klawiatury
int 21h
sub bl, 30h
mov ,bl


mov dx, offset wiad2
mov ah, 9
int 21h

mov ah,01h ;wczytywanie liczby klawiatury
int 21h
sub cl, 30h
mov [C],cl


mov dx, offset wiad3
mov ah, 9
int 21h

mov ah,01h ;wczytywanie liczby klawiatury
int 21h
sub ch, 30h
mov [D],ch

kalkulacja:
mov al,[A]
mov bl,
mov cl,[C]
mov ch,[D]

przygotuj:
mov bx, OFFSET tabela
jeszczeraz:
mov jeszcze_raz,0
xor si,si
nastepny_element:
mov ah,[bx+si],al
mov al,[bx+si+1]
cmp ah,al
jbe bez_przejscia
mov [bx+si],al
mov [bx+si+1],ah
mov jeszcze_raz,1
bez_przejscia:
inc si
cmp si,tabela_size
jl nastepny_element

cmp jeszcze_raz,1
je jeszczeraz

mov dx, offset tabela
mov ah, 9
int 21h/9h






mov ax, 4c00h
int 21h

ends

end start
 

shoorick

Użytkownik
Dołączył
Lipiec 17, 2008
Posty
66
tak, no jesli jeszcze chcesz poznać asembler wtedy musisz sie zgodzić że sortowanie cztery liczby jest nie ciekawym ;)

roździelemi zadanie na trzy części:

1.Podawanie dowolnogo* ciągu liczb.
2.Sortowanie.
3.Wyswietłanie wyniku.

*zauważemi, że ciąg jest limitowany (niech 80 liczb) i liczby są tylko 0-9

taki program lepiej pisać w takim porządku: krok №3->krok №1->krok №2 (lub krok №3->krok №2->krok №1)

niech biędziemi sortować naprawdzie nie liczby, a ich kody (nie 0-9 lecz 30h-39h) - nie ma tu róznicy, ale wtedy nie musiemi konwertować symboly na liczby i odwrotnie.

niech do pierwszego kroku tabela biędzie:

Kod:
tabela db "0935628476$"

toż, zrob krok №3 - napisz program, który wyświetli ów "wynik", potem pojdemi dalej ;)
 

swamp1

Użytkownik
Dołączył
Sierpień 6, 2012
Posty
1
Szurik czy można się jakoś z Tobą skontaktować? PM niestety masz wyłączone. Chodzi o rozwiązanie zadania (wiadomo ze nie non profit) :)
 
Do góry Bottom