C64Power Forum

Software => Programowanie => Wątek zaczęty przez: bluemetal w 19 Stycznia 2014, 14:23

Tytuł: ile to bajtów?
Wiadomość wysłana przez: bluemetal w 19 Stycznia 2014, 14:23
Witam

Obecnie czytam książkę J. Ruszczyca "Assembler 6502".
Trafiłem tam na ciekawe zadanie, którego mimo prostoty nie potrafię rozwiązać.
A mianowicie:

Ile bajtów liczą następujące rozkazy:

LDA #0      
STA 1000        
BRK        
INC        
RTS.

i dlaczego tyle? Dodam że w zadaniu jest mały haczyk.

BTW. w jaki sposób umieszczacie podpisy poza postem?
(na samym dole, coś jak opis statutu w gg)
Tytuł: ile to bajtów?
Wiadomość wysłana przez: F7sus4 w 19 Stycznia 2014, 15:31
wielbark2005: Odpowiem tylko na drugie pytanie. Kliknij tutaj i uzupelnij pole SIGNATURE.
Tytuł: ile to bajtów?
Wiadomość wysłana przez: krolikbest w 19 Stycznia 2014, 16:07
wielbark2005
Witaj,

może to Ci pomoże
http://www.cs.put.poznan.pl/tzok/wiki/index.php?n=WprowadzenieDoInformatyki.Asembler

Pozdrawiam,
Tytuł: ile to bajtów?
Wiadomość wysłana przez: arecki w 19 Stycznia 2014, 20:51
Zgaduje; kazdy rozkaz to jeden bajt, plus dane (stala, adres)
czyli 8 bajtów?
Tytuł: ile to bajtów?
Wiadomość wysłana przez: wegi w 19 Stycznia 2014, 20:57
nie ma rozkazu INC

jest INC $xx
albo INC $xxxx

więc 9 albo 10 bajtów

Jeżeli ma to być INX albo iny to INY to 8 bajtów
Tytuł: ile to bajtów?
Wiadomość wysłana przez: BagoZonde w 19 Stycznia 2014, 21:10
Nie trzeba zgadywać, wystarczy wejść do monitora, wpisać dany rozkaz i policzyć ile zajmuje bajtów. Każda komórka to jeden bajt. Popatrz sobie na length in bytes: http://www.c64-wiki.com/index.php/INC
Tytuł: ile to bajtów?
Wiadomość wysłana przez: arecki w 19 Stycznia 2014, 21:21
no mi chodzilo generlnie o zasadę ; opcody 6502 są jedno bajtowe, jezeli do tego mamy bajt danyh lub adres to dojda jeszcze bajt lub dwa. Jedyna zmylka moze byc przy warunkowych skokach typu BNE, tam adres jest relatywny i jednobajtowy

a INC fakytcznie operuje tylko na pamieci
Tytuł: ile to bajtów?
Wiadomość wysłana przez: bluemetal w 19 Stycznia 2014, 21:34
Fajnie że rozwinąłem dyskusje. Tak, haczyk był przy INC,
brakuje operandu w zadaniu (używa się jeszcze tego określenia?)

A odpowiedzi to:

LDA #0 = 2 bajty
STA 1000 = 3 bajty
BRK = 1 bajt
INC - jak wyżej (haczyk)
RTS. = 1 bajt (tylko co oznacza ta kropka?)

Odpowiedź przytaczam za autorem książki.

Niestety muszę powtórzyć sobie jeszcze Basic zanim wezmę się do asemblera,
trochę zajmie zanim przetrawię i zrozumiem całość zagadnienia, dzięki za
szybką odpowiedź.
Tytuł: ile to bajtów?
Wiadomość wysłana przez: BagoZonde w 19 Stycznia 2014, 21:45
Zmyłki z BNE się nie dopatrzyłem ;). Jak wspomniałeś, BNE cechuje się relatywnym adresowaniem czyli adres zajmuje jeden bajt. Ogólnie rzecz ujmując, wykonuje więc skok w obrębie 128 bajtów w górę lub w dół.
Tytuł: ile to bajtów?
Wiadomość wysłana przez: bluemetal w 19 Stycznia 2014, 21:47
Od czego zależy kierunek BNE? i jak się to odnosi do kolejności w programie,
czy można to przyrównać do GOTO?
Tytuł: ile to bajtów?
Wiadomość wysłana przez: arecki w 19 Stycznia 2014, 22:03
wielbark2005:
W zadaniu chodziło o liczbę bajtów poszczególnych rozkazów, a nie sumę
wszystkich instrukcji. (to tak gwoli wyjaśnienia)

w gruncie rzeczy chodzi o to samo ( bo po co inaczej w ogóle się tym zajmować?)
Tak czy inaczej każdy rozkaz asemblera to bajt plus dodatkowe bajty danych lub adresów
Jeśli znamy rozmiar danego polecenia to wiemy o ile zwiększy się licznik rozkazów i pod jakim adresem znajdziemy następne polecenie.

inna sprawa jak nam się "omsknie" adres skoku np o jeden bajt, to może się okazać że to co była np. stałą w danym poleceniu zostanie zinterpretowane jako rozkaz i w najlepszym wypadku skończy się to zawieszeniem programu \"\"

wielbark2005: rozumiem że to twoje pierwsze podejście do nauki jakiegokolwiek assemblera?
Tytuł: ile to bajtów?
Wiadomość wysłana przez: arecki w 19 Stycznia 2014, 22:37
BNE bardziej przypomina strukturę

if a=0 then goto ...

a skoczy tam gdzie chcesz, pod warunkiem ze nie dalej niz +/-128 bajtow
Tytuł: ile to bajtów?
Wiadomość wysłana przez: bluemetal w 19 Stycznia 2014, 23:11
Tak to moje pierwsze podejście...
Tytuł: ile to bajtów?
Wiadomość wysłana przez: Kisiel w 20 Stycznia 2014, 00:17
arecki:
o może się okazać że to co była np. stałą w danym poleceniu zostanie zinterpretowane jako rozkaz

czasami tak się robi bit $a901