IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Assembleur Discussion :

[Débutant] Créer une addition


Sujet :

Assembleur

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre Expert
    Avatar de ArHacKnIdE
    Profil pro
    Inscrit en
    Janvier 2006
    Messages
    1 947
    Détails du profil
    Informations personnelles :
    Localisation : France, Gard (Languedoc Roussillon)

    Informations forums :
    Inscription : Janvier 2006
    Messages : 1 947
    Par défaut [Débutant] Créer une addition
    Bonjour à Tous,

    Voilà, ayant les bases de mon système d'exploitation, mon .asm transformé en .bin mis dans le secteur boot d'une disquette

    Je souheterai faire mon premier calcul au sein de mon OS

    Comment faire pour insérer un calcul, genre 3+3=6, il peut y avoir différentes manières... ?

    Voici mon code de base de mon OS(hum) :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    89
    90
    91
    92
    93
    94
    95
    96
    97
    98
    99
    100
    101
    102
    103
    [BITS 16]
    [ORG 0]
    jmp start
     
    bootdrv         db 0
    bootmsg         db 'boot loader !!!',13,10,0
    rebootmsg		db 'Redemarrage...',13,10,0
     
    processormsg    db 'Checking for 386+ processor : ',0
    need386         db 'Sorry... 386+ required !',13,10,0
    found386        db 'Found!',13,10,0
    whatever        db 'Long life!', 13,10,0
     
     
    detect_cpu:
    mov si, processormsg
    call message
     
    pushf
     
    xor ah,ah
     
    push ax
    popf
     
    pushf
    and ah, 0F0h
    cmp ah, 0F0h
    je no386
     
    mov ah, 0F0h
    push ax
    popf
     
    pushf
    pop ax
    and ah,0F0h
    jz no386
    popf
     
    mov si, found386
    call message
     
    ret
     
    no386 :
    mov si, need386
    call message
    jmp reboot
     
     
    message :
     
    lodsb
    or al,al
    jz done
    mov ah,0Eh
    mov bx,0007
    int 10h
    jmp message
    done:
    ret
     
    getkey:
     
    mov ah, 0
    int 16h
    ret
     
    reboot:
    mov si, rebootmsg
    call message
    call getkey
     
    db 0EAh
    dw 0000h
    dw 0FFFFh
     
    start:
    mov ax,07C0h
    mov ds,ax
    mov [bootdrv], dl
    cli
     
    mov ax,9000h
    mov ss,ax
    mov sp,0FFFFh
    sti
    mov si,bootmsg
    call message
     
    call detect_cpu
     
    .386
     
    mov si,whatever
     
    call message
    call getkey
    call reboot
     
    times 510-($-$$) db 0
    dw 0xAA55
    Et n'oubliez, je suis debutant.

    Merci.

    PS : Le code n'est pas de moi mais qqun pourrai me detailler ce qu'il fait ?
    Parcequ'on dirait qu'il me fait qqchose en double quand je l'execute...

  2. #2
    Membre éprouvé

    Inscrit en
    Juin 2004
    Messages
    1 397
    Détails du profil
    Informations forums :
    Inscription : Juin 2004
    Messages : 1 397
    Par défaut
    Eh bien, apparement c'est du x86, donc add me semble très bien.

  3. #3
    Membre Expert
    Avatar de ArHacKnIdE
    Profil pro
    Inscrit en
    Janvier 2006
    Messages
    1 947
    Détails du profil
    Informations personnelles :
    Localisation : France, Gard (Languedoc Roussillon)

    Informations forums :
    Inscription : Janvier 2006
    Messages : 1 947
    Par défaut
    Je suis vraiment au plus bas de l'echelle

    Ou et comment je fais mon ADD ?

    Comme ça :

    ADD 3+3

    Et comment afficher le resultat

    Merci

  4. #4
    Membre éprouvé

    Inscrit en
    Juin 2004
    Messages
    1 397
    Détails du profil
    Informations forums :
    Inscription : Juin 2004
    Messages : 1 397
    Par défaut
    Regarde au moins les mnémoniques assembleur quand même...
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    mov bx,3
    mov ax,3
    add ax,bx
    Par exemple

  5. #5
    Membre émérite
    Profil pro
    Inscrit en
    Octobre 2004
    Messages
    633
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2004
    Messages : 633
    Par défaut
    Bonjour,
    Citation Envoyé par ArHacKnIdE
    Je souheterai faire mon premier calcul au sein de mon OS

    Comment faire pour insérer un calcul, genre 3+3=6, il peut y avoir différentes manières... ?

    Et n'oubliez, je suis debutant.

    ...

    Je suis vraiment au plus bas de l'echelle
    Vu tes questions, je pense qu'il est un peu (!!) présomptueux de te lancer dans l'écriture d'un OS.

    Quand on a besoin de demander comment faire une addition, c'est à dire qu'on ne connaît pas les instructions permettant de le faire, sans même parler de comment afficher le résultat, c'est qu'il faut prendre à la base.

    Commence plutôt par faire de petits programmes séparés, et apprendre les instructions de ton processeur.

  6. #6
    Membre Expert
    Avatar de ArHacKnIdE
    Profil pro
    Inscrit en
    Janvier 2006
    Messages
    1 947
    Détails du profil
    Informations personnelles :
    Localisation : France, Gard (Languedoc Roussillon)

    Informations forums :
    Inscription : Janvier 2006
    Messages : 1 947
    Par défaut
    Merci pour ta réponse,

    C'est ce que je compte faire, mon "OS" c'est en fait un code que j'ai pris sur http://www.thehackademy.com et qui explique egalement comment le
    mettre sur le boot sector(je crois) d'une disquette.

    J'ai nasm, mais je ne sais même pas faire un petit programme en fait, ni même le compiler, mais sur internet, tous les tutos sont "dur"

    Merci à vous.

  7. #7
    Membre éprouvé

    Inscrit en
    Juin 2004
    Messages
    1 397
    Détails du profil
    Informations forums :
    Inscription : Juin 2004
    Messages : 1 397
    Par défaut
    Ce tuto là :
    http://beuss.developpez.com/tutoriels/pcasm/
    Est difficile ??
    Tu as quelle formation, car si ça tu trouves ça dur, accroches-toi, c'est pas fini.
    Je suis moi-même dur, mais il faut te faire une raison, l'assembleur est proche de la machine, c'est donc fondamentalement plus complexe que le C ou un autre langage.

  8. #8
    Rédacteur
    Avatar de Neitsa
    Homme Profil pro
    Chercheur sécurité informatique
    Inscrit en
    Octobre 2003
    Messages
    1 041
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Chercheur sécurité informatique

    Informations forums :
    Inscription : Octobre 2003
    Messages : 1 041
    Par défaut
    Rendons à César ce qui lui appartient :

    Ce code (sous Copyright !) est extrait d'un code source de Jeff Weeks pour le mini OS "PolyOS". Dans sa version originale, le code a le mérite d'être commenté !

    http://www.nondot.org/sabre/os/files...ng/PolyOS.html

    En ce qui concerne l'OsDev voir la page de Paul Hsieh :

    http://www.azillionmonkeys.com/qed/os.html

    Et la page d'OSRC :

    http://www.azillionmonkeys.com/qed/os.html

    Je rejoidnrais ProgFou en ce qui concerne l'OSDev quand on ne sait pas encore faire une addition, c'est un peu mettre la charrue avant les boeufs.

    Pour commencer en asm, voir la page (notamment les liens en fin de page) de wikipedia (en) :

    http://en.wikipedia.org/wiki/Assembly_language

    Pour les tutoriaux, l'AOA (Art Of Assembly) est très complet et disponible On-line : http://webster.cs.ucr.edu/AoA/index.html

    Les tutoriaux (interactifs) proposés avec Rosasm sont vraiment bien fait :
    http://rosasm.org/

    Finalement, les manuels Intel proposent non seulement le jeu d'instruction des CPUs IA32 X86 au complet mais beaucoup plus encore, absolument à possèder :

    http://www.intel.com/design/Pentium4...on.htm#manuals

  9. #9
    Membre Expert
    Avatar de ArHacKnIdE
    Profil pro
    Inscrit en
    Janvier 2006
    Messages
    1 947
    Détails du profil
    Informations personnelles :
    Localisation : France, Gard (Languedoc Roussillon)

    Informations forums :
    Inscription : Janvier 2006
    Messages : 1 947
    Par défaut
    Merci bcp mais tout ça et de l'anglais et l'assembleur du chinois

    Ce que je cherche moi c'est surtout des codes par exemple qui écrivent "bonjour", qui font une addition... Mais je ne trouve pas sur le net

    Merci

  10. #10
    Responsable Pascal, Lazarus et Assembleur


    Avatar de Alcatîz
    Homme Profil pro
    Ressources humaines
    Inscrit en
    Mars 2003
    Messages
    8 055
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 58
    Localisation : Belgique

    Informations professionnelles :
    Activité : Ressources humaines
    Secteur : Service public

    Informations forums :
    Inscription : Mars 2003
    Messages : 8 055
    Billets dans le blog
    2
    Par défaut
    Bonjour !

    Le sujet de la conversion d'un nombre en chaîne a déjà été abondamment traité. Une petite recherche donne (entre autres) ceci :
    http://www.developpez.net/forums/showthread.php?t=3450
    Règles du forum
    Cours et tutoriels Pascal, Delphi, Lazarus et Assembleur
    Avant de poser une question, consultez les FAQ Pascal, Delphi, Lazarus et Assembleur
    Mes tutoriels et sources Pascal

    Le problème en ce bas monde est que les imbéciles sont sûrs d'eux et fiers comme des coqs de basse cour, alors que les gens intelligents sont emplis de doute. [Bertrand Russell]
    La tolérance atteindra un tel niveau que les personnes intelligentes seront interdites de toute réflexion afin de ne pas offenser les imbéciles. [Fiodor Mikhaïlovitch Dostoïevski]

  11. #11
    Membre Expert
    Avatar de ArHacKnIdE
    Profil pro
    Inscrit en
    Janvier 2006
    Messages
    1 947
    Détails du profil
    Informations personnelles :
    Localisation : France, Gard (Languedoc Roussillon)

    Informations forums :
    Inscription : Janvier 2006
    Messages : 1 947
    Par défaut
    Merci !!! J'ai Compris !!!

    En fait, c'est juste une "astuce" mais il n'y a pas vraiment de moyen de travailler avec les chiffres... enfin...

    J'ai donc fait ce code

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    mov bx,48
    mov ax,3
    mov dx,3
    add dx,ax
    add dx,bx
    mov ah,2
    int 21h
    Ca marche... mais est-ce correct ?

    Et pourquoi le 30h alors

    Mille Mercis à Tous pour cette maginifique (laborieuse pour vous) discussion ^^

    PS : M'a fallu 3 pages pour comprendre mais je suis encore preneur d'explications... Je met en résolu mais vous pouvez toujours faire un petit comment, je surveillerai

  12. #12
    Membre éprouvé

    Inscrit en
    Juin 2004
    Messages
    1 397
    Détails du profil
    Informations forums :
    Inscription : Juin 2004
    Messages : 1 397
    Par défaut
    30h => hexadécimal.
    C'est un minimum quand on veut faire de l'assembleur que de savoir jongler entre décimal, binaire et hexa.
    Je ne t'expliquerais pas ça, il y a suffisament de sites/livres qui en parlent.

  13. #13
    Membre Expert
    Avatar de ArHacKnIdE
    Profil pro
    Inscrit en
    Janvier 2006
    Messages
    1 947
    Détails du profil
    Informations personnelles :
    Localisation : France, Gard (Languedoc Roussillon)

    Informations forums :
    Inscription : Janvier 2006
    Messages : 1 947
    Par défaut
    Okay Merci ça je peux me débrouiller...

    Mais la question que je me pose c'est :

    L'assembleur va bien reconnaitre 30h et 48 comme la même chose ou il faut faire une autre petite modif qqpart ?

    J'aurai pu mettre 30h à la place de mon 48 ?

    Merci

  14. #14
    Membre éprouvé

    Inscrit en
    Juin 2004
    Messages
    1 397
    Détails du profil
    Informations forums :
    Inscription : Juin 2004
    Messages : 1 397
    Par défaut
    Oui, tu peux.
    Tu peux même écrire en binaire (mais c'est rare). L'hexa est le plus fréquent.

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. [Débutant] Créer une page HTML qui valide des attributs
    Par sebpsi dans le forum Général JavaScript
    Réponses: 1
    Dernier message: 01/03/2007, 12h30
  2. [Débutant] Créer une fenêtre windows
    Par frizou11 dans le forum Visual C++
    Réponses: 7
    Dernier message: 13/02/2007, 16h47
  3. [Débutant] Créer une application
    Par a2bfango dans le forum Delphi
    Réponses: 12
    Dernier message: 13/02/2007, 10h32
  4. [Débutant] Créer une instance avec le nom d'une classe
    Par Quetzalcoatl dans le forum Langage
    Réponses: 7
    Dernier message: 23/01/2006, 20h43

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo