Stavo scrivendo un paio di programmi, andava tutto bene finché l'assemblatore ha decise di impazzire, ciò che accade secondo me è che decodifica in modo errato le istruzioni.
Dato il seguente codice:
Questo è ciò che genera l'assemblatore:
Come si può vedere già dalla seconda istruzione in poi è tutto sfasato.
Inoltre la coppia CS:IP indirizza la giusta istruzione in quanto gli offset delle locazioni nella quale sono memorizzate le istruzioni rispetto alla prima sono giusti.
Ciò accade solo con quel codice, con gli altri va tutto bene, ciò mi fa pensare che sia un problema del programma, ma non capisco come possa intaccare l'Assemblatore.
Qualcuno ha qualche spiegazione? (sto utilizzando l'assemblatore MASM 6.11 e linker 16bit)
Dato il seguente codice:
Codice:
PAGE_SIZE EQU 4096
text_VRAM SEGMENT AT 0B800h
page0 db PAGE_SIZE DUP(?)
page1 db PAGE_SIZE DUP(?)
page2 db PAGE_SIZE DUP(?)
page3 db PAGE_SIZE DUP(?)
page4 db PAGE_SIZE DUP(?)
page5 db PAGE_SIZE DUP(?)
page6 db PAGE_SIZE DUP(?)
page7 db PAGE_SIZE DUP(?)
text_VRAM ENDS
stack SEGMENT PARA STACK
db ?
stack ENDS
data SEGMENT PARA PUBLIC
msg db "hello world"
data ENDS
code SEGMENT PARA STACK
ASSUME cs: code, ds: data, es: text_VRAM, ss: stack ;anche se non c'è ne bisogno(vabè)
_start:
mov ax, data
mov ds, ax
mov ax, text_VRAM
mov es, ax
mov bx, OFFSET page0
mov si, OFFSET msg
lp: mov BYTE PTR es:[bx], 0h
mov BYTE PTR es:[bx+1], 00010001b
add bx, 2
cmp bx, 0FFFh
jbe lp
mov bx, OFFSET page0
mov cx, 0Bh
lp1: mov al, BYTE PTR [si]
mov BYTE PTR es:[bx], al
mov BYTE PTR es:[bx+1], 00010111b
inc si
add bx, 2
loop lp1
hlt
code ENDS
END _start
Come si può vedere già dalla seconda istruzione in poi è tutto sfasato.
Inoltre la coppia CS:IP indirizza la giusta istruzione in quanto gli offset delle locazioni nella quale sono memorizzate le istruzioni rispetto alla prima sono giusti.
Ciò accade solo con quel codice, con gli altri va tutto bene, ciò mi fa pensare che sia un problema del programma, ma non capisco come possa intaccare l'Assemblatore.
Qualcuno ha qualche spiegazione? (sto utilizzando l'assemblatore MASM 6.11 e linker 16bit)