Ahoj...programujem eratosthenovo sito v nasm no nefunguje to korektne:
Kód:
bits 16
%include "rw.asm"
segment code
..start:
prologue
call Read_Byte ;AL=vstup
call WriteLn
mov [j],al ;ulozenie vstupu do datoveho segmentu
mov cl,al ;pocitadlo pre init
cmp cl,0
jz @koniec ;overenie ci bola zadana 0 ked ano koniec programu
xor ch,ch ;vynulovanie ch
xor ah,ah
mov di,POLE ; register DI je nastaveny na adresu pola
xor di,di
;inicializacia pola
@init_pole:
mov [POLE+di],byte 1
inc di
loop @init_pole
shr ax,1 ;vydelenie AX 2
mov [i],al
call Write_Byte
call WriteLn
mov cl,byte 2;nastavenie pocitadla pre cyklus
;nulovanie registrov
xor di,di
xor si,si
xor ch,ch
xor ax,ax
add di,byte 2 ;aby cyklus zacal od 2
add si, byte 2 ;opat posun pre cyklus
@vonkajsi_cyklus:
cmp [POLE+si],byte 0 ;ked byt je 0 preskoc na dalsi
jz @posun
mov ax,si
call Write_Byte
mov al,' '
call Write_Char
push cx ;ulozenie pocitadla do zasobniku
mov al,cl ;pre pocitanie nasobkov
@vnoreny_cyklus:
mul cl ;pocitanie nasobkov i
mov di,ax;zmnena offsetu na konkretny prvok
mov [POLE+di],byte 0;prepis prvku nulou
inc cl
cmp al,[j] ;podmienka pre ovrenie ukoncenia cyklu
jbe @vnoreny_cyklus
@posun:
pop cx;vybe pocitadla zo zasobniku
inc cl
mov si,cx
mov di,cx
cmp cl,[i]
jbe @vonkajsi_cyklus
mov al,[j]
call Write_Byte
@koniec epilogue
segment DATA
POLE resb 256
i resb 1 ;ulozenie hranice
j resb 1; pri nasobeni