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 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 191 192 193 194 195 196 197 198 199 200 201 202 203 204 205 206 207 208 209 210 211 212 213 214 215 216 217 218 219 220 221 222 223 224 225 226 227 228 229 230 231 232 233 234 235 236 237 238 239 240 241 242 243 244 245 246 247 248 249 250 251 252 253 254 255 256 257 258 259 260 261 262 263 264 265 266 267 268 269 270
| ;TP architecture des microprocesseurs X86 16bits
;Par Adrien Najaque
;Objectif: déroutement d'une interruption
DATA SEGMENT ;Déclaration des variables
mes1 db ' TP architecture des microprocesseurs X86 16bits',13,10,'$'
mes2 db ' par Adrien Najaque',13,10,'$'
mes3 db 'Veuillez inserer un numero d interruption :',13,10,'$'
mes4 db 'Deroutement effectue',13,10,'$'
mes5 db 'Appuyez sur ENTER pour proceder a la verification : ',13,10,'$'
mes6 db 'Verification termine avec succes',13,10,'$'
mes7 db 'Merci d avoir utilise mon programme a bientot'
mes8 db 'Echec de la vérification',13,10,'$'
sautln db 10,13,'$'
ch1 db 8 dup("$")
oldcs dw ?
oldip dw ?
newcs dw 2609h
newip dw 1988h
x dw ?
DATA ENDS ;Fin du data segment
CODE SEGMENT
assume cs:CODE, ds:DATA
;Procédure de saisie et de convertion de la chaine de caractères correspondant au numero d'intéruption
convertion proc near
push ax bx cx dx
mov ah,09h
lea dx,sautln
int 21h ;Affichage
mov ah,09h
lea dx,mes3
int 21h ;Affichage d'un message
mov ah,0ah
lea dx,ch1
int 21h ;L'utilisateur doit saisir un numero d'IT
xor cx,cx
xor si,si
mov si,1
mov cl,[ch1+si]
inc si
cmp cl,3
jz centaines
cmp cl,2
jz disaines
CMP cl,1
jz unites
unites: ;Dans ce cas le nombre saisi ne contient qu'un seul chiffre
xor ax,ax
xor bx,bx
mov si,2
mov al,[ch1+si]
sub al,30h
mov bl,1H
mul bl
mov bx,ax
jmp ending ;Sauter jusqu'à la fin de la procédure
disaines: ;Dans ce cas le nombre saisi contient 2 chiffres
xor ax,ax
xor bx,bx
xor cx,cx
mov si,2
mov al,[ch1+si]
sub al,30h
mov bl,10
mul bl
inc si
sub [ch1+si],30h
mov bx,ax
mov al,[ch1+si]
mov cl,1
mul cl
add bx,ax
jmp ending ;Sauter jusqu'à la fin de la procédure
centaines: ;Dans ce cas le nombre saisi contient 3 chiffres
xor ax,ax
xor bx,bx
xor cx,cx
xor dx,dx
mov si,2
mov al,[ch1+si]
sub al,30h
mov bl,100
mul bl
mov bx,ax
inc si
XOR ax,ax
mov al,[ch1+si]
sub al,30h
mov cl,10
mul cl
add bx,ax
inc si
xor ax,ax
mov al,[ch1+si]
sub aL,30H
mov dl,1
mul dl
add bx,ax
jmp ending ;Sauter jusqu'à la fin de la procédure
ending:
mov x,bx ;Copie du résultat de la convertion dans une variable
pop dx cx bx ax
ret
convertion endp ;Fin de la procédure
;Procédure de déroutement de l'IT
deroutement proc NEAR
push ax bx cx dx
mov ax,4
mul x
xor cx,cx
mov cx,ax
mov ax,0
mov ds,ax
mov bx,cx
mov ax,[bx]
mov oldip,ax
mov ax,[bx+2]
mov oldcs,ax
xor cx,cx
mov ax,data
mov ds,ax
mov cx,newip
mov [bx],cx
xor cx,cx
mov cx,newcs
mov [bx+2],cx
mov ah,09h
lea dx,mes4
int 21h ;affichage
pop dx cx bx ax
ret
deroutement endp
verif proc NEAR
push ax bx cx dx
mov ax,data
mov ds,ax
mov ah,09h
mov dx,offset mes5
int 21h ;affichage erreur
mov ax,4
mul x
MOV CX,AX
mov ax,0
mov ds,ax
mov bx,Cx
mov ax,[bx]
mov ax,data
mov ds,ax
cmp ax,oldip
jz vrip
jmp erreur
vrip:
mov cx,[bx+2]
cmp cx,oldcs
jz vrcs
jmp erreur
vrcs:
mov ah,09h
mov dx,offset mes6
int 21h ;affichage
jmp fin
erreur:
mov ah,09h
mov dx,offset mes8
int 21h ;affichage erreur
fin:
pop dx cx bx ax
ret
verif endp
;Programme principal
debut:
mov ax,data
mov ds,ax
mov cx,5
saut:
mov ah,09h
lea dx,sautln
int 21h ;Affichage
loop saut
mov ah,09h
lea dx,mes1
int 21h ;Affichage
mov ah,09h
lea dx,sautln
int 21h ;Affichage
mov ah,09h
lea dx,mes2
int 21h ;Affichage
call convertion
call deroutement
call verif
mov ax,data
mov ds,ax
mov ah,09h
lea dx,mes7
int 21h ;Affichage
mov ax,4c00h
int 21h
CODE ends
end debut
;Fin du programme |
Partager