[ Príspevkov: 4 ] 
AutorSpráva
Offline

Užívateľ
Užívateľ
Obrázok užívateľa

Registrovaný: 20.03.09
Prihlásený: 01.05.09
Príspevky: 4
Témy: 3 | 3
NapísalOffline : 28.03.2009 10:50 | ASSEMBLER i8080 POMOC

cawte, potreboval by som pomoct s binarnym vypisom programu. Ulohou programu je pocitat slova, ktore obsahuju len velke pismena abecedy a tento pocet ma byt vypisany v dvojkovej sustave. Program, aspon myslim, ze je kompletny (nejako som ho pozliepal), len mam pocit, ze je tam problem s registrami (asi som ich pomiesal), proste ocekujte to pls niekto, diky.

Kód:


org 1000         

dcx sp         ; inicializacia zasobnika (0FFFFh)

lxi h,text1      ; skopiruj text1 do h
call putstr      ; vypis uvodny text

mvi b,0         ; pocitadlo vyhovujucich slov
mvi c,0         ; pocitadlo vyhovujucich znakov v slove
mvi d,0         ; pocitadlo vsetkych znakov v slove


char_loop:
   call getchar   ; nacita sa zadany znak do registra "a"
   cpi 10      ; porovna sa register "a" s backspacom 
   jz char_end   ; skoci sa na char_end, ak sa rovna
   cpi 13      ; porovna sa register "a" s enterom
   jz char_end   ; skoci sa na char_end, ak sa rovna
   cpi 32      ; porovna sa register "a" s medzerou
   jz char_space   ; skoci sa na char_space, ak sa rovna
   cpi 65       ; nacitany znak sa porovna s 'A'
   jz char_add   ; skoci sa na char_add, ak sa rovna
   cpi 66       ; dalej sa nacitavaju a porovnavaju vsetky ASCII     
   jz char_add   ;   kody znakov velkej abecedy, az po 'Z'
   cpi 67           
   jz char_add
   cpi 68    
   jz char_add
   cpi 69    
   jz char_add
   cpi 70    
   jz char_add
   cpi 71    
   jz char_add
   cpi 72    
   jz char_add
   cpi 73    
   jz char_add
   cpi 74    
   jz char_add
   cpi 75    
   jz char_add
   cpi 76    
   jz char_add
   cpi 77    
   jz char_add
   cpi 78    
   jz char_add
   cpi 79    
   jz char_add
   cpi 80    
   jz char_add
   cpi 81    
   jz char_add
   cpi 82    
   jz char_add
   cpi 83    
   jz char_add
   cpi 84    
   jz char_add
   cpi 85    
   jz char_add
   cpi 86    
   jz char_add
   cpi 87    
   jz char_add
   cpi 88    
   jz char_add
   cpi 89    
   jz char_add
   cpi 90      ; nacitany znak sa porovna so 'Z'
   jz char_add   ; skonci sa na char_add, ak sa rovna
   inr d      ; inkrementuje sa pocitadlo vsetkych znakov v slove
   jmp char_loop   ; nacita sa dalsi znak

char_add:
   inr c      ; inkrementuje sa pocitadlo vyhovujucich znakov v slove
   inr d      ; inkrementuje sa pocitadlo vsetkych znakov v slove
   jmp char_loop   ; nacita sa dalsi znak

char_space:
   mov a,d      ; pocitadlo vsetkych znakov v slove sa skopiruje do registra "a"
   cpi 0      ; nebola prvy znak medzera?
   jz char_loop    ; ak ano, nacita sa dalsi znak
   cmp c      ; porovna sa, ci vsetky znaky boli vyhovujuce
   mvi d,0      ; vynuluje sa pocitadlo vsetkych znakov v slove
   mvi c,0      ; vynuluje sa pocitadlo vyhovujucich znakov v slove
   jnz char_loop   ; nacita sa dalsi znak
   inr b      ; inkrementuje sa pocitadlo vyhovujucich slov
   jmp char_loop   ; nacita sa dalsi znak

char_end:
   mov a,d      ; skopiruje sa pocitadlo vsetkych znakov v slove do registra "a"
   cpi 1      ; ak nie su ziadne dalsie znaky,
   jc print      ;    pokracuje sa vo vypise
   cmp c      ; inak sa kontroluje, ci posledne slovo bolo spravne
   jnz print      ; ak nie, pokracuje sa vo vypise
   inr b      ; ak ano, inkrementuje sa pocitadlo vyhovujucich slov

celociselny_zvisok_po_deleni:
sub b            ; odcita b od a
cmp b            ; porovna b s a
jnc celociselny_zvisok_po_deleni   ; ak je a < b skonci
ret            ; vrati sa spet

delenie_celeho_cisla:
mvi h,0;
_delenie:
sub b            ; odcita b od a
inr h            ; zvisi h
cmp b            ; porovna b s a
jnc _delenie         ; ak je a < b skonci
mov a, h            
ret            ; vrati sa spet

binarny_prevod:
mvi a,0            ; do registra a da 0
sta 20            ; zapise obsah registra a do pamete 20
sta 21            ; zapise obsah registra a do pamete 21
sta 22            ; zapise obsah registra a do pamete 22
sta 23            ; zapise obsah registra a do pamete 23
sta 24            ; zapise obsah registra a do pamete 24
sta 25            ; zapise obsah registra a do pamete 25
sta 26            ; zapise obsah registra a do pamete 26
sta 27            ; zapise obsah registra a do pamete 27
sta 28            ; zapise obsah registra a do pamete 28
sta 29            ; zapise obsah registra a do pamete 29

mov a, c            ; do registra a da obsah registra c
sta 20            ; zapise obsah registra a do pamete 20
mvi b,2            ; do registra b da 2

call celociselny_zvisok_po_deleni   ; zavola celociselny_zvisok_po_deleni
sta 22            ; zapise obsah registra a do pamete 22
lda 20            ; obsah pamete 20 da do registra a

call delenie_celeho_cisla      ; zavola delenie_celeho_cisla
sta 21            ; zapise obsah registra a do pamete 21
call celociselny_zvisok_po_deleni   ; zavola celociselny_zvisok_po_deleni
sta 23            ; zapise obsah registra a do pamete 23
lda 21            ; obsah pamete 21 da do registra a
call delenie_celeho_cisla      ; zavola delenie_celeho_cisla
sta 21            ; zapise obsah registra a do pamete 21
call celociselny_zvisok_po_deleni   ; zavola celociselny_zvisok_po_deleni
sta 24            ; zapise obsah registra a do pamete 24
lda 21            ; obsah pamete 21 da do registra a
call delenie_celeho_cisla      ; zavola delenie_celeho_cisla
sta 21            ; zapise obsah registra a do pamete 21
call celociselny_zvisok_po_deleni   ; zavola celociselny_zvisok_po_deleni
sta 25            ; zapise obsah registra a do pamete 25
lda 21            ; obsah pamete 21 da do registra a
call delenie_celeho_cisla      ; zavola delenie_celeho_cisla
sta 21            ; zapise obsah registra a do pamete 21
call celociselny_zvisok_po_deleni   ; zavola celociselny_zvisok_po_deleni
sta 26            ; zapise obsah registra a do pamete 26
lda 21            ; obsah pamete 21 da do registra a
call delenie_celeho_cisla      ; zavola delenie_celeho_cisla
sta 21            ; zapise obsah registra a do pamete 21
call celociselny_zvisok_po_deleni   ; zavola celociselny_zvisok_po_deleni
sta 27            ; zapise obsah registra a do pamete 27
lda 21             ; obsah pamete 21 da do registra a
call delenie_celeho_cisla      ; zavola delenie_celeho_cisla
sta 21            ; zapise obsah registra a do pamete 21
call celociselny_zvisok_po_deleni   ; zavola celociselny_zvisok_po_deleni
sta 28            ; zapise obsah registra a do pamete 28
lda 21            ; obsah pamete 21 da do registra a
call delenie_celeho_cisla      ; zavola delenie_celeho_cisla
sta 21            ; zapise obsah registra a do pamete 21
call celociselny_zvisok_po_deleni   ; zavola celociselny_zvisok_po_deleni
sta 29            ; zapise obsah registra a do pamete 29
lda 29            ; obsah pamete 29 da do registra a

adi 48            ; k obsahu registra a pripocita 48
out 11h            ; vypise obsah registra a na obrazovku
lda 28            ; obsah pamete 28 da do registra a
adi 48            ; k obsahu registra a pripocita 48
out 11h            ; vypise obsah registra a na obrazovku
lda 27            ; obsah pamete 27 da do registra a
adi 48            ; k obsahu registra a pripocita 48
out 11h            ; vypise obsah registra a na obrazovku
lda 26            ; obsah pamete 26 da do registra a
adi 48            ; k obsahu registra a pripocita 48
out 11h            ; vypise obsah registra a na obrazovku
mvi a,' '            ; do registra a da ' '
out 11h            ; vypise obsah registra a na obrazovku
lda 25            ; obsah pamete 25 da do registra a
adi 48            ; k obsahu registra a pripocita 48
out 11h            ; vypise obsah registra a na obrazovku
lda 24            ; obsah pamete 24 da do registra a
adi 48            ; k obsahu registra a pripocita 48
out 11h            ; vypise obsah registra a na obrazovku
lda 23            ; obsah pamete 23 da do registra a
adi 48            ; k obsahu registra a pripocita 48
out 11h            ; vypise obsah registra a na obrazovku
lda 22            ; obsah pamete 22 da do registra a
adi 48            ; k obsahu registra a pripocita 48
out 11h            ; vypise obsah registra a na obrazovku
ret            ; vrati sa spet

print:
   lxi h,text2   ; skopiruje sa text2 do h
   call putstr   ; vypise sa text2
   mov a,b      ; skopiruje sa pocitadlo vyhovujucich slov do registra "a"   
   adi '0'      ; hodnota a jej ASCII tvar ...
   call putchar   ; vypise sa znak
   call newline   ; vypise sa novy riadok
   




hlt      ; ukonci sa program

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

text1: db 'Pocet slov obsahujucich len velke pismena ...',10,13,'Vloz text: ',0
text2: db 10,13,'Slov je: ',0
vlozeny: ds 30


Offline

Užívateľ
Užívateľ
Obrázok užívateľa

Registrovaný: 14.03.09
Prihlásený: 16.10.13
Príspevky: 25
Témy: 10 | 10
NapísalOffline : 28.03.2009 17:58 | ASSEMBLER i8080 POMOC

čo tak v 10 tkovej sústave


Offline

Užívateľ
Užívateľ
Obrázok užívateľa

Registrovaný: 20.03.09
Prihlásený: 01.05.09
Príspevky: 4
Témy: 3 | 3
Napísal autor témyOffline : 28.03.2009 19:24 | ASSEMBLER i8080 POMOC

bbeni píše:
čo tak v 10 tkovej sústave


musi to byt v dvojkovej


Offline

Užívateľ
Užívateľ
Obrázok užívateľa

Registrovaný: 14.03.09
Prihlásený: 16.10.13
Príspevky: 25
Témy: 10 | 10
NapísalOffline : 29.03.2009 13:12 | ASSEMBLER i8080 POMOC

ako by to bolo 10 tkovej sústave


 [ Príspevkov: 4 ] 


ASSEMBLER i8080 POMOC



Podobné témy

 Témy  Odpovede  Zobrazenia  Posledný príspevok 
V tomto fóre nie sú ďalšie neprečítané témy.

Assembler i8080 help

v Assembler, C, C++, Pascal, Java

1

328

24.03.2013 22:07

walther

V tomto fóre nie sú ďalšie neprečítané témy.

Assembler i8080 delenie

v Assembler, C, C++, Pascal, Java

1

477

12.04.2010 21:20

dEVIANT

V tomto fóre nie sú ďalšie neprečítané témy.

assembler i8080 - jedna mala chyba, pls help

v Assembler, C, C++, Pascal, Java

10

977

21.04.2010 17:20

JR55

V tomto fóre nie sú ďalšie neprečítané témy.

ASSEMBLER POMOC(URGENTNE)

v Assembler, C, C++, Pascal, Java

0

445

13.04.2015 19:22

Matadot

V tomto fóre nie sú ďalšie neprečítané témy.

Assembler uloha - prosim pomoc

v Assembler, C, C++, Pascal, Java

2

879

28.05.2008 15:25

HT

V tomto fóre nie sú ďalšie neprečítané témy.

Assembler HDD info - pomoc

v Assembler, C, C++, Pascal, Java

3

968

07.12.2007 11:17

sento

V tomto fóre nie sú ďalšie neprečítané témy.

assembler pomoc s prevodom

v Assembler, C, C++, Pascal, Java

2

740

27.03.2010 19:10

blw90

V tomto fóre nie sú ďalšie neprečítané témy.

assembler uloha pomoc s prevodom...

v Assembler, C, C++, Pascal, Java

1

637

28.03.2009 17:39

bbeni

V tomto fóre nie sú ďalšie neprečítané témy.

i8080 pretečenie akumulátora - problém

v Assembler, C, C++, Pascal, Java

0

277

12.04.2013 2:23

AM-JP

V tomto fóre nie sú ďalšie neprečítané témy.

Asm i8080: vypisat pocet slov s dlzkou 2 az 5 znakov

v Assembler, C, C++, Pascal, Java

26

4050

15.03.2011 13:47

katiMIR

V tomto fóre nie sú ďalšie neprečítané témy.

assembler

v Assembler, C, C++, Pascal, Java

1

1538

10.11.2006 18:14

Marco

V tomto fóre nie sú ďalšie neprečítané témy.

Assembler

v Assembler, C, C++, Pascal, Java

0

748

01.04.2009 21:02

bbeni

V tomto fóre nie sú ďalšie neprečítané témy.

Assembler

v Assembler, C, C++, Pascal, Java

0

829

31.03.2009 20:10

bbeni

V tomto fóre nie sú ďalšie neprečítané témy.

ASSEMBLER

v Assembler, C, C++, Pascal, Java

8

1789

13.03.2007 20:39

My-reC

V tomto fóre nie sú ďalšie neprečítané témy.

Assembler 8086

v Assembler, C, C++, Pascal, Java

2

656

27.03.2009 20:33

Ivan11114

V tomto fóre nie sú ďalšie neprečítané témy.

aky assembler?

v Assembler, C, C++, Pascal, Java

4

786

21.11.2007 9:49

euthanan



© 2005 - 2025 PCforum, edited by JanoF