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

jisisv Messages postés 3678 Statut Modérateur 935
 
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
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
jisisv Messages postés 3678 Statut Modérateur 935
 
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
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
spoonatte Messages postés 85 Statut Membre
 
quelqu'un peut m'aider, s'il vous plaît?
0