Pocitanie slov – Assembler – Fórum – Programujte.com
 x   TIP: Přetáhni ikonu na hlavní panel pro připnutí webu
Reklama
Reklama

Pocitanie slov – Assembler – Fórum – Programujte.comPocitanie slov – Assembler – Fórum – Programujte.com

 

Hledá se programátor! Plat 1 800 € + bonusy (firma Boxmol.com)
myth
~ Anonymní uživatel
55 příspěvků
26. 1. 2007   #1
-
0
-

Napisal som program v Assemblery (pouzity MAMS). Ide o program ktory pocita slova okrem slova DOS, ale co sa mi absolutne nezda je rychlost, je to spomalene, myslim ze tymi nekonecnymi porovnavaniami. tu si ho mozte stiahnut saved.athost.net/p1 len pridajde koncovku exe.
kod:
.model small
.stack 100h
.data
zadaj_retazec db "Zadaj retazec: $"
koniec db "Koniec programu$",13,10
.code
;--------new line
proc new_line
mov ah,02h
mov dl,10d
int 21h
mov dl,13d
int 21h
ret
endp
;--------GET CHAR
proc get_char
mov ah,01h
int 21h
ret
endp get_char
;--------PUT_CHAR
proc put_char
mov ah,02h
int 21h
ret
endp
;--------PUT STRING
proc put_string
mov ah,09h
int 21h
ret
endp
start:
mov ax,@data
mov ds,ax
mov dx,offset zadaj_retazec ; Ulozime offset premennej
call put_string ; Vyvolame proceduru vytlacenia
mov cl,00 ; vynulovanie pocitadla slov
mov ch,00h ;priznak
; 01 - D medzera: 32
; 02 - O enter: 13
; 03 - S
; 04 - predchadzajuci znak 'medzera'
; 05 - predchadzajuci znak 'znak'
; zaciatok citania znakov
call get_char ; nacitame prvy znak
cmp al,32 ; ak je medzera ' '
jne prvy
mov ch,04h ;ulozime 04 = ' '
jmp prvy
citanie: ; citanie znakov
call get_char ; vstup znaku
prvy: ; navestie pre skok prvy znak
cmp al,32 ; ak je ' '
je medzera
cmp al,13 ; ak je <enter> - koniec programu
je finish
cmp al,'D' ; pociatok hladaneho slova
je z1
cmp ch,01h ; ak mame 'D'
je z2
cmp ch,02h ; ak mame 'O'
je z3
mov ch,05h ; nastavime 05, pretoze bol zadany iny znak
jmp citanie ; pokracujeme v nacitavani znakov
z1: ; ak je zadany znak 'D'
cmp ch,05h ; ak bol predchadzajuci znak znak
je citanie ; pokracuje v nacitavani
cmp ch,03h ; ak bol predchadzajuci znak 'S'
je mame_S
mov ch,01h ; znak D bol zadany
jmp citanie ; pokracuje v nacitavani
mame_S:
mov ch,05h ; nastavime 05, pretoze prechadzajuci znak je 'S'
jmp citanie
z2:
cmp al,'O' ; druhy zadany znak '0'
jne nerovna
mov ch,02h ; mame aj druhy znak
jmp citanie
nerovna:
mov ch,05h ; ak sa nerovna nastavime 05
jmp citanie
z3:
cmp al,'S' ; posledny zadany znak 'S'
jne nerovna2
mov ch,03h ; zapiseme, mame slovo
jmp citanie
nerovna2:
mov ch,05h ; priznak znak
jmp citanie
medzera: ; ak mame medzeru
cmp ch,04h ; predposledny znak ' '
je citanie
cmp ch,05h ; preposledny znak 'x' znak
je plus ; ak ano pocitame slovo
cmp ch,03h ; ak nacitany znak je 'S'
je mame_slovo
plus:
inc cl ; mame jedno slovo
mov ch,04h ; nastavime medzeru
jmp citanie
mame_slovo:
mov ch,04h ; nastavime medzeru
jmp citanie
; KONIEC NACITAVANIA (vstup <enter>)
finish:
cmp ch,00h ; ak ziadny vstup
je nemame_slovo
cmp ch,03h ; ak 'S'
jne ziadne_S ; ak nie je 'S'
mov ch,05h ; nemame slovo
jmp nemame_slovo
ziadne_S: ; mame znak
cmp ch,04h ; ak mame ' '
je nemame_slovo:
inc cl ; pripocitame slovo
mov ch,05h ; nastavime nulu
nemame_slovo:
call new_line
; KONIEC PROGRAMU
call new_line
mov ch,100
convert: ; cislo prevedieme do desiatkovej sustavy
mov ah,00h
mov al,cl
div ch
mov cl,ah
mov dl,al
add dl,"0"
call put_char
cmp ch,1
je end_of_write
mov ah,0h
mov al,ch
mov dl,10
div dl
mov ch,al
jmp convert
end_of_write:
call new_line
; oznam o skonceni programu zapricineny <enter>
mov dx,offset koniec
call put_string
; cakanie na <enter>
mov ah,00h
int 16h
; odosle signal OS o skonceni programu
mov ax, 4c00h
int 21h
end start

Nahlásit jako SPAM
IP: ...–
Reklama
Reklama
bbeni0
Návštěvník
28. 3. 2009   #2
-
0
-

čo tak v 8080
počítaj počet znakov neobsahujúcich aritmetické operátory(+,/,-,krat)

Nahlásit jako SPAM
IP: 85.248.5.–
bbeni0
Návštěvník
28. 3. 2009   #3
-
0
-

pardon počet slov

Nahlásit jako SPAM
IP: 85.248.5.–
chaser0
Newbie
29. 3. 2009   #4
-
0
-

lebo i8080 sa prakticky nepouziva a nikomu sa s tym uz nechce rypat kedze to nema nijaky efektivnejsi vyznam, to ako keby si pisal hru ktoru utiahne maximalne taka 286-tka

Nahlásit jako SPAM
IP: 91.127.3.–
Zjistit počet nových příspěvků

Přidej příspěvek

Toto téma je starší jak čtvrt roku – přidej svůj příspěvek jen tehdy, máš-li k tématu opravdu co říct!

Ano, opravdu chci reagovat → zobrazí formulář pro přidání příspěvku

×Vložení zdrojáku

×Vložení obrázku

Vložit URL obrázku Vybrat obrázek na disku
Vlož URL adresu obrázku:
Klikni a vyber obrázek z počítače:

×Vložení videa

Aktuálně jsou podporována videa ze serverů YouTube, Vimeo a Dailymotion.
×
 
Podporujeme Gravatara.
Zadej URL adresu Avatara (40 x 40 px) nebo emailovou adresu pro použití Gravatara.
Email nikam neukládáme, po získání Gravatara je zahozen.
-
Pravidla pro psaní příspěvků, používej diakritiku. ENTER pro nový odstavec, SHIFT + ENTER pro nový řádek.
Sledovat nové příspěvky (pouze pro přihlášené)
Sleduj vlákno a v případě přidání nového příspěvku o tom budeš vědět mezi prvními.
Reaguješ na příspěvek:

Uživatelé prohlížející si toto vlákno

Uživatelé on-line: 0 registrovaných, 200 hostů

 

Hostujeme u Českého hostingu       ISSN 1801-1586       ⇡ Nahoru Webtea.cz logo © 20032016 Programujte.com
Zasadilo a pěstuje Webtea.cz, šéfredaktor Lukáš Churý