Assembler 8086

Programovacie jazyky, rady, poradňa...
Jerrynko
Amateur
Amateur
Používateľov profilový obrázok
Príspevky: 14
Registrovaný: 13 dec 2008, 13:09
Bydlisko: Michalovce
Kontaktovať používateľa:

Assembler 8086

Príspevok od používateľa Jerrynko »

Ahojte.... Potreboval by som pomoct s touto ulohou......ak sa to da... v assembleri 8086 potrebujem urobit program:

Načítajte z klávesnice číslo 1-9. Iný vstup je neplatný, číslo sa zadáva znova. Na Obrazovke vytlačte pyramídu so základňou, ktorej šírka je rovná načítanej hodnote, na vykreslenie použite znak *.
vvTF
Expert
Expert
Používateľov profilový obrázok
Príspevky: 151
Registrovaný: 27 apr 2006, 21:39

Príspevok od používateľa vvTF »

Minuly semester by som ti to mozno aj napisal , no teraz si to moc uz nepamatam , ale mozem ti odporucit knihu:
Marek, R.: Assembler pro PC - učíme se programovat v jazyce, Computer Press, 2003, ISBN 80-7226-843-0
inflater
Medium Star
Medium Star
Používateľov profilový obrázok
Príspevky: 470
Registrovaný: 28 mar 2007, 20:55
Bydlisko: Púchov, Slovakia

Príspevok od používateľa inflater »

Jo to som ten algoritmus poriesil ja blb. :D Tu mas uz funkcnu verziu, otestovanu - fasm kompiluje. Pri TASM budes muset zmenit par opkodov (asi popridavat "offset" a ak nechces vytvarat EXE a segmenty data, zlinkuj to tlink /t)

Kód: Vybrať všetko

org 100h
jmp start

sprava1 db 'Zadaj cislo od 1 do 9:$'
crlf db 13,10,'$'

start:
mov ax,cs    ;datovy segment = segment kodu
mov ds,ax
mov es,ax

mov ax,03   ;nastav 80x25
int 10h

mov ah,9
mov dx,sprava1 ;(alebo "mov dx,offset sprava1" pre TASM)
int 21h

rpt:
xor ax,ax
int 16h

cmp ah,2   ;citanie alfanumerickej casti - klavesy pod escape, 1, 2, 3
jb rpt
cmp ah,0Ah   ;citanie scan kodu az po 9
ja rpt

mov al,0 ;kasli na ascii kod

pusha
mov ah,9
mov dx,crlf ;novy riadek
int 21h
popa

dec ah    ;1-9
xor al,al
mov cl,ah
xor ch,ch ;cx = od 1 do 9
mov ax,1 ;vycisti registre :D

kresli:
push ax
push cx
mov cx,ax
mov ah,0Ah
mov al,'*'
int 10h
pop cx
pop ax
cmp ax,cx
je konec
pusha
mov ah,09h
mov dx,crlf
int 21h
popa
inc ax
jmp kresli

konec:
;;;konec. cakaj na lubovolnu klavesu a ukonci
mov ah,09h
mov dx,crlf
int 21h
xor ax,ax
int 16h
int 20h ;konec v DOS COM, v exe daj mov ah, 4Ch int 21h
Ako som uz spomenul, ocenil by som mensi financny prispevok na paypal... dneska uz assembleristov nenajdete :D
boy157
Medium Expert
Medium Expert
Príspevky: 110
Registrovaný: 11 dec 2008, 20:55
Bydlisko: Chrast nad Hornadom

Príspevok od používateľa boy157 »

mal by som prosbu ci by niekto nevedel urobit toto : Zostavte program ktory urci median z troch zadanich cisel a zisti ci je mensi vacsi alebo rovni ako ich aritmeticky priemer.

DIKY MOC
inflater
Medium Star
Medium Star
Používateľov profilový obrázok
Príspevky: 470
Registrovaný: 28 mar 2007, 20:55
Bydlisko: Púchov, Slovakia

Príspevok od používateľa inflater »

median? co to? :lol:

to mas spravit tez v asm? no to snad ne... este kodit funkciu co skonvertuje retazec na cislo, no panboh zaplat v asembleri
boy157
Medium Expert
Medium Expert
Príspevky: 110
Registrovaný: 11 dec 2008, 20:55
Bydlisko: Chrast nad Hornadom

Príspevok od používateľa boy157 »

