[ Príspevok: 1 ] 
AutorSpráva
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 : 31.03.2009 20:10 | Assembler

skontrolujte prosím nasledujúci program,
je tam nejaká chyba s prevodom do 2 sústavy , keďže vypisuje v 10 tkovej
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 43       ; nacitany znak sa porovna s '+'
   jz char_add   ; skoci sa na char_add, ak sa rovna
   cpi 42       ;  nacitany znak sa porovna s '*' 
   jz char_add   ;   skoci sa na char_add, ak sa rovna
   cpi 47         ;  nacitany znak sa porovna s '/'
   jz char_add;skoci sa na char_add, ak sa rovna
   cpi 45    ; nacitany znak sa porovna s '-'
   jz char_add;skoci 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 neobsahujucich aritmeticke operatory ...',10,13,'Vloz text: ',0
text2: db 10,13,'Slov je: ',0
vlozeny: ds 30


 [ Príspevok: 1 ] 


Assembler



Podobné témy

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

ASSEMBLER

v Backend

8

1870

13.03.2007 20:39

My-reC

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

Assembler

v Backend

0

792

01.04.2009 21:02

bbeni

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

assembler

v Backend

1

1589

10.11.2006 18:14

Marco

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

Assembler 8086

v Backend

11

1429

19.05.2010 22:38

JR55

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

Assembler 8086

v Backend

3

686

21.04.2009 20:05

Fico

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

Assembler - úloha

v Backend

2

994

22.10.2007 15:04

programator

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

Assembler 8086

v Backend

2

701

27.03.2009 20:33

Ivan11114

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

Assembler 8080

v Backend

5

1415

02.04.2010 20:44

Fico

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

Assembler binary

v Backend

23

1343

18.04.2012 7:17

Fico

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

Assembler Atmega8

v Backend

5

1265

17.10.2009 17:13

Logik

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

assembler zaciatky

v Backend

5

1069

03.09.2010 15:14

Fico

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

aky assembler?

v Backend

4

831

21.11.2007 9:49

euthanan

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

Kniha : Assembler

v Backend

1

617

16.04.2013 22:34

XOLOO

Táto téma je zamknutá, nemôžete posielať nové príspevky alebo odpovedať na staršie.

assembler zadanie

v Backend

1

1095

09.03.2010 20:27

ac.milan

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

Assembler úloha

v Backend

0

874

02.02.2008 7:37

HT

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

zacat assembler

v Backend

15

1234

16.12.2011 23:24

Ďuri



© 2005 - 2026 PCforum, edited by JanoF