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

ASSEMBLER i8080 / 8086 zadania + HELPDESK :)

Started by Raleon, 03.03.2011, 19:05:30

« predchdzajce - alie »

Raleon

Ahojte,
- Ked mate otazky ohladom assembleru (konkretne otazky ohladom programovania, riesenie problemov, atd.) piste kludne sem.  it is FREE :)


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

darkoooooo

Určte počet slov, v ktorých súčet ASCII kódov znakov je deliteľný dvoma
pocet  tlacte osmickovo

no neviem jak to ani len zacat ...nejake navody ?

tino8

zacat treba tak ze si vezmes program ktory uz je hotovy (je v emustudiu niejake example) a ten prerobis na svoje potreby


karamel je cukr co se uz neuzdravi!

Domino_666

Nejaký základný manuál, prípadne zoznam inštrukcií by nebol? Zatiaľ som z celého assembleru úplne v ... a to som to mal trocha aj na strednej.

Tren

absolutne nemam ponatia co sa tam robi a akym principom, ak by niekto mal nejake materialyk tomu z coho sa da nieco aj naucit nech to sem da  :)

tino8

assembler 8080 instruction set skuste nahodit do googlu a uvidite zazraky


karamel je cukr co se uz neuzdravi!

esperian

toto som nasiel na FTPcku pod nazvom Asembler pre blbych xDD ale tak mne by trebalo pre blbejsich lebo ani tomu nerozumiem xDD

http://www.upnito.sk/subor/c5e0f617f61267838d6155f200666aaa.html

luky

Dá sa priamo stiahnuť kniha od Cp press (teraz už neviem či je to 8080 alebo 8086 ale pomôže),
na FTP je niekde zašitý priamo manuál na 8080 potom sú tam pr... kde sú v 2.,3. vysvetlené príkazy.


hardest

ten asembler bol dost na hovno vysvetleny na cviceniach, vobec som to nepochopil

esperian


Danix

u nas to malo velmi daleko od normalneho vysvetlovania :/

dEVIANT

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


RiTChi

Quote from: Danix on  05.03.2011, 01:56:27
u nas to malo velmi daleko od normalneho vysvetlovania :/

Nie Nie kolego, u nas to nebolo ani vysvetlovanie, nie to zeby od neho malo daleko...

hardest

#15
Raleon, mas PM

Raleon

Quote from: darkoooooo on  04.03.2011, 18:13:03
Určte počet slov, v ktorých súčet ASCII kódov znakov je deliteľný dvoma
pocet  tlacte osmickovo

no neviem jak to ani len zacat ...nejake navody ?

Ahoj.

Algoritmus by som riesil takto:
-nacitam znak po znaku, a pripocitam ku nejakej premennej (register) kod znaku. *
-ak znak bola medzera, tak som nacital slovo, urcim ci je sucet delitelny dvoma
- ak ano, pripocitam k pocitadlu spravnych slov 1.
- robim to pokial som nestlacil enter.
- vypis v osmickovej : na to uz urcite najdes priklad ako na to.

*pretoze sucet ascii kodov znakov moze byt dost velka, (>255, teda aspon registrovy par (16bitov) potrebujes na ulozenie), mozes vyuzit taku fintu, ze budes mat len jeden register 8 bitovy, ku ktoremu furt pripocitas kod znaku, a seres na to ci sa to pretecie ci ne (ci sucet je viac ako sa zmesti do 8 bit.)
Pri parnosti ta aj tak zaujima, ci 0-ty bit cisla je 1 (neparnost) alebo 0 (parnost)
napr
5 binarne je  101  (neparne)
6 binarne je 110 (parne)

==================

Pri programovani v asembleru (a v programovani hocicoho) majte na mysli ze je to len stroj, ktory robi prave to co ste mu napisali.
Ak mate ulohu, ktoru ma program riesit, skuste ulohu rozbit na malicke veci co sa ma udiat - teda co presne sa ma urobit, pre riesenie:
napr.
nacitanie slov:
urcite budes potrebovat nacitat znaky
budes potrebovat zistit koniec slov(medzera), a koniec vstupu(enter)
...


Pri asembleru vsak ste blizsie k hardveru pocitaca. Tu musite rozbit ulohy este jemnejsie:
nacitanie znaku uz tu nemate ,,jednoduche ako v C'' ze readchar();
tu uz musite nastavovat nejake registre, citat vstupnovystupne porty, atd.
(pravda, ze sa mozete stretnut uz s implementovanou funkcionalitou nacitania znaku, ktore uz zavolate s CALL, podobne ako dajaku funkciu)


Druha vec ze tu uz lepsie je vyuzit vlastnosti dvojkovej sustavy:
napr:
-parnost neparnost na zaklade 0-teho bitu cisla
-prevod z dvojkovej do osmickovej sustavy: napr 01100110:  rozdelis na 01 | 100 | 110  - kazda trojica je vlastne cislica v osmickovej sustave
-prevod do hexa:  01100110: rozdelis na - 0110 | 0110  - kazda stvorica tvori cislicu v hexadecimalnej sustave.
pre vyuzitie tychto vlastnosti mozete pouzit teda rotacie registrov (z  1001 sa stane   0011  (rotoval som dolava o 1 bit))
maskovanie operaciou AND
napr mam   11000111  a potrebujem len dolne 4 bity:
11000111 AND 00001111  => 00000111

atd atd atd...
A ano venujte trocha (zopar hodin?) casu na lustenie inych programov. (dobre okomentovanych)
urcite vam pomoze.



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

darkoooooo

diky :) posnazim sa nieco s tym spravit a snad mi to nejako pojde

erik701

Ja by som potreboval poradiť s mojím zadaním: Určte počet slov obsahujúcich reťazec ASM alebo asm.
Niečo už mám po preróbke iného zadanie, ale hľadá to len slová ktoré obsahujú iba A,S,M,a,s,m alebo ich kombináciu.
org 1000

dcx sp         ;inicializacia zasobnika (0FFFFh)

lxi h,text      ;vypis text
call putstr

lxi h,text1      ;vypis text1
call putstr

lxi d,vlozeny      ;adresa pre vstup retazca
call getline

lxi b,vlozeny

mvi d,0       ;pocet malych pismen
mvi e,0         ;pocet cislic
push psw      ;vlozime si nulu do zasobnika, pocet vyhovujucich slov
jmp char_loop

char:
mvi d,0         ;vynulovanie pocitadla
mvi e,0         ;vynulovanie pocitadla
char_loop:         ;citanie znakov a pocitanie cislic v slove
ldax b         ;nacitanie znaku z retazca
inx b         ;posun v retazci doprava
cpi 10         ;porovnanie pre koniec nacitavania, enter
jz koniec_nacitania      ;
cpi 32          ;porovnanie na koniec slova, space=medzera
jz pocet_slov     
cpi 'A'         ;vacsie alebo rovne ako 0
jz increment     
cpi 'S'      ;mensie alebo rovne ako 9
jz increment
cpi 'M'         ;vacsie alebo rovne ako 0
jz increment     
cpi 'a'      ;mensie alebo rovne ako 9
jz increment
cpi 's'      ;mensie alebo rovne ako 9
jz increment
cpi 'm'      ;mensie alebo rovne ako 9
jz increment
inr e         ;zvysenie poctu cislic o 1
jmp char_loop

increment:
inr e
inr d         ;zvysenie poctu pismen o 1
jmp char_loop


pocet_slov:   ;pocitanie vyhovujucich slov
mov a,d     ;presun hodnoty z registra D do akumulatora
cmp e      ;porovnanie akumulatora a registra E
jc char         
pop psw      ;vyber zo zasobnika do akumulatora
inr a         ;zvysenie poctu vyhovujucich slov
push psw          ;vlozenie z akumulatora do zasobnika
jmp char

koniec_nacitania:  ;osetrenie ak sme spracovali posledne slovo
mov a,d
cmp e         ;porovnanie ci slovo obsahuje aspon 2 cislice
jc prevod
pop psw
inr a         ;zvysenie poctu vyhovujucich slov
push psw
jmp prevod

prevod:      ;prevod 4b binarneho cisla na sestnastkove [jednotky]       
pop psw
mov h,a
ani 15         ;logicky sucin
push psw
cpi 10         ;porovnananie ci je cislo mensie ako 10   
jc prevod1
pop psw         ;ak je mensie skoci na koniec1
mov b,a
mvi a,7         
add b         ;pripocitanie 7, lebo su to pismena, vacsie ako 10
push psw

prevod1:      ;prevod 4b binarneho cisla na sestnastkove [desiatky]
mov a,h
rrc         ;posun o 1b doprava
rrc
rrc
rrc
ani 15         ;logicky sucin
push psw
cpi 10         ;porovnananie ci je cislo mensie ako 10
jc vypis         ;ak je mensie skoci na koniec1
pop psw
mov b,a
mvi a,7
add b         ;pripocitanie 7
push psw

