asembler- cyklus ktory sa s poctom opakovani zrychluje
-
n0sf3ratus
Amateur
- Príspevky: 22
- Registrovaný: 09 okt 2012, 13:56
asembler- cyklus ktory sa s poctom opakovani zrychluje
cawte mam otazku ze ci niekto nevie ako by sa dal nejaky cyklus zrychlit s poctom opakovani. chcem nech na zaciatku ide pomaly a potom rychlejsie ale nenasiel som take instrukcie ani nic a nemyslim ani ze ma vyznam zatazit procesor ked on aj tak vsetko vykona pomerne rychlo. dakujem za radu
Re: asembler- cyklus ktory sa s poctom opakovani zrychluje
Čo znamená "pomaly" a "rýchlejšie"? Máš tam nejaký sleep, alebo čo?
A tiež by si mohol napísať, o aký assembler ide.
A tiež by si mohol napísať, o aký assembler ide.
-
n0sf3ratus
Amateur
- Príspevky: 22
- Registrovaný: 09 okt 2012, 13:56
Re: asembler- cyklus ktory sa s poctom opakovani zrychluje
ide to pre procesor rady 8086 a proste ze spravi sa prvy znak
bude tamnapr pet sekund potom druhy a potom zase rozdiel medzi nimi bude napr 4 sekundy potom tri potom dve a tak
bude tamnapr pet sekund potom druhy a potom zase rozdiel medzi nimi bude napr 4 sekundy potom tri potom dve a tak
Re: asembler- cyklus ktory sa s poctom opakovani zrychluje
Že spraví sa jeden znak 
Jednoducho tam daj premennú, ktorú budeš každým priechodom znižovať. Ukáž ten tvoj cyklus a poriadne napíš čo a prečo vlastne chceš.
Jednoducho tam daj premennú, ktorú budeš každým priechodom znižovať. Ukáž ten tvoj cyklus a poriadne napíš čo a prečo vlastne chceš.
-
n0sf3ratus
Amateur
- Príspevky: 22
- Registrovaný: 09 okt 2012, 13:56
Re: asembler- cyklus ktory sa s poctom opakovani zrychluje
myslis to tak ze dam jeden cyklus ten bude stale zobrazovat jeden znak potom druhy cyklus ten bude ten druhy znak ukazovat a postupne ako sa budu vykonavat tak riadiacu premenu cyklu znizovat? kod dodam az zajtra lebo vypracovavam tri projekty a k tomuto som sa este nedostal
Re: asembler- cyklus ktory sa s poctom opakovani zrychluje
Asi bude lepší ten kód, lebo som z toho mierne mimo...
-
n0sf3ratus
Amateur
- Príspevky: 22
- Registrovaný: 09 okt 2012, 13:56
Re: asembler- cyklus ktory sa s poctom opakovani zrychluje
;Zadanie: Zobrazte na zvolenom miete obrazovky znak / a na tom istom mieste s veľkým oneskorením znak \.
;Striedajte zobrazovanie oboch znakov zvolený početkrát. Zobrazovanie každého znaku zrýchlujte.
;Zhodnotenie:
;----------------------------------------------------------------------------
ZAS SEGMENT STACK ;direktiva pre assembler - zaciatok
; zasobnikoveho segmentu
DW 400 DUP(?) ;definicia 64-och slov
ZAS ENDS ;koniec zasobnikoveho segmentu
;----------------------------------------------------------------------------
DATA SEGMENT ;zaciatok datoveho segmentu
a DB 'Zvolte z moznosti 1, 2, 3.$' ;definicia retazca
b DB 'Autor: jozko$' ;
c DB 'Zadanie: Zobrazte na zvolenom miete obrazovky znak / a na tom istom mieste s velkym oneskorenim znak \.$' ;
d DB 'Striedajte zobrazovanie oboch znakov zvoleny pocetkrat. Zobrazovanie kazdeho znaku zrychlujte.$' ;
e DB 'Zadali ste nespravny znak.$' ;
DATA ENDS ;koniec datoveho segmentu
;----------------------------------------------------------------------------
CODE SEGMENT ;zaciatok kodoveho segmentu
ASSUME CS:CODE, DS:DATA, SS:ZAS ;direktiva oznamuje
;assembleru pouzite segmenty
;----------------------------------------------------------------------------
novyriadok MACRO a
mov dl, 13d ;
mov ah, 2h ;
int 21h ;
mov dl, 10d ;
mov ah, 2h ;
int 21h ;
endm
delay PROC NEAR ;funkcia na spomalenie procesora
;
push ds ;
push si ;
push ax ;
xor ax, ax ;AX = 0
mov ds, ax ;DS = 0
mov si, 046Ch ;
t1: mov ax, [si] ;
t2: cmp ax, [si] ;
je t2 ;
loop t1 ;
pop ax ;
pop si ;
pop ds ;
ret ;
delay ENDP ;
START: call p
novyriadok
mov ah,1
int 21h
cmp al,49
jz vypis1
cmp al,51
jz koniec
cmp al,27
jz koniec
jmp zlyznak
int 21h ;prerusenie na vykonanie ukoncenia programu
jmp koniec
;vypis :
; MOV AX, SEG DATA ;do AX vloz adresu segmentu DATA
; MOV DS, AX ;segmentovu adresu presun do DS
; MOV DX, OFFSET a ;do DX vloz posunutie retazca v datovom segmente,
; ;cize relativna adresa TEXT sa ulozi do DX
; ;novyriadok
; MOV AH, 09H ;
; INT 21H ;funkcia na vypis retazca (write string)
p proc
MOV AX, SEG DATA ;do AX vloz adresu segmentu DATA
MOV DS, AX ;segmentovu adresu presun do DS
MOV DX, OFFSET a ;do DX vloz posunutie retazca v datovom segmente,
;cize relativna adresa TEXT sa ulozi do DX
;novyriadok
MOV AH, 09H ;
INT 21H ;funkcia na vypis retazca (write string)
ret
p endp
vypis1 proc
MOV AX, SEG DATA ;do AX vloz adresu segmentu DATA
MOV DS, AX ;segmentovu adresu presun do DS
MOV DX, OFFSET b ;do DX vloz posunutie retazca v datovom segmente,
;cize relativna adresa TEXT sa ulozi do DX
novyriadok
MOV AH, 09H ;
INT 21H ;funkcia na vypis retazca (write string)
jmp vypis2
ret
vypis1 endp
vypis2 proc
MOV AX, SEG DATA ;do AX vloz adresu segmentu DATA
MOV DS, AX ;segmentovu adresu presun do DS
MOV DX, OFFSET c ;do DX vloz posunutie retazca v datovom segmente,
;cize relativna adresa TEXT sa ulozi do DX
novyriadok
MOV AH, 09H ;
INT 21H ;funkcia na vypis retazca (write string)
jmp vypis3
ret
vypis2 endp
vypis3 proc
MOV AX, SEG DATA ;do AX vloz adresu segmentu DATA
MOV DS, AX ;segmentovu adresu presun do DS
MOV DX, OFFSET d ;do DX vloz posunutie retazca v datovom segmente,
;cize relativna adresa TEXT sa ulozi do DX
novyriadok
MOV AH, 09H ;
INT 21H ;funkcia na vypis retazca (write string)
jmp START
ret
vypis3 endp
zlyznak :
novyriadok
MOV AX, SEG DATA ;do AX vloz adresu segmentu DATA
MOV DS, AX ;segmentovu adresu presun do DS
MOV DX, OFFSET e ;do DX vloz posunutie retazca v datovom segmente,
;cize relativna adresa TEXT sa ulozi do DX
novyriadok
MOV AH, 09H ;
INT 21H ;funkcia na vypis retazca (write string)
jmp START
koniec:
MOV AH, 4CH ;funkcia na ukoncenie programu
int 21H
CODE ENDS ;koniec kodoveho segmentu
END START ;koniec suboru - pre assembler
; program bude spusteny od navestia START
tu je ten program hore je aj co to ma robit uz som vytvoril cyklus ktory spomaly procesor takze to som vyriesil len neviem rpeco ale blbne mi uvodne menu ma fungovat tak ze napise najprv zvolte jednu z moznosti a potom stlaci uzivatel 1, 2 alebo 3 a jednotka da informacie dvojka spusti program a trojka ukonci a este ked neico ine clovek stlaci tak to trebaosetrit no a nakodil som to a vobec mi to nejde aj keby malo dal som tam porovnavat a potom vzdy vykonat podmieneny skok a aj nejake nepodmienene a nejde to
;Striedajte zobrazovanie oboch znakov zvolený početkrát. Zobrazovanie každého znaku zrýchlujte.
;Zhodnotenie:
;----------------------------------------------------------------------------
ZAS SEGMENT STACK ;direktiva pre assembler - zaciatok
; zasobnikoveho segmentu
DW 400 DUP(?) ;definicia 64-och slov
ZAS ENDS ;koniec zasobnikoveho segmentu
;----------------------------------------------------------------------------
DATA SEGMENT ;zaciatok datoveho segmentu
a DB 'Zvolte z moznosti 1, 2, 3.$' ;definicia retazca
b DB 'Autor: jozko$' ;
c DB 'Zadanie: Zobrazte na zvolenom miete obrazovky znak / a na tom istom mieste s velkym oneskorenim znak \.$' ;
d DB 'Striedajte zobrazovanie oboch znakov zvoleny pocetkrat. Zobrazovanie kazdeho znaku zrychlujte.$' ;
e DB 'Zadali ste nespravny znak.$' ;
DATA ENDS ;koniec datoveho segmentu
;----------------------------------------------------------------------------
CODE SEGMENT ;zaciatok kodoveho segmentu
ASSUME CS:CODE, DS:DATA, SS:ZAS ;direktiva oznamuje
;assembleru pouzite segmenty
;----------------------------------------------------------------------------
novyriadok MACRO a
mov dl, 13d ;
mov ah, 2h ;
int 21h ;
mov dl, 10d ;
mov ah, 2h ;
int 21h ;
endm
delay PROC NEAR ;funkcia na spomalenie procesora
;
push ds ;
push si ;
push ax ;
xor ax, ax ;AX = 0
mov ds, ax ;DS = 0
mov si, 046Ch ;
t1: mov ax, [si] ;
t2: cmp ax, [si] ;
je t2 ;
loop t1 ;
pop ax ;
pop si ;
pop ds ;
ret ;
delay ENDP ;
START: call p
novyriadok
mov ah,1
int 21h
cmp al,49
jz vypis1
cmp al,51
jz koniec
cmp al,27
jz koniec
jmp zlyznak
int 21h ;prerusenie na vykonanie ukoncenia programu
jmp koniec
;vypis :
; MOV AX, SEG DATA ;do AX vloz adresu segmentu DATA
; MOV DS, AX ;segmentovu adresu presun do DS
; MOV DX, OFFSET a ;do DX vloz posunutie retazca v datovom segmente,
; ;cize relativna adresa TEXT sa ulozi do DX
; ;novyriadok
; MOV AH, 09H ;
; INT 21H ;funkcia na vypis retazca (write string)
p proc
MOV AX, SEG DATA ;do AX vloz adresu segmentu DATA
MOV DS, AX ;segmentovu adresu presun do DS
MOV DX, OFFSET a ;do DX vloz posunutie retazca v datovom segmente,
;cize relativna adresa TEXT sa ulozi do DX
;novyriadok
MOV AH, 09H ;
INT 21H ;funkcia na vypis retazca (write string)
ret
p endp
vypis1 proc
MOV AX, SEG DATA ;do AX vloz adresu segmentu DATA
MOV DS, AX ;segmentovu adresu presun do DS
MOV DX, OFFSET b ;do DX vloz posunutie retazca v datovom segmente,
;cize relativna adresa TEXT sa ulozi do DX
novyriadok
MOV AH, 09H ;
INT 21H ;funkcia na vypis retazca (write string)
jmp vypis2
ret
vypis1 endp
vypis2 proc
MOV AX, SEG DATA ;do AX vloz adresu segmentu DATA
MOV DS, AX ;segmentovu adresu presun do DS
MOV DX, OFFSET c ;do DX vloz posunutie retazca v datovom segmente,
;cize relativna adresa TEXT sa ulozi do DX
novyriadok
MOV AH, 09H ;
INT 21H ;funkcia na vypis retazca (write string)
jmp vypis3
ret
vypis2 endp
vypis3 proc
MOV AX, SEG DATA ;do AX vloz adresu segmentu DATA
MOV DS, AX ;segmentovu adresu presun do DS
MOV DX, OFFSET d ;do DX vloz posunutie retazca v datovom segmente,
;cize relativna adresa TEXT sa ulozi do DX
novyriadok
MOV AH, 09H ;
INT 21H ;funkcia na vypis retazca (write string)
jmp START
ret
vypis3 endp
zlyznak :
novyriadok
MOV AX, SEG DATA ;do AX vloz adresu segmentu DATA
MOV DS, AX ;segmentovu adresu presun do DS
MOV DX, OFFSET e ;do DX vloz posunutie retazca v datovom segmente,
;cize relativna adresa TEXT sa ulozi do DX
novyriadok
MOV AH, 09H ;
INT 21H ;funkcia na vypis retazca (write string)
jmp START
koniec:
MOV AH, 4CH ;funkcia na ukoncenie programu
int 21H
CODE ENDS ;koniec kodoveho segmentu
END START ;koniec suboru - pre assembler
; program bude spusteny od navestia START
tu je ten program hore je aj co to ma robit uz som vytvoril cyklus ktory spomaly procesor takze to som vyriesil len neviem rpeco ale blbne mi uvodne menu ma fungovat tak ze napise najprv zvolte jednu z moznosti a potom stlaci uzivatel 1, 2 alebo 3 a jednotka da informacie dvojka spusti program a trojka ukonci a este ked neico ine clovek stlaci tak to trebaosetrit no a nakodil som to a vobec mi to nejde aj keby malo dal som tam porovnavat a potom vzdy vykonat podmieneny skok a aj nejake nepodmienene a nejde to