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
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.
Ohohs joo :D toi oli mun filussa bx. Tähän sitten tungin väärin... pitää kokeilla tota kertolaskun siirtämistä muualle.
Hhö. Ei toikaan toimi :(
siis:
mov ah,'!' mov al,8 mul ah mov bx,ax mov dl,[di+0fa6eh+bx]
tulee jotain ihan muuta.
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
MMMMMitähä sehän toimii!?!! Spirits on pro. Tuhannet kiitokset, Spirits!
Aihe on jo aika vanha, joten et voi enää vastata siihen.