no ako median neje retazec to je proste stredne cislo z tych troch. napr mas cisla 86 45 35 tak median je 45. cize robi sa to len s cislami.
inflater
Medium Star
Medium Star
Používateľov profilový obrázok
Príspevky: 470
Registrovaný: 28 mar 2007, 20:55
Bydlisko: Púchov, Slovakia

Príspevok od používateľa inflater »

A musis to mat v ASM? No to bude lajstro kodu prisam vacku, ale nakodit to nakodim ak bude cas. Nieco ako pascal by neslo?

BTW ten co ti tu ulohu zadaval aby si to musel prepisat do strojoveho kodu musel byt mechom udrety. Taketo svinstva sa nerobia. ;)
boy157
Medium Expert
Medium Expert
Príspevky: 110
Registrovaný: 11 dec 2008, 20:55
Bydlisko: Chrast nad Hornadom

Príspevok od používateľa boy157 »

no asi hej...ten profak je blb....a musi to byt v asm...ta ked budes mat cas a zrobis to fakt klobuk dolu pred tebou...diky moc...pomozes velmi

//autoeditácia príspevku ( 27 Apr 2009, 21:34 )
no asi hej...ten profak je blb....a musi to byt v asm...ta ked budes mat cas a zrobis to fakt klobuk dolu pred tebou...diky moc...pomozes velmi
inflater
Medium Star
Medium Star
Používateľov profilový obrázok
Príspevky: 470
Registrovaný: 28 mar 2007, 20:55
Bydlisko: Púchov, Slovakia

Príspevok od používateľa inflater »

Jo zajtra to budes mat pravdepodobne hotove, dneska mam toho moc na praci, sak viete, pisomkove obdobie. A jeho obesit za gule do prievanu :D
Joey_XD
Novice
Novice
Príspevky: 5
Registrovaný: 29 apr 2009, 15:15

ASM86

Príspevok od používateľa Joey_XD »

Zdravim.... Hladam dobru dusu, ktorá vie programovat v assembleri86. Ak sa taka najde, by som ju poprosil o spravenie tohto programu :Z klávesnice načítajte vstupný retazec ukončený znakom konca riadku a rozhodnite, ci patri do jazyka L={xxR |x€{a,b,c}+}. prosim ozvite sa niekto.
piton
King
King
Používateľov profilový obrázok
Príspevky: 1902
Registrovaný: 02 aug 2005, 0:31
Bydlisko: Hnojisko

Príspevok od používateľa piton »

boy157 napísal:no asi hej...ten profak je blb....a musi to byt v asm...ta ked budes mat cas a zrobis to fakt klobuk dolu pred tebou...diky moc...pomozes velmi

//autoeditácia príspevku ( 27 Apr 2009, 21:34 )
no asi hej...ten profak je blb....a musi to byt v asm...ta ked budes mat cas a zrobis to fakt klobuk dolu pred tebou...diky moc...pomozes velmi
Simonak urcite "blb" nieje :) A zadania su aj horsie ako to s tym medianom... By som povedal, ze aj dost jednoduche je

btw dajak vela prvakov z tuke tu je, ci tie zadania davate na kazde forum na ktore natrafite?
inflater
Medium Star
Medium Star
Používateľov profilový obrázok
Príspevky: 470
Registrovaný: 28 mar 2007, 20:55
Bydlisko: Púchov, Slovakia

Príspevok od používateľa inflater »

Jo, profak vysokej skoly - som si myslel ze vam to dal niekto vysinuty na strednej. :lol: Hja vela stastia, tu ti davam onen krkolomny kod a prikladam aj funkcnu dos-com, len mu nevrav ze ti to 16rocny nakodil, by bola hanba co? ;) Tak snad to pojde, funkcne pod FASM. Zadavaj cisla ktorych sucet spolu je mensi ako 65535. A az tie rozdiely medzi suctom cisla 1 + cisla 2, a cisla 2 + cisla 3 nie su moc velke, inac to rapluje.Ale algoritmus si isto poriesis sam ak by ti nevyhovel.

Pre TASM budes muset zmenit dobrych par riadkov a ak sa nechces srat so segmentami, tlinkuj s parametrom /t aby to vyplulo binarku a nie tu mz ohavu. Cize nieco ako "tlink /t lol.com", nevim - TASM nepouzivam bo je to predpotopny sragor N-teho rangu na stvrtu.

Kód: Vybrať všetko

;Mediany
;(c) 2009 by inflater

org 100h
use16
jmp start

nazdar	db 'Vypocet medianov, (c) 2009 Inflater (http://inflater.wz.cz)$'
hlaska1 db 13,10,'Zadaj 1. cislo: $'
hlaska2 db 13,10,'Zadaj 2. cislo: $'
hlaska3 db 13,10,'Zadaj 3. cislo: $'
chyba	db 13,10,13,10,'Chyba, dve alebo tri cisla su zhodne.$'
mdi1	db 13,10,13,10,'Median je cislo 1.$'
mdi2	db 13,10,13,10,'Median je cislo 2.$'
mdi3	db 13,10,13,10,'Median je cislo 3.$'
klavesa	db 13,10,'Stlac lubovolnu klavesu...$'
crlf 	db 13,10,'$'

cislo1	dw 0
cislo2	dw 0
cislo3	dw 0
temp	dw 0

bafer1: times 8 db 0
bafer2: times 5 db 0

start:
push cs		;ak kompilujes do exe tak dufam ze vies co mas spravit s tymto tu ;-)
pop ds		;teda ak texty nestrcis do ineho segmentu
push ds
pop es

mov ax,03	;80x25
int 10h

;chu****

mov ah,09
mov dx,nazdar
int 21h
mov ah,9
mov dx,hlaska1
int 21h
call Parsuj
mov ax,[temp]
mov [cislo1],ax
mov ah,09h
mov dx,hlaska2
int 21h
call Parsuj
mov ax,[temp]
mov [cislo2],ax
mov ah,09h
mov dx,hlaska3
int 21h
call Parsuj
mov ax,[temp]
mov [cislo3],ax

mov ax,[cislo1]
cmp [cislo2],ax
je konec
mov ax,[cislo3]
cmp [cislo2],ax
je konec
cmp [cislo1],ax
je konec

;rataj

mov ax,[cislo1]
add ax,[cislo2]
mov bx,[cislo2]
add bx,[cislo3]

cmp ax,bx
jae prve_vacsie
jbe druhe_vacsie

prve_vacsie:
mov ax,[cislo1]
cmp ax,[cislo2]
jb med1
jmp med2

druhe_vacsie:
mov ax,[cislo2]
cmp ax,[cislo3]
jb med2
jmp med3

med1:
mov ah,09h
mov dx,mdi1
int 21h
jmp @f

med2:
mov ah,09h
mov dx,mdi2
int 21h
jmp @f

med3:
mov ah,09h
mov dx,mdi3
int 21h
jmp @f

konec:
mov ah,09h
mov dx,chyba
int 21h
@@:
mov ah,9
mov dx,klavesa
int 21h

xor ax,ax
int 16h

mov ah,9
mov dx,crlf
int 21h

mov ah,4Ch
int 21h

Parsuj:
mov al,6
mov di,bafer1
stosb

mov ah,0Ah
mov dx,bafer1		;tuna je CS = DS (adresa ds:dx). pri exe toto uprav
int 21h			;citaj 5 znakov

mov si,bafer1		;buffer z klavesnice
add si,2		;preskoc dva bajty MAX a LEN
mov cx,5		;5 razz
mov di,bafer2		;presun cislo
rep movsb

push bx
push cx

xor ax,ax
mov bx,bafer2

LoopStringToHex:
cmp byte[bx],'0'
jb EndLoopStringToHex
cmp byte[bx],'9'
ja EndLoopStringToHex

mov cx,ax
shl ax,3
add ax,cx
add ax,cx
movzx cx,byte[bx]
sub cl,'0'
add ax,cx
add bx,1
jmp LoopStringToHex

EndLoopStringToHex:

pop cx
pop bx
mov [temp],ax
ret
Jo a ked tak kukam na ostatne assembler temy tuna v sekcii Programovanie, dufam ze si nepleties assembler z rady 8080 (kompatibilita na urovni PMD-85, komunistickych "CPU" MHB8080, Z80 a inych chutoviek), a 8086, cize zaklad architektury na ktorom bezi tvoje PC (teda ak nepouzivas macintosh alebo nebodaj Amiga, ARM atd.), pretoze do masinoveho kodu 8080 sa nerozumiem (naco?).
Prílohy
median.zip
(508 Bajtov) 40 stiahnutí
piton
King
King
Používateľov profilový obrázok
Príspevky: 1902
Registrovaný: 02 aug 2005, 0:31
Bydlisko: Hnojisko

Príspevok od používateľa piton »

