Kirjautuminen

Haku

Tehtävät

Keskustelu: Ohjelmointikysymykset: Assembly: asm muistiosoitelaskuongelma

sooda [08.06.2004 10:27:42]

#

otsikoksi nyt tuli mitä tuli... noh, tällanen asm-ongelma:

mov dl,[0fa6eh+di+8*'!']

pitäisi saada tuo '!' ajon aikana vaihdettavaksi. Olen kokeillut vaikka mitä, esim:

mov ax,'!'
mov dl,[0fa6eh+di+8*ax]

ja tämä tekee sitten jotain ihan muuta. Mitens saisi vaihdettua tota '!':a ajon aikana? Variaapelit ei käy tässä tapauksessa... :/
Olen sitten aika aloittelija joten tää on varmaan aika tyhmä kysymys, älkää valittako :D

KemXy [08.06.2004 11:50:54]

#

No ensinnäkin tuolla on kertolasku ( 8*ax ). Epäilisin, että sellaista tuossa ei saa olla. Ainakaan debug ei hyväksy kertolaskuja.
Toiseksi käsittääkseni ax ei saa olla myöskään tuossa. Muistinosoitukseenhan käyvät vain tietyt rekisterit ( bx, bp, si, di ).
Ja eikös, jos asm ohjelmaan laitetaan jokin ascii merkki, kuten '0', niin se on käytännössä vakio ( tässä tapauksessa 30 ) heksadesimaaleina. Siis '!' ei voi muuttaa.
En tiedä minkälaisesta ohjelmasta on kysymys, mutta itse teksisin tuon kahdeksalla kertomisen ennen osoitusta SHL siirrolla ja laittaisin sen johonkin tarkoitukseen sopivaan rekisteriin, ja sen jälkeen vasta osoittelemaan.

sooda [08.06.2004 11:55:26]

#

Ohohs joo :D toi oli mun filussa bx. Tähän sitten tungin väärin... pitää kokeilla tota kertolaskun siirtämistä muualle.

sooda [08.06.2004 20:09:00]

#

Hhö. Ei toikaan toimi :(
siis:

mov ah,'!'
mov al,8
mul ah
mov bx,ax
mov dl,[di+0fa6eh+bx]

tulee jotain ihan muuta.

Spirits [08.06.2004 21:10:35]

#

Oletin että DI:n täytyy säilyä

mov cl, 03
mov ax, '!'
shl ax, cl   ;kertoo 8:lla
add ax, di
push di
mov di, ax
mov dl, [di+0FA6Eh]
pop di

sooda [08.06.2004 21:32:08]

#

MMMMMitähä sehän toimii!?!! Spirits on pro. Tuhannet kiitokset, Spirits!

Vastaus

Aihe on jo aika vanha, joten et voi enää vastata siihen.

Tietoa sivustosta