Kirjautuminen

Haku

Tehtävät

Keskustelu: Koodit: jone2712@

neosofta [03.02.2025 16:18:00]

#

section .data
    MAX_ITER equ 256
    width equ 1024
    height equ 1024

section .bss
    loop resd 1
    rr resq 1
    x resq 1
    y resq 1
    r resq 1
    i resq 1
    a resq 1
    b resq 1
    c resd 1

section .text
    global _start

_start:
    ; Initialize variables
    mov dword [loop], 0
    fldz
    fst qword [rr]
    fldz
    fst qword [x]
    fldz
    fst qword [y]

iterate:
    ; while (rr < 4096)
    fld qword [rr]
    fld qword [4096.0]
    fcomi st0, st1
    jae .end_loop

    ; r = x * x
    fld qword [x]
    fmul st0, st0
    fst qword [r]

    ; i = y * y
    fld qword [y]
    fmul st0, st0
    fst qword [i]

    ; rr = r + i
    fld qword [r]
    fadd qword [i]
    fst qword [rr]

    ; y = 2 * x * y + b
    fld qword [x]
    fmul qword [y]
    fadd qword [y]
    fadd qword [b]
    fst qword [y]

    ; x = r - i + a
    fld qword [r]
    fsub qword [i]
    fadd qword [a]
    fst qword [x]

    ; if (++loop == MAX_ITER) return 0
    inc dword [loop]

jone2712 [05.02.2025 16:39:45]

#

Ei yhtään ylimääräistä koodia. Hienosti ohjelmoitu!

jalski [05.02.2025 17:33:06]

#

Miksi kirjoittaa assemblyä samalla tavalla kuin korkeamman tason ohjelmointikielen kääntäjä olisi ehkä joskus 60-luvulla koodia tuottanut? Nopealla silmäyksellä ohjelmalistaus ei ole edes kokonainen.

neosofta [06.02.2025 05:04:10]

#

jalski@

Menit vähintään vain parillakymmenellä vuodella metsään tuon 60-lukusi kanssa. MASM ei ole häipynyt yhtään mihinkään vaikkei Microsoft ole myynyt sitä enää aikoihin erillisenä pakettina. Se sisältyy kuitenkin lähes jokaiseen em. puljun julkaisemaan SDK:n ja C-kääntäjään ja toimitetaan mm. Visual Studio paketin mukana. Nyt on niin, että tuo vääntö toimii yhtä hyvin 32 kuin 64 bittisessä ympäristössä millä tahansa alustalla jolla on ylipäätään jotain merkitystä. Kun nyt lässyttelit listauksista niin käypä kurkkaamassa nimimerkki jone2712 avausulostuloa aiheesta, eli mitä hän kysyi...

jalski [06.02.2025 06:46:27]

#

Meinasin vaan, että miksi jos haluaa kirjoittaa assemblyä tekee sen kuin vanha korkeamman tason ohjelmointikielen kääntäjä mikä ei osaa käyttää rekistereitä edes silmukkalaskureina.

Missä koodissa on näkyvillä '.end_loop' label tai miten 'inc dword [loop]' palauttaa nollan mikäli laskuri on suurempi kuin 'MAX_ITER'?

Mandelbrot laskennassa assemblyä suurempi optimointi olisi rinnakkaisuus laskentaan ja mikäli kuva olisi symmetrinen voisi laskea vaan puolet kuvasta ja piirtää molemmat puolet.

neosofta [06.02.2025 15:09:32]

#

Ihme kitinää... Just don't lose your sense of humour while you're coding (if you've ever even had ...)
😉

Vastaus

Muista lukea kirjoitusohjeet.
Tietoa sivustosta