CONNEXION
  • RetourJeux
    • Sorties
    • Hit Parade
    • Les + populaires
    • Les + attendus
    • Soluces
    • Tous les Jeux
    • Gaming
  • RetourActu Gaming
    • News
    • Astuces
    • Tests
    • Previews
    • Toute l'actu gaming
  • RetourBons plans
    • Bons plans
    • Bons plans Smartphone
    • Bons plans Hardware
    • Bons plans Image et Son
    • Bons plans Amazon
    • Bons plans Cdiscount
    • Bons plans Decathlon
    • Bons plans Fnac
    • Tous les Bons plans
  • RetourJVTech
    • Actus High-Tech
    • Intelligence Artificielle
    • Smartphones
    • Mobilité urbaine
    • Hardware
    • Image et son
    • Tutoriels
    • Tests produits High-Tech
    • Guides d'achat High-Tech
    • JVTech
  • RetourCulture
    • Actus Culture
    • Culture
  • RetourVidéos
    • A la une
    • Gaming Live
    • Vidéos Tests
    • Vidéos Previews
    • Gameplay
    • Trailers
    • Chroniques
    • Replay Web TV
    • Toutes les vidéos
  • RetourForums
    • Hardware PC
    • PS5
    • Switch 2
    • Xbox Series
    • Switch
    • Pokemon pocket
    • FC 25 Ultimate Team
    • League of Legends
    • Tous les Forums
  • PC
  • PS5
  • Xbox Series
  • Switch 2
  • PS4
  • One
  • Switch
  • iOS
  • Android
  • MMO
  • RPG
  • FPS
En ce moment Genshin Impact Valhalla Breath of the wild Animal Crossing GTA 5 Red dead 2
Liste des sujets

Fonction 3Dh

roger_barry
roger_barry
Niveau 10
27 octobre 2005 à 03:28:21

Bonjour, j´ai un problème en assembleur. En fait je suis sur que c´est une erreur stupide mais cela fais quelque jour que je tente de faire marcher mon programme et rien ne marche.

Comme vous l´avez surement deviner j´ai de la difficulté avec la fonction 4Dh de l´interruption 21h. Je vérifier des centaines de fois mon code et je ne trouve aucune erreur. Je vous met le code:

.386

;* ** Segment de code ***
code segment use16
assume cs:code, ds:data, ss:pile

;* ** Fichiers inclus ***
include moteur.txt

;* ** Programme principal ***
prog:

mov ax, data
mov ds, ax

mov ax, 0A000h
mov es, ax

xor ax, ax
mov al, 13h
int 10h

mov bx, offset chemin
mov cx, 10
mov dx, 10
mov di, 0
call dessin

xor ax, ax
int 16h

erreur:

mov ah, 4Ch
int 21h

code ends

;* ** Segment de données ***
data segment use16

chemin db "test.inc", 0
buffer db 3 DUP (?)

data ends

;* ** Segment de pile ***
pile segment stack use16
db 256 DUP (?)
pile ends

end prog

Le programme contient un fichier nommé moteur, le voici:

;* ** Générateur de graphismes ***
dessin proc near

mov cs:[longueur], cx
push dx

mov ax, 3D00h
mov dx, bx
int 21h
jc erreur

mov cs:[handle], ax
pop dx

start:

push cx
push dx

mov ah, 42h
mov al, 0
mov bx, cs:[handle]
mov cx, 0
mov dx, cs:[position]
int 21h

mov ah, 3Fh
mov al, 0
mov bx, cs:[handle]
mov cx, 3
mov dx, offset buffer
int 21h

mov bx, offset buffer
xor si, si

mov cl, [bx+si]
shr cl, 2
inc si
mov ch, [bx+si]
shr ch, 2
inc si
mov dh, [bx+si]
shr dh, 2

cmp dh, 63
jne suite_moteur
cmp ch, 63
jne suite_moteur
cmp cl, 63
jne suite_moteur

pop dx
pop cx
jmp blanc

suite_moteur:

mov ax, 1010h
mov bh, 0
mov bl, cs:[tempo]
inc cs:[tempo]
int 10h

pop dx
pop cx

mov es:[di], bl

blanc:

add cs:[position], 3
inc di
dec cx
cmp cx, 0
jne start

mov cx, cs:[longueur]
add di, 320
sub di, cs:[longueur]
dec dx
cmp dx, 0
jne start

