• Welcome to TUKE FÓRUM - Fórum pre študentov Technickej Univerzity v Košiciach.
 

Asembler --- kto potrebuje pomoct...

Started by totaluser, 16.02.2010, 01:58:35

« predchdzajce - alie »

Jurosh

cavte,
podarilo sa mi ako tak urobit moje zadaie  :ropebanana:
ale pri vypise vysledku nastal problem ked je cislo vecsie ako 9... vypisuje rozne znaky podla ascii...
viete mi niekto poradit ako by sa to dalo vyriesit...? (cislo mam v registri "d" alebo neskor koli vypisu out v reg. "a")

a takisto mam ten vsledok previest do 16tkovej sustavy a to nemam sajnu jak na to...  :'(

prosiim pomozte niekto....  :trestac:

Raleon

Quote from: Jurosh on  13.03.2010, 16:18:55
cavte,
podarilo sa mi ako tak urobit moje zadaie  :ropebanana:
ale pri vypise vysledku nastal problem ked je cislo vecsie ako 9... vypisuje rozne znaky podla ascii...
viete mi niekto poradit ako by sa to dalo vyriesit...? (cislo mam v registri "d" alebo neskor koli vypisu out v reg. "a")

a takisto mam ten vsledok previest do 16tkovej sustavy a to nemam sajnu jak na to...  :'(

prosiim pomozte niekto....  :trestac:

1. problem:
ked vypisujes to cislo len tak, ze beries hodnotu registra, ktora ti pocita vysledok, a pripocitas k tomu hodnotu ascii znaku '0', tak samozrejme, bude ti pisat blbosti
pretoze, '0' + 9 = '9'   ('9' je znak 9,  9 he cislo 9)
ale        '0' + 10 = ':'

ak mas napr cisla len od 0 do 255 tak napr:
cislo musis delit 100tkou, celu cast vypises (ako robis hodnota+'0'),
zostatok (teda modulo)   vydelis 10 , celu cast vypises (hodnota+'0') a vypises aj zostatok (hodnota+'0')

2.problem
hexadecimalnu cislicu mozes reprezentovat na 4 bitoch.
teda ak rozdelis byte na 2 casti:
0000|0000 
mas tu rovno svoje 2 hexa cislice , ktore reprezentuju hodnotu v registri (cislo od 0-255)

staci ti :
rotovat ten register dolava alebo doprava 4krat (horne 4 bity sa dostanu ,,vpravo'') aplikovat na vysledok operaciu AND (teda v 8080 mnemonike, instrukcia ANI) s hodnotou 00001111 binarne (hovori sa tomu aj maskovanie)
zostane ti tak len cislo od 0000 0000   do  0000 1111  binarne (00-0F hexa)
a testujes, ak cislo je mensie ako 10, pripocitas hodnote znak '0'
inak pripocitas hodnote  znak 'A' - 10 (-10 pretoze hodnota v registri je 10 alebo viac, a ku 'A'treba pripocitat 0 alebo viac... (max 5))

v druhom kroku uz to povodne cislo netreba rotovat, len aplikujes masku (AND 00001111) a pokracujes ako v predoslom kroku


Have Fun


There is no such bad temper that can not be fixed with some good wine.

tommy-sv

Quote from: Raleon on  13.03.2010, 17:08:26
cislo musis delit 100tkou...

a kedze 8080 nema v instrukcnej sade implementovane delenie tak moze pomoct:
; zakladna implementacia delenia so zachovanim zvysku
; @args citatel v A, menovatel v B
; @returns podiel v C, zvysok v D
; TODO: osetrit delenie nulou, v sucasnosti vracia zrejme 0xffh
divr:
mvi c, 0 ; nuluj C
mvi d, 0 ; nuluj D
cmp b ; porovnaj citatel s menovatelom
jc divr_less ; ak je citatel mensi...
divr_loop:
inr c ; inkrementuj podiel
sub b ; odcitaj menovatel od citatela raz
cmp b ; porovnaj citatel s menovatelom
jnc divr_loop ; ak je vacsi, opakuj slucku
mov d, a ; inak presun zvysok do D
ret
divr_less:
mvi c, 0 ; podiel je 0
mov d, a ; zvysok v A, presun do D
ret
"Čím skôr zomrieš, tým dlhšie budeš mŕtvy."
"Radšej viac vypiť, ako menej zjesť."

Ali N

Komu sa nechce trapit sa so zadanim, ozvyte sa mi na t.marticek@gmail.com ... cena za komplet zadanie (okomentovany zdrojak, dokumentacia, pripadne nejake stretko a blizsie vysvetlenie) - 10€

jardo

kto by vedel spravit prevod do desiatkovej sustavy, alebo kto ho uz ma?

dEVIANT

Quote from: jardo on  15.03.2010, 16:47:03
kto by vedel spravit prevod do desiatkovej sustavy, alebo kto ho uz ma?

Ja ho už mám...a určite mám aj tvoje zadanie :-P
Nie je nič nákazlivejšie ako rozhodný a presvedčením sa vyznačujúci život.

Mettiu

Ak niekto potrebuje spravit zadanie (vyvojak, okomentovany zdrojak, plus nejake to vysvetlenie) tak sa mi moze ozvat. Cena 10e

jardo

ja potrebujem len ten prevod
tak pomoye ni niekto

dEVIANT

Ta máš dajme tomu 24 vyhovujúcich slov, porovnáš s 10, je to väčšie, takže odčítaš 10, ale inkrementuješ nejaké počítadlo desiatok. Ciže máš 14 a v napr. d 1...zas odčítaš...máš 4 čo už je menšie ako 10 - to sú jednotky. A v tom d máš 2 - to sú desiatky.

Nie je nič nákazlivejšie ako rozhodný a presvedčením sa vyznačujúci život.

skorec1

kto si co na kolko ceni a nevie rady? spravim zadanie kto si nebude moct pomoct ale musi byt motivacia! :D

mucko

#60
TAK TROSKU TO VYFARBIM ABY SOM BOL VIDITELNY ... Z COHO STE SA UCILI? TIE PREDNASKY CO SU NA kane.sk MI UPLNE STACIA?
:ropebanana:

CHCEM TO TOTIZ SAM UROBIT  :) bv ... TAK SKUSTE MI ASPON TAKTO POMOCT,ZE MI NAPISETE Z COHO STE SA UCILI ... PRE MNA ZA MNA AJ DO SPRAVY .. LEN PROSIM NAPISETE NIECO  

EDIT: nechápem prečo sa niektorí ľudia vzrušujú nad maličkosťami ako je zafarbenie textu atď  :hammer: tak ale nabudúce sa posnažím byť menej viditeľný aby sa už šéfovia nehnevali :)  :hug:

stricky

keby si sa radsej vzrusoval nad svojim studiom ...tak by si kludne mohol byt farebny jak duha. Len to nezabudni potom napisat tam kde mas.. ;-) a nie kade tade po rocnikoch

cenki

No boli tu prevody oct, hex, dec a vie niekto ako vyplut cislo na vystup v bin?

luky

mám otázku potrebujem previesť výledok programu do 16-tkovej sústavy myslel som že to spravým cez rotaciu akumulátora rar a ral
obe by mali posúvať o 1 bit vpravo a vľavo lenže keď napr.: v akumulátore dám posunúť a potom vypísať znak ktorému prislúcha tá hodnota tak to nesedý vyzerá ako keby bol znak posunutý o 3 či 4 bity. Neviete poradiť.

zadám 4 vyhodý J prevediem bo binarnej 1001010
zdroják:
mov a, d
adi '0'
rar
adi '0'
call putchar  

Tak ako potom RAR a ral fungujú veď to nie je posun o jeden bit?

mucko

Quote from: stricky on  19.03.2010, 22:56:04
keby si sa radsej vzrusoval nad svojim studiom ...tak by si kludne mohol byt farebny jak duha. Len to nezabudni potom napisat tam kde mas.. ;-) a nie kade tade po rocnikoch

takže ja ako tretiak sa nemozem opytat tretiakov v tretom rocniku jak sa im dari? :o ... no nejak sa mi zda,ze niekomu unika myslienka fór

luky

Quote from: luky on  19.03.2010, 23:41:54
mám otázku potrebujem previesť výledok programu do 16-tkovej sústavy myslel som že to spravým cez rotaciu akumulátora rar a ral
obe by mali posúvať o 1 bit vpravo a vľavo lenže keď napr.: v akumulátore dám posunúť a potom vypísať znak ktorému prislúcha tá hodnota tak to nesedý vyzerá ako keby bol znak posunutý o 3 či 4 bity. Neviete poradiť.

