• 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 »

Tren

Quote from: Domino_666 on  20.03.2011, 05:23:48
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...
mas PM

matotv

Zdravim, mam zadanie cislo 20, mam hotovy zdrojak, ale na vypis do 16, mne treba do binarnej, som z toho mimo, nemoze mi niekto pomoct? :D aspon nejaku pomocku?

tumo55

#27
Quote from: Raleon on  19.03.2011, 23:30:58
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.


prepac ale mam to nejako takto a k vhodnym slovam mi to pripocitava vsetky slova mozes mi prosim ta este pomoct ?



org 1000

dcx sp       

lxi h,text     
call putstr

lxi h,text1     
call putstr

lxi d,vlozeny   
call getline

lxi b,vlozeny

mvi d,0     
mvi e,0       
push psw     
jmp velke_pismna

char:
mvi d,0       
mvi e,0       
velke_pismna:         
ldax b       
inx b
cpi 10       
jz koniec_nacitania       
cpi 32         
jz pocet_slov     
cpi 'A'       
jc pismena     
cpi 'Z' + 1     
jnc pismena
inr e       
jmp velke_pismna

pismena:
cpi 'a'       
jc velke_pismna     
cpi 'z' + 1     
jnc velke_pismna
inr d       
jmp velke_pismna

mov a,d     
cpi 0           
jz nedobreslovo
mov a,c         
cpi 0
jz nedobreslovo


jmp  pocet_slov

nedobreslovo:
hlt


pocet_slov: 

pop psw     
inr a       
push psw         
jmp char

koniec_nacitania:   
pop psw
inr a       
push psw
jmp prevod

prevod:     
pop psw
mov h,a
ani 15     
push psw
cpi 10       
jc prevod1
pop psw         
mov b,a
mvi a,7         
add b       
push psw

prevod1:     
mov a,h
rrc       
rrc
rrc
rrc
ani 15       
push psw
cpi 10       
jc vypis       
pop psw
mov b,a
mvi a,7
add b         
push psw

vypis:     
lxi h,text2
call putstr

pop psw
adi '0'
call putchar     

pop psw
adi '0'
call putchar     

call newline
hlt

Domino_666

Pozrel som si aj manuál, ale poriadne sa v tom strácam, nieje mi jasný syntax.

Mám zistiť, koľko je slov s rovnakými znakmi. Úvodný text napísať viem, vychádzam z vypracovaného zadania pocet_cislic.asm zo zložky examples čo je priamo k Emu studiu.
Vstup reťazca mi myslím funguje tiež (s tým som nič nerobil).

Ide mi o to, ako fungujú cykly a podmienky. Som poriadne zvyknutý na Cčko, php a podobné jazyky, s týmto trocha bojujem.

Ak som dobre pochopil, cpi je porovnanie. Teda, ak sa rovná hodnota ktorú zadám (ani neviem čomu) tak sa vykoná nasledujúci riadok? Alebo ako toto funguje?

A aké sú rozdiely medzi jc jnc a jz? Snažil som sa tomu pochopiť hlavne z prezentácie čo bola na prednáške, ale tam mi tá tabuľka inštrukcií vôbec nič nehovorí.

bEnd3r


mino

mov a,e
cmp a,d
a potom klasika jz/jnz/jc/jnc navestie...

mino

Na cvicenia mam Subu. Mam otazku k tej dokumentacii: Treba kreslit vyvojovy diagram aj na vystup? T.j. na prevod do 8-kovej sustavy v mojom pripade?

hardest

nema niekto skusenosti s Jakubcom, ze ako to je pri obhajobe zadania ? ... staci mu vysvetlit ako ten program funguje alebo on sa pyta nejake otazky konkretne?

revelc

Vysvetlis mu princip na akom funguje ten program a potom ti da 1/2/az n otazok, podla toho ci tomu rozumies alebo nie
Čo môžeš urobiť dnes odlož na pozajtra a ziskaš deň voľna.

"I'm a man of simple tastes. I enjoy dynamite...and gunpowder...and gasoline! "

hardest

ale otazky len z toho kodu mojho, hej ? ... lebo rozumiem tomu mojmu programu ako funguje, chapem princip

revelc

Hej, spyta sa ta, ze preco je tam ta instrukcia, alebo co robi ta instrukcia atd...
Čo môžeš urobiť dnes odlož na pozajtra a ziskaš deň voľna.

"I'm a man of simple tastes. I enjoy dynamite...and gunpowder...and gasoline! "

esperian

A pri Stanislavovi Šubovi to tiez tak prebieha ze sa pyta na instrukcie a tak ??

Rajo

veď si pozri tie vypracovane zadania čo tú sú, maju celkom pekné komenty k inštrukciám čo robia :)

Wolfdale

ale ked netreba tak nebudem predsa stracat cas ASSemblerom :evica:

Ešte sme to nedokončili celkom, ale takmer sme už začali.

