- L'adresse physique/effective de l'adresse xxxx:yyyy octet est calculer par la formule suivante :
Adresse physique = xxxx x 16 + yyyy
Informatique Appliquée
Fillière Intelligence Artificielle
Hiver 2025
Ali El HourchSemestres
Hiver 2025Tronc Communs
Informatique AppliquéeAdresse physique = xxxx x 16 + yyyy
Adresse physique = segment x 16 + offset
Adresse physique = 0 x 16 + 42 = 42)16 = 66)10
66 = 3 x 16 + offset ⇒ offset = 18)10 = 12)16
66 = 4 x 16 + offset ⇒ offset = 2)10 = 2)16
f 073F:0100 0400 00
e 073F:0100 "SMIS4"
d 0100
data SEGMENT msg_entrer DB "Pour terminer, tapez dollar. Saisir un caractère : ",'$' ; Message d'invite pour entrer un caractère msg_lu DB "Caractere lu est : ",'$' ; Message affiché après lecture data ENDS code SEGMENT ASSUME DS:data, CS:code debut: ; Initialiser le segment de données MOV AX, data MOV DS, AX boucle: ; Afficher le message d'invite MOV DX, offset msg_entrer MOV AH, 09h INT 21h ; Lire un caractère de l'utilisateur MOV AH, 01h INT 21h MOV BL, AL ; Sauvegarder le caractère lu dans BL ; Ajouter un saut de ligne MOV DL, 0Ah MOV AH, 02h INT 21h ; Vérifier si le caractère est '$' CMP BL, '$' JE fin ; Quitter si c'est '$' ; Afficher le message "Caractère lu" MOV DX, offset msg_lu MOV AH, 09h INT 21h ; Afficher le caractère lu MOV DL, BL MOV AH, 02h INT 21h ; Ajouter un saut de ligne MOV DL, 0Ah MOV AH, 02h INT 21h JMP boucle ; Répéter fin: ; Fin du programme MOV AH, 4Ch INT 21h code ENDS END debut
data SEGMENT msg_entrer DB "Veuillez vous entrer un caractere majuscule? 'O' si oui : ",'$' ; Message d'invite msg_maj DB "Caractere majuscule : ",'$' ; Message pour majuscule msg_min DB "Caractere miniscule : ",'$' ; Message pour minuscule data ENDS code SEGMENT ASSUME DS:data, CS:code debut: ; Initialiser le segment de données MOV AX, data MOV DS, AX boucle: ; Afficher le message d'invite MOV DX, offset msg_entrer MOV AH, 09h INT 21h ; Lire le caractère CALL lire_caractere ; Ajouter un saut de ligne MOV DL, 0Ah MOV AH, 02h INT 21h ; Vérifier si le caractère est 'O' AND BL, 11011111b CMP BL, 'O' JNE fin ; Afficher le message pour majuscule MOV DX, offset msg_maj MOV AH, 09h INT 21h ; Lire un autre caractère CALL lire_caractere ; Ajouter un saut de ligne MOV DL, 0Ah MOV AH, 02H INT 21H ; Convertir le caractère en minuscule CALL converti_caractere ; Afficher le message pour minuscule MOV DX, offset msg_min MOV AH, 09h INT 21h ; Afficher le caractère converti MOV DL, BL MOV AH, 02H INT 21H ; Ajouter un saut de ligne MOV DL, 0AH MOV AH, 02H INT 21H JMP boucle ; Répéter fin: ; Fin du programme MOV AH, 4Ch INT 21h lire_caractere PROC NEAR ; Lire un caractère et le sauvegarder dans BL MOV AH, 01H INT 21H MOV BL, AL RET lire_caractere ENDP converti_caractere PROC NEAR ; Convertir le caractère en minuscule OR BL, 00100000b RET converti_caractere ENDP code ENDS END debut
data SEGMENT msg_chaine DB "Entrer une chaine : ",'$' ; Message pour entrer une chaîne msg_caractere DB "Saisir un caractere miniscule : ",'$' ; Message pour entrer un caractère minuscule chaine DB 20 dup('?'),'$' ; Réservation pour la chaîne data ENDS code SEGMENT ASSUME DS:data, CS:code debut: ; Initialiser le segment de données MOV AX, data MOV DS, AX ; Afficher le message pour entrer une chaîne MOV DX, offset msg_chaine MOV AH, 09h INT 21h ; Lire la chaîne MOV DX, offset chaine MOV AH, 0Ah INT 21h ; Ajouter un saut de ligne MOV DL, 0Ah MOV AH, 02h INT 21H ; Afficher le message pour entrer un caractère MOV DX, offset msg_caractere MOV AH, 09H INT 21H ; Lire le caractère à rechercher MOV AH, 01H INT 21H MOV CL, AL ; Ajouter un saut de ligne MOV DL, 0Ah MOV AH, 02H INT 21H ; Parcourir la chaîne MOV BX, offset chaine boucle: ; Lire un caractère de la chaîne MOV AL, [BX] CMP AL, '$' JE fin ; Comparer avec le caractère entré CMP CL, AL JE convertit INC BX JMP boucle convertit: ; Convertir le caractère en majuscule AND CL, 11011111b MOV [BX], CL INC BX JMP boucle fin: ; Fin du programme MOV AH, 4Ch INT 21h code ENDS END debut