Nepletie si, lebo mali zadanie aj z 80 aj z 86....

// a btw, na inom fore taketo zadania bezia za cca 15 ojro ;-)
boy157
Medium Expert
Medium Expert
Príspevky: 110
Registrovaný: 11 dec 2008, 20:55
Bydlisko: Chrast nad Hornadom

Príspevok od používateľa boy157 »

diky fest .....pomohol si velmi
Joey_XD
Novice
Novice
Príspevky: 5
Registrovaný: 29 apr 2009, 15:15

ASM86

Príspevok od používateľa Joey_XD »

Sewas inflater... Nevedel by si mi prosimta spravit programik? Z klávesnice načítajte vstupný retazec ukončený znakom konca riadku a rozhodnite, ci patri do jazyka L={xxR |x€{a,b,c}+}.

//autoeditácia príspevku ( 02 May 2009, 0:01 )
Sewas inflater... Nevedel by si mi prosimta spravit programik? Z klávesnice načítajte vstupný retazec ukončený znakom konca riadku a rozhodnite, ci patri do jazyka L={xxR |x€{a,b,c}+}.
mikehudak
Amateur
Amateur
Príspevky: 30
Registrovaný: 22 mar 2009, 17:15
Kontaktovať používateľa:

zadanie

Príspevok od používateľa mikehudak »

to simonak je super clovek
:wink:
stanulik
Light Professional
Light Professional
Používateľov profilový obrázok
Príspevky: 729
Registrovaný: 20 okt 2007, 20:57

Príspevok od používateľa stanulik »

ponukam 7-10€ niekomu kto mi naprogramuje toto:

Nacitajte z klavesnice retazec znakov ukoncenych znakom konca riadku. Slova vo vstupe su oddelene najmenej jednym znakom medzera.Uvazujte aj prve, resp. posledne slovo vstupu. Urcte pocet slov obsahujucich vsetky znaky 1. slova. Pocet vytlacte desiatkovo.

je potrebna kompilacia v NASM.
platforma i8086

peniaze poslem prevodom na ucet, po skontrolovani zadania, ci je to naozaj to co to ma byt. ak to bude hned v ten den peniaze posielam.
tak ozvite sa cez SS :) kto ma zaujem si privyrobit trochu.
piton
King
King
Používateľov profilový obrázok
Príspevky: 1902
Registrovaný: 02 aug 2005, 0:31
Bydlisko: Hnojisko

Re: ASM86

Príspevok od používateľa piton »

Joey_XD napísal:Sewas inflater... Nevedel by si mi prosimta spravit programik? Z klávesnice načítajte vstupný retazec ukončený znakom konca riadku a rozhodnite, ci patri do jazyka L={xxR |x€{a,b,c}+}.

//autoeditácia príspevku ( 02 May 2009, 0:01 )
Sewas inflater... Nevedel by si mi prosimta spravit programik? Z klávesnice načítajte vstupný retazec ukončený znakom konca riadku a rozhodnite, ci patri do jazyka L={xxR |x€{a,b,c}+}.
Myslis, ze stredoskolak bude vediet co znamena jazyk L={xxR |x€{a,b,c}+}? :D
inflater
Medium Star
Medium Star
Používateľov profilový obrázok
Príspevky: 470
Registrovaný: 28 mar 2007, 20:55
Bydlisko: Púchov, Slovakia

Príspevok od používateľa inflater »

stanulik: mas PM.

A fakt, nemam potuchy co to pre boha za vzorec je, a ani radsej nechcem vediet. ;)
buddy
Light Expert
Light Expert
Príspevky: 42
Registrovaný: 16 jan 2008, 19:04
Kontaktovať používateľa:

Príspevok od používateľa buddy »

pozeram, že je tu toho už vela, no niektore zadania vyzeraju fakt hrozne,ja som tiež jeden z tych, ktorý maju s assemblerom 8086 problem, ale tak dostal som dosť lahke zadanie, no časovo to akosi nestiham, keby sa fakt niekto dobry našiel, a pomohol by mi určite by som mu bol velmi vdačný

ak by sa naozaj niekto podujal, tu vam dam aj zadanie

Načitajte z klávesnice reťazec znakov ukončených znakom konca riadku. Slová vo vstupe sú oddelené najmenej jedným znakom medzera. Uvažujte aj prve, resp. posledné slovo vstupu.
Vytlačte zadané slová v opačnom poradí

Fakt by ste mi s tym pomohli
Napísať odpoveď