Builder.cz - Informacni server o programovani

Odběr fotomagazínu

Fotografický magazín "iZIN IDIF" každý týden ve Vašem e-mailu.
Co nového ve světě fotografie!

 

Zadejte Vaši e-mailovou adresu:

Kamarád fotí rád?

Přihlas ho k odběru fotomagazínu!

 

Zadejte e-mailovou adresu kamaráda:



vypise poradove cislo prvej cislice

Seznam témat     Nová odpověď

Přihlásit se     Registrace     Zapomenuté heslo

Re: vypise poradove cislo prvej cislice

Autor: Luboš

22:59:19 26.05.2008

Měl jsem špatnej den. Za to CX se omlouvám. Máte to samozřejmě dobře.
Dnes to zas skřípe u mně :-)

Citovat příspěvek

 

Re: vypise poradove cislo prvej cislice

Autor: Luboš

22:46:44 26.05.2008

...akurat nechapem odkil bere ciso 178 ked nezadam ziadne znaky a stlacim enter...

V programu vám chybí test nulové délky vstupního řetězce. V aplikaci načtete počet znaků vstupního řetězce do registru cl. To je první chyba ! Instrukce Loop pracuje s registrem cx !!!
Potom začnete ve smyčce testovat vstupní znaky. Ale při nulové délce vstupního řetězce vlastně není co testovat !
Takže po instrukcích:
...
MOV AH,0AH
MOV DX,OFFSET VSTUP
INT 21H
xor ax,ax ; nulovanie ax
xor cx,cx ; nulovanie pocitadla
mov cx,P ; TADY MUSÍ BÝT CX
;by mělo následovat
or cx, cx
jz není_žádný_znak

Jak jde vidět, snaha u vás je. Ještě to trošku skřípe, ale to se určitě zlepší :-)

Citovat příspěvek

 

Re: vypise poradove cislo prvej cislice

Autor: stano11

17:43:08 26.05.2008

tak a program je hotový

akurat nechapem odkil bere ciso 178 ked nezadam ziadne znaky a stlacim enter
**************************************************************************

DATA SEGMENT

VSTUP DB 90
P DB 0
R DB 90 DUP (?)
NIEJE DB 'Nie je tam cislica ',13,10,'$'
POZICIA DB 'Cislica je na pozicii: ','$'
UVOD DB 'Zadajte retazec znakov: ',10,13,'$'
POZ DB 0

DATA ENDS

CODE SEGMENT

ASSUME DS:DATA, CS:CODE

binascii proc near
push cx ;uchovaj momentalny obsah cx,pretoze budeme
;pouzivat register cx
push dx
push bx
xor cx,cx ;vycisti cx
mov dx,si ;uloz cislo do dx
s100: cmp dx,100 ;je cislo >= 100?
jb s10 ;nie, chod spracovat desiatky
sub dx,100
inc ch ;ch = pocet stoviek
jmp s100
s10: cmp dx,10 ;je cislo >= 10?
jb s1 ;nie, chod spracovat jednotky
sub dx,10
inc cl ;cl = pocet desiatok
jmp s10
s1: mov bl,dl ;bl = pocet jednotiek
add bl,30h ;uprav cislicu na jeden znak '0'..'9'
add cl,30h
add ch,30h
cmp ch,30h ;je v rade stoviek nula?
jz dalej1 ;ak ano,chod na test nuly v rade desiatok
mov dl,ch
call vypznak ;vypis nenulovu cislicu v rade stoviek
dalej1: cmp cl,30h ;je v rade desiatok nula?
jz dalej2 ;ak ano,ostava vypisat cislicu z radu jednotiek
mov dl,cl
call vypznak ;vypis nenulovu cislicu v rade desiatok
dalej2: mov dl,bl
call vypznak ;vypis cislicu v rade jednotiek
pop bx
pop dx
pop cx ;obnov povodny obsah cx
ret
binascii endp

vypznak proc
mov ah,2
int 21h
ret
vypznak endp

vyp MACRO S ;definicia makra
MOV Ah,9; na zobrazovanie
MOV DX, OFFSET S; textovych retazcov
INT 21H; z premennych
ENDM

START:

MOV AX,SEG DATA
MOV DS,AX
vyp UVOD

MOV AH,0AH
MOV DX,OFFSET VSTUP
INT 21H
xor ax,ax ; nulovanie ax
xor cx,cx ; nulovanie pocitadla
mov cl,P
xor si,si

znova: mov al, R[si] ; uloz znak do al
cmp al, 30h ; je to 0=30h
jb dalej ; znak nebude 0,v ascii tabulke je pod znakom '0'
cmp al, 39h ; je to 9
ja dalej ; znak nebude 9, v ascii tabulke je nad znakom '9'
jmp v
dalej:inc si ; priprav dalsi znak
loop znova ; opakuj prehladavanie retazca

;vypis neni
vyp NIEJE
jmp KONIEC


v: inc si
;vypis texxtu
vyp POZICIA
call binascii


KONIEC: MOV AH,4CH
INT 21H

CODE ENDS
END START

Citovat příspěvek

 

vypise poradove cislo prvej cislice

Autor: stano11

18:52:12 12.05.2008

mám tu program ktorý nájde prvú medzeru v zadanom texte

potreboval by som ho upraviť aby vypísal pozíciu prvého čísla

DATA SEGMENT

P DB 0
VSTUP DB 90 ;vstup na
R DB 90 DUP (?) ;90 znakov
NIEJE DB 'Nie je tam medzera$' ;text "nie je tam medzera"
POZICIA DB 'MEDZERA JE NA POZICII: $' ;text medezera jen ...
POCET DB 1

DATA ENDS

CODE SEGMENT

ASSUME DS:DATA, CS:CODE

START:

MOV AX,SEG DATA ; do ax seg data
MOV DS,AX ; do ds ax
MOV AH,0AH ; do ah "medzera"
MOV DX,OFFSET VSTUP ; do DX 90 znakov
INT 21H


XOR CX,CX ; vynulovanie CX
MOV CL,P
XOR SI,SI ; vynulovanie SI

OP: MOV AL,R[SI]
CMP AL,20H
JE MEDZERA
INC SI ; zvysuje SI
INC POCET ; zvysuje POCET
LOOP OP ; skoc na OP

MOV DX,OFFSET NIEJE
MOV AH,9
INT 21H
JMP KONIEC

MEDZERA: MOV DX,OFFSET POZICIA ;vypis POZICIA
MOV AH,9
INT 21H

ADD POCET,30H ;
MOV DL,POCET
MOV AH,2
INT 21H


KONIEC: MOV AH,4CH ; ukoncenie programu
INT 21H

CODE ENDS
END START

predom díky za pomoc

PS: este to nie je osetrene na dvojciferne cisla //ak je MEDZERA na pozicii ktora ma dvojciferne cislo tak to vypisuje chybu

Citovat příspěvek

 

 

 

Přihlášení k mému účtu

Uživatelské jméno:

Heslo: