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 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159
| ;****************************************************************
;* utilisations des directives d'assemblage *
;****************************************************************
name direct
.MODEL SMALL
;******************************************
;* zone de pile *
;******************************************
.STACK 100h
;******************************************
;* zone de données *
;******************************************
.DATA
i dw ?
j dw ?
k dw ?
rr db ?
compt dw 1
resul dw 10 dup(?)
MIN EQU 100
MAX EQU 200
; La chaîne de caractère à imprimer à l'écran
affnb DB ' ','$'
un DW 1
dix DW 10
CALL imprnb
;******************************************
;* zone de code *
;******************************************
affresul DB ' ','$'
.code
;affectation de l'adresse de début du code dans ds
;************************************************
;* zone de macro(segment de code) *
;************************************************
;à faire
operation macro d1,d2,d3
mov ax,2*d1+3*(d2+d3)
endm
;************************************************
;* point d'entrée *
;************************************************
DEBUT:
operation n1,n2,n3
MOV AH,04CH
INT 21H
main endp
imprnb proc
MOV BX,offset affnb ; Je lui passe une chaine de 3 caracteres
ADD BX,2 ; J'ai 3 chiffre mais j'avance de 2 pour pas ecraser le caractere de fin de chaine '$'
MOV AX,nb ; Je recupere le nb dans AX
MOV CX,3 ; CX sert de compteur pour la boucle
@@chiffreSuivant:
PUSH CX
MUL un ; Je multiplie AX par 1 pour eviter les divisions pas 0
DIV dix ; Je divise AX par 10 pour recuper le chiffre dans DL
ADD DL,48 ; J'additionne 48 au chiffre pour avoir le code ascii
MOV [BX],DL ; Je deplace la reponse dans la chaine
DEC BX ; Je me deplace dans la chaine
POP CX
LOOP @@chiffreSuivant
; J'affiche a l'ecran la chaine qui contient le score
MOV AH,09h
MOV DX,offset affnb
INT 21h
RET
imprnb endp
;*********déclaration des types
;à faire
n1=type i
n2=type j
n3=type k
EX1=type rr
EX2=type rr
;*********initialisations
; à faire
n1=0
n2=0
n3=0
;************************************************
; boucle de 4 itérations de la macro *
;************************************************
;à faire
REPT 4
operation n1,n2,n3
mov resul,ax
n1=n1+1
n2=n2+2
n3=n3+3
ENDM
;************************************************
; la détection du moment ou la différence *
; est minimale *
;************************************************
;à faire
WHILE (EX1-EX2) GT 10
EX2=EX2+1
INC compt
mov bx,compt
ENDM
;*****************************************
; fin
;*****************************************
mov ax,4c00h ; terminaison du programme
int 21h
end DEBUT |
Partager