Programme écrit en assembleur

spoonatte Messages postés 85 Statut Membre -  
spoonatte Messages postés 85 Statut Membre -
Bonjour,

j'ai un problème avec un programme écrit en assembleur (qui trouver le nombre des 1 dans une variable) , quand je veux afficher une variable (R dans mon programme), il ne fait rien, c'est le code source :

.MODEL SMALL
.STACK 100H
.DATA
D1 DW 0A8D1H
R DW ?
pkey db 0dh,0ah,'Press any key to continue$'
.CODE
MAIN PROC
; set segment registers:
mov ax, @data
mov ds, ax
mov es, ax

MOV DX ,16D ; Rotation 16 fois
XOR AX,AX ;Mettre AX a 0
MOV BX,D1
Tp: ROL BX,1 ; Rotation a gauche
JNC NEXT ; Test si CF=0
INC AX ; Si CF = 1, incrémenter AX de `1'
NEXT: DEC DX ; répéter 16 fois
JNZ Tp ; encore une fois si ce n'est pas fini
MOV R,AX ; sauvegarder le résultat dans la case mémoire R

;Afichage de R
mov dx,R
mov ah,9
int 21h

lea dx, pkey
mov ah, 9
int 21h ; output string at ds:dx

; wait for any key.... 
mov ah, 1
int 21h

mov ax, 4c00h ; exit to operating system.
int 21h 

MAIN ENDP
END MAIN


2 réponses

  1. jisisv Messages postés 3678 Statut Modérateur 936
     
    Ton programme tient la route, MAIS
    la fonction 9h du DOS affiche une chaine terminée par un '$'

    En aucun cas ceci n'affichera la valeur décimale du double-mot R.
    Tu dois écrire une procédure qui calcule en boucle la division de sx par 10 et afficher le caractère ASCII correspondant: tu peux t'inspirer de ceci
    https://www.daniweb.com/digital-media/ui-ux-design/threads/17429/shipping-by-quantity
    Lit tout l'article !
    Même du temps du DOS pur, les fonctions que tu utilises pour l'affichage étaient dépassées !
    Pour écrire une chaîne, utilise la fonction 40h de l'interruption DOS 21h.
    Regarde ici par exemple: DOS_interruts
    Gates gave ^H sold you the windows.
    GNU gave us the whole house.(Alexandrin)
    0
    1. spoonatte Messages postés 85 Statut Membre
       
      Merci, Mais nous n'avons pas étudié les procédures et le premier lien ne marche pas et quand j'ai employé 40H au lieu de 09H il me donne cette erreur :
      FCB unavailable
      Abort, Fail ?
      0
    2. jisisv Messages postés 3678 Statut Modérateur 936
       
      As-tu parcouru le document PDF:
      <cut>
      AH=40h - "WRITE" - WRITE TO FILE OR DEVICE
      Entry:

      BX = file handle
      CX = number of bytes to write
      DS:DX -> data to write
      Return:

      CF clear if successful -AX = number of bytes actually written
      CF set on error - AX = error code (05h,06h)
      </cut>

      Si bx=1 : sortie standard
      si bx=2 : erreur standard
      0
    3. spoonatte Messages postés 85 Statut Membre
       
      désolé mai j'ai rien compris, nous venons seulement d'étudier cinq fonctions : 1H,2H,7h,9h et 4CH
      0
  2. spoonatte Messages postés 85 Statut Membre
     
    quelqu'un peut m'aider, s'il vous plaît?
    0