bobi_bolivia

#39
Quote from: Picko on  22.03.2011, 03:47:19
ale ked netreba tak nebudem predsa stracat cas ASSemblerom :evica:
Pozeram, ze moja skratka sa ujala velmi rychlo !!!  :emot-LMAO: :emot-LMAO:
Mozem vediet, z ktorej skupiny si ? ;D


Edit: Mam svoje zadanie c. 23... akurat ono to pluva vysledok v 16kovej sustave... ako to prekopat do 10kovej ? Staci len zmazat
ten usek, co to prehadzuje z 10kovej => 16kovej ?

nF

Quote from: esperian on  22.03.2011, 03:21:47
A pri Stanislavovi Šubovi to tiez tak prebieha ze sa pyta na instrukcie a tak ??

on sa nic nepyta lebo vie ze to mate vsetci kupene :D

Wolfdale

Quote from: nF on  22.03.2011, 04:01:51
Quote from: esperian on  22.03.2011, 03:21:47
A pri Stanislavovi Šubovi to tiez tak prebieha ze sa pyta na instrukcie a tak ??

on sa nic nepyta lebo vie ze to mate vsetci kupene :D

Inf 2

Ešte sme to nedokončili celkom, ale takmer sme už začali.

Raleon

Quote from: bEnd3r on  21.03.2011, 00:31:21
ako zistim ci su registre d,e rovnake?
porovnavat vies len s registrom A, cize:

mov a, d
cmp e
jz navestie   ; skoci na navestie, ak su rovnake 
...             ; ak nerovnake, tak program pokracuje tu...


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

ppeess

Quote from: esperian on  22.03.2011, 03:21:47
A pri Stanislavovi Šubovi to tiez tak prebieha ze sa pyta na instrukcie a tak ??

Suba bude rad ak to budes vediet vobec sputit  bu ........ ale niekedy vie byt zly  :banana_guitar:

jardo

Načítajte zo súboru reťazec znakov ukončený znakom "konca riadku". Nech
slovo je postupnosť znakov medzi dvoma znakmi "medzera". Určte slovo s najväčším
počtom samohlások a tento počet vypíšte šestnastkovo.

kto che tott zadanie nech sa ozve

bobi_bolivia

Cipana, dobra dusa, ktora mi za pivo (2, 3 mozno...) pomoze s tymto ?

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,5       ;pocet malych pismen
mvi e,0         ;pocet cislic
push psw      ;vlozime si nulu do zasobnika, pocet vyhovujucich slov
jmp char_loop

char:
mvi d,5         ;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     
inr e         ;zvysenie poctu cislic 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
jnc 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
jnc 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 dlhsich ako 5 znakov',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


Cely problem mam len v tom, ze to prevadza vysledok do 16kovej sustavy, a ja potrebujem do 10kovej sustavy vysledok  ???
Fakt vas prosim...

hardest

s Jakubcom sme na cviku robili prevod do desiatkovej:

dcx sp

mvi a,82 ;52 v BCD
mov e,a ;e ->zaloha

mvi a,0

mvi c,52
loop:
inr a
daa
dcr c
jnz loop

rrc
rrc
rrc
rrc

call prevod_10
mov a,e
call prevod_10
hlt

prevod_10: ;procedura
ani 0Fh
adi '0'
call putchar
ret

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'


skus si to tam vlozit miesto tvojho 16-koveho prevodu a kus poupravit

zaky

vies to aj blizsie vysvetlit? nerozumiem hlavne tej instrukcie ANI, co to presne robi, pripadne ak niekto vie hocaky prevod vysvetlit lepsie, si to analogicky uz aplikujem na svoje zadanie, dikes

92% teenagerů neposlouchá svojí maminku. Patříš-li mezi zbývajících 8%, dej si tohle do podpisu

hardest

velmi to vysvetlit neviem, ale k tomu ani mam len takyto komentar z cvika: ani 0Fh  ; vynulujeme 4 bity

Lebo je to nejak tak robene, ze napr. pri osmickovej sustave si rozdelime cislo na trojice cisel a vzdy prevadzame len tu trojicu uplne napravo, preto ostatne si nulujeme tou funkciou ani a potom ked sa prevedie ta trojica robi sa rotacia rlc aby sa na tu poziciu prvych troch cislic zprava dostala dalsia trojica cisel, ktora sa prevedie a tak nejak, aspon kd sa dobre pamatam.

bobi_bolivia

Hardest, diki moc... ale velmi si mi nepomohol... v zadani totiz zadavam znaky v 10kovej sustave a vysledok ma byt opät v 10kovej sustave... tudiz mi treba len zbavit sa hexa-prevodnika, alebo pichnut ten tvoj kod (resp. zavolat) po prevode... no nic kaslem na to, zajtra neodovzdam, -1 bod, a odovzdam buduci tyzden :)