mov ah, 3Eh
mov bx, cs:[handle]
int 21h

mov cs:[position], 54

ret

tempo db 0
longueur dw 0
handle dw 0
position dw 74

dessin endp

Ce code est sencé faire apparaitre une image transformer en donnée qui est le fameux "test.inc" . Le problème me vien de la fonction 4Dh qui fais une erreur 5, cette erreur c´est "accès refusé". Donc j´ai tenter de mettre 66 dans al a la place de 0 pour me donner la permission mais il me met encore l´erreur dans ax. Quelqun connait mon erreur ?

P.S. Ceci est un programme .exe sous tasm en 16 bits.

nemesis
nemesis
Niveau 10
27 octobre 2005 à 03:33:11

facile pfff :sarcastic:

KaZzou
KaZzou
Niveau 10
27 octobre 2005 à 03:36:16

Jeu d´enfant même. J´ai trouvé l´erreur d´un seul coup d´oeil. Hey, non mais... :sarcastic:

Vive_le_Rock22
Vive_le_Rock22
Niveau 5
27 octobre 2005 à 03:37:56

C tellemen facile qu´un enfan de 5 ans pourrai trouver ca tou seul franchemen reflechi! :sarcastic:

godrik
godrik
Niveau 30
27 octobre 2005 à 12:56:24

mon dieu, il y a encore des gens qui font de l´assembleur sur x86.

roger_barry
roger_barry
Niveau 10
27 octobre 2005 à 22:05:53

Ouais y´a encore des gens qui font sa, jaime pas les langage haut niveau comme C++.
Mais bon, personne ne peux m´aider ? :-(

godrik
godrik
Niveau 30
27 octobre 2005 à 22:17:24

heu.... le C++ c´est un langage bas niveau! :)
et pourquoi tu n´aime que l´assembleur ?

roger_barry
roger_barry
Niveau 10
27 octobre 2005 à 22:30:50

Désolé de te l´apprendre mais le C++ est un langage de haut niveau :p)

godrik
godrik
Niveau 30
28 octobre 2005 à 00:34:36

un langage donnant aces a la mémoire de la machine ne peut pas etre un langage de haut niveau.

Kelios
Kelios
Niveau 8
28 octobre 2005 à 01:48:12

"un langage donnant aces a la mémoire de la machine ne peut pas etre un langage de haut niveau. " -> Ah bon? Sous quel prétexte? Je rejoins ici Roger: le C++, c´est du haut niveau. On peut hésiter avec le C, se dire, est-ce haut, est-ce bas? Compilo certes, mais c,est si proche de la machine, ect., bref, là, hésitation, questionnement: rien de ça avec le C++, de la POO avec runtime environment nécessaire: si ça sonne pas haut level ça, je vois pas ce que c´est.

Bon. Voyons voir ça. Ohoh. Un paquet de code. Chouette. Euh, pas pour être méchant, mais ça serait ptêt gentil de nous mettre un petit peu en contexte, c´est dur sinon :/
Secundo, c´est 21h-3Dh ou 21h-4Dh qui pose problème? Je présume 3Dh...

Tu parles d´ici?
"
mov cs:[longueur], cx
push dx

mov ax, 3D00h
mov dx, bx
int 21h
jc erreur

mov cs:[handle], ax
pop dx
"
Bon, sans contexte, je vois mal. Déjà, ça serait intéressant de nous indiquer:
-Quel est le but du programme (si c,est un projet ultra-secret de la nasa fait conjointement avec une organisation terroriste dont le but est le rétablissement de l´union soviétique, pas obligé de rentrer dans les détails ultra-secrets, mais au moins nous indiquer à quoi sert le bout de code)
-Quels sont les signes apparents de bugs. Qu´il y a-t-il d´anormal?
-Tu as passé tout ça avec un déboggeur je présume? Où est-ce que ça bugge? Les valeurs dans les registres et dans tes variables sont-ils ce à quoi tu pourrais t´attendre à ce point dans le programme?
-C´est du 16 bits sous Windows je présume? Quel assembleur? (Ça il faudrait toujours fournir ça, je trouve. Tant de gens oublient!)

Voilà, ça pourrait déjà beaucoup éclairer je crois. Disons que d´ici, je crois qu´on n´arriveras pas à trouver le bug pour toi, mais au moins on pourra t´aiguiller sur des pistes que tu aurais pu oublier, c´est le mieux qu´on risque de pouvoir faire.

