Anonymní profil firin – Programujte.com
 x   TIP: Přetáhni ikonu na hlavní panel pro připnutí webu

Anonymní profil firin – Programujte.comAnonymní profil firin – Programujte.com

 

Příspěvky odeslané z IP adresy 95.102.14.–

firin
Assembler › Pomoc s assembler 86
8. 5. 2009   #100736

joj ja som lolo, som myslel ze to je zle lebo ked som zadal napriklad as tak mi vypisalo 1, pritom to je dobre kedze je tam 0 velkych a 0 cisel :D

firin
Assembler › Pomoc s assembler 86
8. 5. 2009   #100729

To bbeni : tasm a tlink

firin
Assembler › Pomoc s assembler 86
8. 5. 2009   #100724

caute, mam program v asm 86 ale nepracuje mi spravne, ma nacitat retazec znakov a urcit pocet slov s rovnakym poctom velkych pismen a cislic, nejako mi to blbne a zle pocita, mame uvazovat aj prve aj posledne slovo, dakujem

JUMPS			; toto je direktíva pre podporu dlhých skokov

.MODEL SMALL ; tu som nadefinoval dátový model
.STACK 100H ; tu zasa veľkosť zásobníka
.DATA ; táto oblasť sa nastaví ako dátový segment - obsahuje premenné programu

ZNAK DB 0 ; tu sa uklada nacitany znak
VELKE DW 0
CISLA DW 0
JESLOVO DB 0
POCET DW 0
OZNAM DB "Napiste text a potvrdte ho Enterom:",10,13,"$"
TEXTIK DB 10,13,"Pocet slov s rovnakym poctom cislis a velkych znakov je: $"

.CODE ; kódovy segment - obsahuje všetky inštrukcie

; vypíše v osmickovej sústave obsah registra AX
Vypis PROC
PUSH AX BX DX ; vloží obsahy registrov do zásobníka

MOV DX,AX ; DX <- AX
MOV BX,32768 ; BX <- 32768
SKOK:
MOV AX,DX ; AX <- DX
MOV DX,0 ; DX <- 0
DIV BX ; AX <- DX:AX / BX, DX <- DX:AX MOD BX

PUSH BX ; uloží obsah registra BX do zásobníka
MOV BX,AX ; BX <- AX
MOV AH,02H ; číslo funkcie pre výpis znaku
PUSH DX ; uloží slovo zo zásobníka do registra DX
MOV DL,'0' ; DL <- ASCII kód '0'
ADD DL,BL ; DL <- DL + BL
INT 21H ; vykonanie funkcie
POP DX ; uloží slovo zo zásobníka do registra DX
POP BX ; a BX

PUSH AX DX ; uloží obsahy registrov do zásobníka
MOV DX,0 ; DX <- 0
MOV AX,BX ; AX <- BX
MOV BX,8 ; BX <- 8
DIV BX ; AX <- DX:AX / BX, DX <- DX:AX MOD BX
MOV BX,AX ; BX <- AX
POP DX AX ; uloží slová zo zásobníka do registrov

CMP BX,0 ; porovná BX a 0
JNZ SKOK ; a ak sa nerovnajú skočí na SKOK

POP DX BX AX ; uloží slová zo zásobníka do registrov
RET ; návrat na miesto volania funkcie
ENDP Vypis

; testuje, ci dane slovo splna podmienku
Testuj PROC
PUSH AX

CMP JESLOVO,0
JZ TESTUJ2
MOV AX,CISLA
CMP AX,VELKE
JNZ TESTUJ2

INC POCET
TESTUJ2:
MOV JESLOVO,0
MOV VELKE,0
MOV CISLA,0

POP AX
RET
ENDP Testuj


START:
MOV AX,@DATA ; AX = segment oblasti DATA
MOV DS,AX ; ten som nasledne uložil do DS

MOV AH,09H ; AH = číslo funkcie pre výpis reťazca
MOV DX,OFFSET OZNAM ; DX = offset OZNAM
INT 21H ; vykonanie funkcie
CITANIE:
; nacitam znak z klavesnice do AL
MOV AH,00H
INT 16H

; a ulozim ho do premennej ZNAK
MOV ZNAK,AL

; porovná AL so znakmi konca slova (medzera, koniec riadku)
CMP ZNAK,32
JZ TESTIK
CMP ZNAK,10
JZ KONIEC
CMP ZNAK,13
JZ KONIEC

; ak bol nacitany nevyditelny znak tak sa neberie v uvahu
CMP ZNAK,32
JL CITANIE

MOV AH,02H ; chcem vypisat dany znak
MOV DL,ZNAK ; DL = ASCII hodnota tohto znaku
INT 21H ; vypis znaku

MOV JESLOVO,1

CMP ZNAK,48 ; ak je znak mensi ako znak 0
JL CITANIE ; skoci sa na navestie CITANIE
CMP ZNAK,90 ; ak je znak vacsi ako znak Z
JG CITANIE ; tak je to to iste

CMP ZNAK,58
JL PRIDCIS
CMP ZNAK,64
JG PRIDVEL


JMP CITANIE
PRIDCIS:
INC CISLA

JMP CITANIE
PRIDVEL:
INC VELKE

JMP CITANIE
TESTIK:
MOV AH,02H ; chcem vypisat dany znak
MOV DL,32 ; DL = ASCII hodnota medzery
INT 21H ; vypis znaku

CALL Testuj

JMP CITANIE
KONIEC:
CALL Testuj

MOV AH,09H ; AH = číslo funkcie pre výpis reťazca
MOV DX,OFFSET TEXTIK ; DX = offset TEXTIK
INT 21H ; vykonanie funkcie

MOV AX,POCET
CALL Vypis

MOV AX,4C00H ; AX = číslo funkcie pre ukončenie programu
INT 21H ; vykonanie funkcie
END START

 

 

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