zadám 4 vyhodý J prevediem bo binarnej 1001010
zdroják:
mov a, d
adi '0'
rar
adi '0'
call putchar  
Tak ako potom RAR a ral fungujú veď to nie je posun o jeden bit?
jaj moja hlavá dubová :ohmigod:
no napíšem to pre prípad že aj niekto iný bude mať taký problém
neuvedomil som si že pred ral alebo rar som použil adi '0' čiže binarnej napr.: dvojke som priradil jej kód v ascii tabulke tak preto vypisovalo tie voloviny

Chcem sa spýtať dá sa carry bit vynulovať aj inak ako spravením presunu medzi registrami?

Raleon

Quote from: luky on  19.03.2010, 23:41:54
Tak ako potom RAR a ral fungujú veď to nie je posun o jeden bit?

RAR :
pred:
   byte         carry flag
76543210          c
po:
c7654321          0
(tj, carry sluzi ako 8mi bit)

RRC
pred:
76543210          c
07654321          0
(tj v carry sa len ulozi kopia krajneho bitu)

opacny smer uz odvodis...


There is no such bad temper that can not be fixed with some good wine.

Raleon

Quote from: luky on  20.03.2010, 16:01:04
Chcem sa spýtať dá sa carry bit vynulovať aj inak ako spravením presunu medzi registrami?

STC          (carry nastavi na 1)
CMC          (zneguje carry)


There is no such bad temper that can not be fixed with some good wine.

Raleon

Quote from: cenki on  19.03.2010, 23:37:27
No boli tu prevody oct, hex, dec a vie niekto ako vyplut cislo na vystup v bin?

binarny vypis:

Byte s hodnotou rotujes 8krat dolava  s RLC
po kazdej rotacii vypises na obr "1", ak carry je 1, "0" inac


There is no such bad temper that can not be fixed with some good wine.


ursus

boyz, co secko treba na odovzdanie vlastne? co je to dokumentacia?
So this router walks into the doctor's office...
- Doctor, it hurts when IP.

mucko

#71

org 1000
dcx sp

lxi h, text
call putstr

lxi d, vlozeny
call getline

lxi b, vlozeny
mvi d, 0      ; vhodne slova
mvi e, 0      ; nevhodne slova


char_loop:
ldax b
inx b
cpi 10
jz checkIfNula
cpi 13
jz char_loop
cpi 32
jz checkIfNula
cpi 0
jz char_end

cpi '0'
jc error
cpi 'F'+1
jc char_loop

error:
mvi e, 1
jmp char_loop


checkIfNula:
mov a, e
cpi 1
mvi e, 0
jz char_loop

inr d
jmp char_loop


char_end:
lxi h, text2
call putstr

mov a, d
adi '0'
call putchar
call newline

hlt

include 'examples\8080\include\getchar.inc'
include 'examples\8080\include\getline.inc'
include 'examples\8080\include\putstr.inc'
include 'examples\8080\include\putchar.inc'
include 'examples\8080\include\newline.inc'

text: db '******Pocet slov v sestnastkovom tvare (0x)******',10, 'Slova mozno zapisovat len v tvare 0xFFF! Male znaky nezachytava!', 10,13,10, 'Prehladavany text: ',0
text2: db 10,13,'Vysledny pocet(v tvare 0xFFF): ',0
vlozeny: ds 30


tak trosku som si sadol k tomu a dosiel som az sem ... funguje to tak, ze zachytava slova zacinajuce s 0-lou a dalsi znak moze byt len cislo alebo A-F aby zvysilo ten register "d"  .... teraz ako to mam urobit aby za nulou zachytavalo este aj znak 'x'? no a ma mi to vypisovat sestnastkovo ... ale teraz mi staci kym to vypisuje v desiatkovej sustave ... na vypis do sestnastkovej je este cas :D


a mam este jednu otazku ... googlil som vela ale nenasiel som nic k tomu ... tam mame napr. cpi 10 .. toto robi, ze prechod na novy riadok ... a cpi 13 je na koniec vstupu a cpi 32 je na medzeru ... to skade mam vediet, ze napr co robi cpi 22?  ah:

dEVIANT

Nie je nič nákazlivejšie ako rozhodný a presvedčením sa vyznačujúci život.

BCAA

heh ale to mate vsetci len take zadania ze prevody cisel :)  ci ratate slova ?

ja som mal na zadani triedit riadky suboru so zohladnenim slovenskych znakov (dz, ch  nazov suboru mal byt parametrom prikazoveho riadku)  :) a bolo to zaujimave :)