anoniem Geplaatst: 16 maart 2002 Delen Geplaatst: 16 maart 2002 Ben bezig met een bootloader en na de eerste start wordt er een bestand geladen op een adres ES:BX. Hoewel Nasm prima werkt wil ik graag Masm gebruiken. De huidige jump instructie is JMP DWORD PTR ES:00000h Dit is ook het adres waar ik het image van het volgende bestandje laat starten. Toch blijft hij op de JMP instructie steken. Doe ik iets fout? (zal haast wel) :grin: p.s. Compileren gaat prima, dat is niet het probleem. Met Nasm gaat het wel en dat irriteert mij behoorlijk. _________________ I'm not a complete idiot, some parts are missing. [ Dit Bericht is bewerkt door: DarkScribe op 2002-03-16 09:36 ] Quote Link naar reactie
anoniem Geplaatst: 16 maart 2002 Auteur Delen Geplaatst: 16 maart 2002 tis lang geleden dat ik iets met assembly heb gedaan, maar moet het niet: JMP DWORD PTR [ES:0h] zijn? (zo van indirect) Quote Link naar reactie
anoniem Geplaatst: 17 maart 2002 Auteur Delen Geplaatst: 17 maart 2002 Heb ik ook al geprobeerd, maar het effect blijft hetzelfde. Alle documentatie van Masm geeft geen soelaas, en zoals het er nu uitziet denk ik dat ik verder moet met Nasm. Zonde van het geld dat ik toen voor Masm betaald heb. In ieder geval bedankt. Quote Link naar reactie
anoniem Geplaatst: 17 maart 2002 Auteur Delen Geplaatst: 17 maart 2002 Kun je niet van de code die nasm genereerd een disassemble doen (met debug ofzo) en kijken wat voor jump nasm genereerd en deze in masm proberen te krijgen? Quote Link naar reactie
anoniem Geplaatst: 17 maart 2002 Auteur Delen Geplaatst: 17 maart 2002 Er zit inderdaad verschil tussen de output van beide programma's. De output van Nasm is [code:1:dec0b0a8f5]AX=0004 BX=0000 CX=0002 DX=0000 SP=FFFE BP=0000 SI=0000 DI=0000 DS=078C ES=1000 SS=078C CS=078C IP=0118 NV UP EI PL ZR NA PE NC 078C:0118 EA00000010 JMP 1000:0000[/code:1:dec0b0a8f5] en de output van Masm is [code:1:dec0b0a8f5]AX=0004 BX=0000 CX=0002 DX=0000 SP=FFFE BP=0000 SI=0000 DI=0000 DS=078C ES=1000 SS=078C CS=078C IP=0118 NV UP EI PL ZR NA PE NC 078C:0118 26 ES: 078C:0119 FF2E0000 JMP FAR [0000] ES:0000=1F0E[/code:1:dec0b0a8f5] Ik heb gecontroleerd wat op ES:0h staat en in beide gevallen bevindt zich daar de code van het bestand dat ik daar plaats. Zoals ik het zie zou de code moeten werken maar toch... Let overigens niet op de IP want ik heb alle code weggehaald die niet van belang is, daarom is de IP zo laag. De code voor Nasm ziet er zo uit:[code:1:dec0b0a8f5][ORG 0x7C00] [BITS 16] JMP start ; Jump over BIOS parameter block start: MOV AH,002h ; Function for disk access MOV AL,004h ; Amount of sectors to read MOV CH,000h ; Track MOV CL,002h ; sector MOV DH,000h ; head MOV DL,000h ; drive MOV BX,01000h ; Create a buffer at 4096 MOV ES,BX MOV BX,00000h ; point to start of buffer INT 13h ; Jump code werkt hier wel JMP 0x1000:0x0000 ; transfer control ; Hier komt het DATA gedeelte[/code:1:dec0b0a8f5] en de code voor Masm[code:1:dec0b0a8f5]_TEXT SEGMENT WORD PUBLIC 'CODE' ASSUME CS:_TEXT, DS:_TEXT ORG 07C00h first: JMP start ; Hier komt dan het DATA gedeelte start: MOV AH,002h ; Function for disk access MOV AL,004h ; Amount of sectors to read MOV CH,000h ; Track MOV CL,002h ; sector MOV DH,000h ; head MOV DL,000h ; drive MOV BX,01000h ; Create a buffer at 4096 MOV ES,BX MOV BX,00000h ; point to start of buffer INT 13h ; Jump code werkt hier niet JMP DWORD PTR ES:00000h ; transfer control _TEXT ENDS END first[/code:1:dec0b0a8f5] [edit] Wat overigens wel lukt is wanneer ik de code van het bestand aanpas met debug zodat de JMP FAR verdwijnt en er EA00000010 voor in de plaats zet. Maar een bestand door Masm gemaakt moet ik niet hoeven patchen :sad: [/edit] _________________ I'm not a complete idiot, some parts are missing. [ Dit Bericht is bewerkt door: DarkScribe op 2002-03-17 20:07 ] Quote Link naar reactie
anoniem Geplaatst: 18 maart 2002 Auteur Delen Geplaatst: 18 maart 2002 Ik zie dat je in de nasm versie een vaste JMP FAR doet naar 1000h:0, maar bij masm stop je het adres eerst in es:bx. Waarom zet je in masm niet ook een jmp far 1000h:0 neer? Quote Link naar reactie
anoniem Geplaatst: 18 maart 2002 Auteur Delen Geplaatst: 18 maart 2002 Omdat Masm met 1 van de volgende foutmeldingen komt, al naargelang de constructies die ik toepas. error A2096: segment, group or segment register expected error A2206: missing operator in expression error A2031: must be index or base register Dit zelfde effect krijg je ook als je CALL gebruikt. INVOKE zegt nog gekkere dingen over een prototype die nodig is voor een procedure. (logisch, overigens) :grin: Ben echt bang dat ik me wat meer moet verdiepen in Nasm, maar het is gratis dus de kosten vallen hier gelukkig wel mee. Heb gisteren overigens allerlei sites over het maken van OSsen afgegaan en allemaal gebruiken ze Nasm en gcc voor het maken van bootloaders. Misschien een teken aan de wand? [img:262ab3b97e]http://216.40.201.240/s/otn/confused/shrug03.gif[/img:262ab3b97e] Quote Link naar reactie
anoniem Geplaatst: 21 maart 2002 Auteur Delen Geplaatst: 21 maart 2002 Ben er uit, ik vond ergens een macro die precies doet wat ik wil. Dit is 'm [code:1:60777d4ca7]JMPFAR MACRO destination,selector ; dynamic JMP FAR SEG:OFF db 0eah ;; jmp instruction dw offset destination ;; offset word dw selector ;; segment selector word endm [/code:1:60777d4ca7] Ik kan weer dansen van plezier [img:60777d4ca7]http://216.40.198.77/mysmilies/s/otn/realhappy/offwall.gif[/img:60777d4ca7] _________________ I'm not a complete idiot, some parts are missing. [ Dit Bericht is bewerkt door: DarkScribe op 2002-03-21 11:32 ] Quote Link naar reactie
Aanbevolen berichten
Om een reactie te plaatsen, moet je eerst inloggen