Enfin bref. Content de voir de l´assembleur.

Kelios
---------

dnob700
dnob700
Niveau 10
28 octobre 2005 à 02:05:35

Kelios, le plus interessant dans un post c´est toujours les 5 dernières lignes...

roger_barry
roger_barry
Niveau 10
28 octobre 2005 à 02:12:39

Oui kelios, tu aurait du regarder un peu la fin de mon message, j´explique le contexte et les erreurs de mon programme ^^

roger_barry
roger_barry
Niveau 10
28 octobre 2005 à 02:13:24

Oops par contre je parle de la fonction 3Dh, j´ai fais une erreur, je me trompe toujour entre ces deux fonction !

Kelios
Kelios
Niveau 8
28 octobre 2005 à 05:11:30

Ah ben cré don´ me suis fait avoir. Désolé pour tout, j´ai du sauter sans le voir. Mes excuses.

J´ai pas trop le temps de regarder ça ce soir, mais je me demande si ça vient vraiment de ton code.

Je vais essayer quelques trucs demain. Je vois mal ce que ça pourrait être: ptêt que ton fichier est déjà ouvert par un autre programme, qui refuse sa réouverture? Je sais pas trop...

Kelios
---------

roger_barry
roger_barry
Niveau 10
29 octobre 2005 à 00:04:51

J´ai essayer tout les moyens possible et je ne voit pas d´ou sa pourrait venir d´autre que de mon code. J´ai testé cette même fonction dans d´autres de mes programme et elle marchait très bien.
Je vais essayer d´autres tests ...

tomtomclancy
tomtomclancy
Niveau 9
29 octobre 2005 à 03:14:58

Desolé je repond pas a ta question, mais au deux qui se battent pour savoir si le C++ est un langage haut niveau ou bas niveau.

Le C++ est effectivement un langage haut niveau.

Le langages bas niveau (langage machine) "0-1".
Langage de moyen niveau (assembleur)
Et les langages haut niveau qui sont tout les langage demandant compilation-interpretation.

Et puis verifiez ca coute rien
Google est votre ami.

roger_barry
roger_barry
Niveau 10
29 octobre 2005 à 03:49:44

Désolé de te contredire Tomtom, mais l´assembleur c´est completement du bas niveau, en fait c´est la version lisible du langage machine.

Kelios
Kelios
Niveau 8
29 octobre 2005 à 05:33:19

Hmmm bon j´ai testé quelques trucs, mais à toutes les fois il arrivait à lire test.inc

Néanmoins, c´était testé sous nasm, et uniquement avec une partie du code (le début, le reste ´me disant que ça aurait aucune influence).

Bon. Ce qu´on peut faire: tu m´envoies l´exe par quelque moyen que ce soit (e-mail si tu veux: juste penser à renommer ton exe en .cequetuveux), avec ton test.inc et ptêt autre chose qui serait utile pour tester en runtime.

Je teste pour voir si le bug tient toujours sur ma machine: et si c´est le cas (ce qui risque d´arriver si ça vient effectivement du code), je passe ça au désassembleur, et j´essaie de trouver ce qui peut clocher. En gros je déboggue de mon côté. Mais je promets rien :-)))

Si quelqu´un a une meilleure idée je suis ouvert, parce que c´est pas très efficace (mais bon!). J´ai laissé mon e-mail sur mon nick, de toute façon.

Kelios
---------

godrik
godrik
Niveau 30
30 octobre 2005 à 11:05:48

pour moi au niveau, c´est un langage indépendant de la machine sur la quel il tourne et qui abstrait la machine sur laquel il tourne.
en C, la taille de tes données dépendent de la machine utilisé, ce n´est donc a mon sens pas un langage de haut niveau.
sinon, je suis d´accord roger, langage machine et assembleur sont directement équivalent.

tomtomclancy
tomtomclancy
Niveau 9
30 octobre 2005 à 13:00:58

Bon, si vous le dites, c´est pas moi que vous contredites mais directement les info trouvé sur le net.

godrik >> "en C, la taille de tes données dépendent de la machine utilisé"
tu entends quoi par la. ?
La taille de l´exe apres compilation ?

Sous forums
  • Aide à l'achat Mac
  • Macintosh
  • Création de sites web
  • Création de Jeux
  • Linux
  • Programmation
  • Internet
  • Steam Deck
  • Hardware
La vidéo du moment