Forum |  HardWare.fr | News | Articles | PC | S'identifier | S'inscrire | Shop Recherche
1497 connectés 

  FORUM HardWare.fr
  Programmation

  [ASM] Comment faire un jmp qui modifie en meme temps cs et ip?

 


 Mot :   Pseudo :  
 
Bas de page
Auteur Sujet :

[ASM] Comment faire un jmp qui modifie en meme temps cs et ip?

n°69798
Ace17
Posté le 05-11-2001 à 19:51:30  profilanswer
 

Par exemple je veux faire jmp 08h:1000h
Mais l'assembleur me dit "Illegal Immediate"
Pourtant avec NASM on pouvait le faire (j'utilise TASM)

mood
Publicité
Posté le 05-11-2001 à 19:51:30  profilanswer
 

n°69800
bjone
Insert booze to continue
Posté le 05-11-2001 à 20:03:51  profilanswer
 

jmp far ??
 
sinon au pire, tu push ton nouvo cs/ip, et tu fais un ret.
mais c'est boeuf.
 
si t'y arrive toujours po, tu peux tricher avec des db en attentant de trouver la bonne synthaxe.

n°69808
bjone
Insert booze to continue
Posté le 05-11-2001 à 20:42:30  profilanswer
 

au fait je viens de penser, ptet qu'un ASSUME CS:NONE ou CS:NOTHING est nécessaire pour qu'il ne te jette po....
 
au fait pourquoi 08h:1000h, ça fait l'addrese 1080h ??
c'est un point d'entrée du bios /dos ? :??:

n°69845
Ace17
Posté le 06-11-2001 à 07:30:44  profilanswer
 

Non, en fait quand on est en mode protégé cs ne représente plus l'addresse du début d'un segment, il pointe sur le début du descripteur d'un segment dans la Global Descriptor Table (GDT).
Et en fait il se trouve que mon segment de code est le deuxieme de la liste, et comme chaque descripteur fait 8 bits...le deuxieme est a l'offset 8

n°69846
Ace17
Posté le 06-11-2001 à 07:34:55  profilanswer
 

Bon, je pense que je vais trafiquer pour trouver le bon opcode...
Car quand je fais un assume cs:none il me jette......
A quoi elle sert cette directive exactement en fait? Car jusqu'a présent je me suis contenté de la recopier betement

n°69870
Ace17
Posté le 06-11-2001 à 10:36:47  profilanswer
 

up up up

n°69878
HelloWorld
Salut tout le monde!
Posté le 06-11-2001 à 11:01:44  profilanswer
 

en mode protege t'es pas cense touche a CS
c'est a l'OS de le faire
je crois pas ke tu puisse le faire ca
en gros tu veux programmer en mode protege comme on programme en mode reel
un programme a son segment de code et il doit se demerde avec
enfin je suis sur de rien
je crois d'ailleur que toucher a CS n'est pas permis a n'importe qui
pourkoi tu crees pas plutot des descripteurs identiques ...enfin, c'est histoire de relancer le topic ;)


---------------
FAQ fclc++ - FAQ C++ - C++ FAQ Lite
n°70049
Ace17
Posté le 06-11-2001 à 17:27:24  profilanswer
 

J'ai pas encore la prétention de programmer mon os, mais c'est bien dans le but de créer un mini-kernel que je compte faire ce jmp. A ce moment, l'execution en est au secteur de boot qui vient juste de mettre le pross en mode protégé, il faut alors donner la main au kernel qui lui s'execute en mode protégé. Mais de toutes manieres c'est pas compliqué ce que je veux! C'est juste la syntaxe que je demande!  :hello:  
Et aussi ce que veulent dire les directives assume (concretement)

n°70073
bjone
Insert booze to continue
Posté le 06-11-2001 à 19:05:19  profilanswer
 

l'ASSUME, indique juste à l'assembleur ce que à quel segment/selecteur se référencer... un truc du genre...
(ça ne change pas la génération de code, mais c'est des vérifications)
 
par contre, question :
quand tu essayes d'assembler, là tu est en mode réel ? ou en mode protégé ?
passke l'interprétation des opcodes par le cpu va différer suivant si il est en mode réel/protégé !
 
mais bon j'ai pas mal programmé avec dos4gw/pmodew (avec watcomC), mais j'ai jamais été cherché à refaire un kernel...
(y'a tellement de bricolages à faire pour les passages pm/rm, pour pouvoir utiliser le bios....)
 
et par contre si tu fais un
 
PmEntry DW 08h,1000h
 
 
et un jmp far DWORD PTR[PmEntry]
 
y se passe koi ?
 
ce que je comprends po, c'est ce jmp serait alors en mode réel, mais comment le cpu va basculer en mode protégé en sautant que le descripteur :??: (fo switcher un bit du MSW, mais là je cois po)

 

[edtdd]--Message édité par bjone--[/edtdd]

n°70076
Ace17
Posté le 06-11-2001 à 19:22:46  profilanswer
 

Bon j'ai trouvé l'opcode, il faut faire un truc du style
db 0EAh
dd 1000h
dw 0008h
 
ce qui équivaut a jmp 08h:1000h
 
Quand je fais ca je suis en mode protégé déja; il s'agit juste de sauter vers un vrai segment de code et ainsi sortir du secteur de boot. Personne d'autres n'a des précisions sur ASSUME?

mood
Publicité
Posté le 06-11-2001 à 19:22:46  profilanswer
 

n°70086
wpk
Posté le 06-11-2001 à 19:54:40  profilanswer
 

bon, ca va pas t'avancer des masses pour ton pbm, mais je me rappelle ke y'a qcq tmps, j'avais suivi le dev de v2os  
http://v2os.v2.nl/ (un os 32bits en mode protege entierement ecrit en assembleur) ca peut te donner des idees (notament sur comment faire pour utiliser le bios à partir du mode protegé)

n°70104
Ace17
Posté le 06-11-2001 à 20:43:19  profilanswer
 

up

n°70165
bjone
Insert booze to continue
Posté le 07-11-2001 à 00:47:55  profilanswer
 

pour moa, si tu veux le sélecteur 1 (le deuxième) qui est à l'offset 8 dans la table des descripteurs, il serait plus logique de faire un jmp 1:1000h (en fait le cpu copie tes 8 octets du descripteur correspondant au selecteur, dans des registres internes au cpu, pour pouvoir ensuite tester chaque adresse linéaire dans les bornes du descripteur)

n°70166
bjone
Insert booze to continue
Posté le 07-11-2001 à 01:00:52  profilanswer
 

le premier descripteur, c'est un descripteur de donnée ?

n°70275
Ace17
Posté le 07-11-2001 à 13:16:43  profilanswer
 

Le premier descripteur j'ai lu quelque part que il était recommandé de le laisser vide...
De plus le selecteur de descripteur doit contenir l'addresse du selecteur et non pas son index - du moins, c'est ce qu'il me semble...corrigez moi si je dis une connerie hein!  :D

n°70278
Ace17
Posté le 07-11-2001 à 13:19:47  profilanswer
 

Et aussi, peut etre que je me répete  :D ; mais quand l'assembleur va tomber sur une directive assume, qu'est-ce que ca va changer a sa maniere d'interpreter le code source?

n°70401
bjone
Insert booze to continue
Posté le 07-11-2001 à 17:14:03  profilanswer
 

bin je pense que qd tu mets un ASSUME CS:_CODE, CS est supposé initialisé au segment _CODE... je pense que si tu ne le fais po, (mais en fait l'assume n'est ptet po problématique dans ton cas), lorsque que tu utilises une étiquette, l'assembleur va te faire un warningue.  
j'ai déjà vu du code, ou y'avait un ASSUME CS:CODE, DS:DATA, et un endroit ou y'avait un truc tordu, le mec faisait un ASSUME DS:NOTHING (je crois).
 
qd à ce que tu dois mettre dans CS pour le sélecteur 1 (offset 8), je suis sûr de rien, mais ça me paraitrait logique tu doives mettre 1 (ça me paraitrait bizarre de pouvoir faire charger un descripteur non aligné par le cpu).

n°70417
Ace17
Posté le 07-11-2001 à 18:20:24  profilanswer
 

Pour ceux qui veulent plus de précisions;
 
http://inferno.cs.univ-paris8.fr/~ [...] ial04.html

n°70433
HelloWorld
Salut tout le monde!
Posté le 07-11-2001 à 19:13:46  profilanswer
 

En relisant un peu ton post ta question est en fait :
comment convertir cette synatxe de NASM :
    jmp dword 0x08:0x1000
en TASM ...
essaie :
    jmp far 08h:[1000h]
car ton
    jmp 08h:1000h
me parrait bizarre ... ;)
moi c'est un loin, je me suis interresse a ca y'a 6 mois
t'as l'air d'avoir de bons sites
le Boso kernel est super !!! :hap:
y'a aussi plein de doc interressante sur le flat real mode, ou comment acceder a toute la RAM en mode protege
ca m'avait permi de bien comprendre tous les mecanisme du mode protege (et de la compatibilite avec le mode reel)
 
ASSUME c'est pour eviter des embrouilles entre les divers segments en mode reel, et fonction des modeles memoires, tu peux avoir des problemes du genre faire un jump dans un endroit inaccessible (avec la valeur de CS actuelle)
mais il me semble que dans le cas d'un jmp far, ou tu precise la valeur de CS, ASSUME ne change rien
comme on change CS (jmp far), le saut est forcement correct
enfin bref je pense pas ke ASSUME ait qq chose a avoir la dedans
 
sinon : pourkoi t'utilises pas NASM ??? :??:


---------------
FAQ fclc++ - FAQ C++ - C++ FAQ Lite
n°70449
Ace17
Posté le 07-11-2001 à 19:58:06  profilanswer
 

Ben c'est une bonne question; En fait je me suis habitué a la syntaxe de Tasm. Tu penses que j'aurais vraiment intéret a passer a Nasm?

n°70456
Ace17
Posté le 07-11-2001 à 20:09:04  profilanswer
 

Bon je viens d'essayer jmp far 08h:[1000h]
Illegal Immediate qu'il me dit...
 
D'ailleurs je viens de récupérer un code source sur le net; apparament le gars a eu le meme probleme que moi et il a carrément fait une macro pour les jmp far
Qui revient a la syntaxe :
 
db EAh
dd 1000h
dw 08h
 
Peut etre qu'on peut pas le faire sous Tasm ce jmp....
Bizzare....
 
Ah oui je viens de virer le "codeseg" du début du code source
et de mettre des assume cs:nothing........
Y'a plein d'erreurs partout!!!! Je vais repasser au "codeseg"

n°70486
bjone
Insert booze to continue
Posté le 07-11-2001 à 21:36:37  profilanswer
 

a bin vi autant pour moa, je croyais que les regsitres de sélecteur contenait l'indice dans la table de descripteurs...
mais non, apparement, c'est bien l'offset :jap:

mood
Publicité
Posté le   profilanswer
 


Aller à :
Ajouter une réponse
  FORUM HardWare.fr
  Programmation

  [ASM] Comment faire un jmp qui modifie en meme temps cs et ip?

 

Sujets relatifs
rediriger un internaute apre sun temps d'inactivité an aspPHP : petite question...calculer le temps entre 2 dates...
Mesurer le temps de chargement d´une pageallocation dynamique memoire en ASM DOS ???
[ASM sous DOS] Créer un menu....[ASM] j'arrive pas à assembler memcpy optimisé pour amd:!
Appel à tous les programmeurs et infographistes qui ont du TEMPS[Flash] Comment déplacer un groupe d'image en meme temps....
[PHP] limite du temps d'execution[c/c++]Comment synchroniser sur le temps un programme
Plus de sujets relatifs à : [ASM] Comment faire un jmp qui modifie en meme temps cs et ip?


Copyright © 1997-2022 Hardware.fr SARL (Signaler un contenu illicite / Données personnelles) / Groupe LDLC / Shop HFR