vypis:      ;vypis poctu slov sestnastkovo
lxi h,text2
call putstr

pop psw
adi '0'
call putchar      ;vypisanie sestanstkovej cislice [desiatky]

pop psw
adi '0'
call putchar      ;vypisanie sestanstkovej cislice[jednotky]

call newline
hlt

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 'Program zistuje pocet slov obsahujucich retazec ASM alebo asm',10,13
text1: db 'Zadaj retazec, ukonci stlacenim enter  ',0,10,13
text2: db 10,13,'Pocet slov, v hexa tvare: 0x',0
vlozeny: ds 50

Vie niekto poradiť?

Raleon

Quote from: erik701 on  16.03.2011, 01:39:08
Ja by som potreboval poradiť s mojím zadaním: Určte počet slov obsahujúcich reťazec ASM alebo asm.
Niečo už mám po preróbke iného zadanie, ale hľadá to len slová ktoré obsahujú iba A,S,M,a,s,m alebo ich kombináciu.
...
Vie niekto poradiť?

skopiroval som to tu pre inspiraciu ostatnych.

Ahoj, ako vydim, ten kod trosku cudne pocita...
pripocita k E, aj D  jedno, ked je to znak z A,S,M,a,s,m,  inak len ku E
a za spravne slovo povazuje slovo, kde D >= E.
je to cudne Smiley


Riesil by som to inak.
Jeden register pouzi ako priznak (napr D)
pred zaciatkom slova to nastav na 0.
a urobis toto pre kazde pismeno:
ak stav v D je 0 a pride znak 'a' => stav v D nastavis na 1
ak stav v D je 1 a pride znak 's' => stav v D nastavis na 2
ak stav v D je 2 a pride znak 'm' => stav v D nastavis na 3
ak stav v D je 0 a pride znak 'A' => stav v D nastavis na 11
ak stav v D je 11 a pride znak 'S' => stav v D nastavis na 12
ak stav v D je 12 a pride znak 'M' => stav v D nastavis na 13

ak stav v D je 1,2,11, alebo 12, a pride znak 'a' => D nastavis na 1
ak stav v D je 1,2,11, alebo 12, a pride znak 'A' => D nastavis na 11

ak je stav v D 3, alebo 13, tak si uz v danom slove nacital sekvenciu ASM  / asm, cize slovo je dobre, pockas na koniec slova, a zapocitas to ako spravne.

v inom pripade nastavis D spat na 0 (sekvencia je pokazena)

Trosku je to hardcore, viem, ale skus to.


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

razer08

- Určte počet slov obsahujúcich viac číslic ako písmen veľkej abecedy.
- počet (0-255) vytlačte osmičkovo

potreboval by som vyvojak a referat k tomuto zadaniu :embarassed:

Mitwoc

ma uz niekto ten identifikačný list s textom zadania a vývojový diagram? .... staci mi iba vidiet ako to ma priblizne vyzerat po formalnej stranke....

tumo55

Ahoj, potreboval by som poradiť. V zadaní mám počítať slová, ktoré obsahujú veľké a zároveň malé písmená. Riešil som to tak, že som v slove spočítal veľke a malé písmená, teraz neviem ako mam zistiť, či sú obidve hodnoty väčšie ako nula.

Raleon

Quote from: tumo55 on  19.03.2011, 19:05:32
Ahoj, potreboval by som poradiť. V zadaní mám počítať slová, ktoré obsahujú veľké a zároveň malé písmená. Riešil som to tak, že som v slove spočítal veľke a malé písmená, teraz neviem ako mam zistiť, či sú obidve hodnoty väčšie ako nula.

priklad : mas velke pismena spocitane v H, a v L male:

mov a,h       ; do A das hodnotu z H
cpi 0            ; porovnas A s 0
jz nedobreslovo ; ak A == 0, ti to skoci na "nedobreslovo"
mov a,l           ; podobne s L...
cpi 0
jz nedobreslovo

; tu sa dostanes, ak aj H aj L su ine od 0
jmp  dakde_prec

nedobreslovo:
;tu sa dostanes ak jedna z H alebo L su 0ve.


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

Domino_666

nepomôže niekto trocha? Zadanie č. 17. nepoznám nikoho iného kto to ešte má.

"Určte počet slov obsahujúcich len rovnaké znaky."

Stačí mi nejaký nápad ako to riešiť a prípadne nejaké (vypracované  ;D) zadanie, ktoré sa na to čo možno najviac podobá a ktoré len prerobím  ;D Ak tomu pochopím, vývoják už problém nebude...