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
| data segment ;data est le nom du segment de données
TAB1 DB 8 DUP(?)
TAB2 DB 8 DUP(?)
TAB DB 8 dup(?)
mes2 DB ' faite entrer un nombre en binaire :$'
mes1 DB ' faite entrer un nombre en binaire:$'
mes DB 'voici votre resultat:$'
mes3 DB 'le contenue de CF :1',' $'
mes4 DB 'le contenue de CF :0',' $'
mes7 DB 'le contenue de OF :1',' $'
mes6 DB 'le contenue de OF :0',' $'
mes11 DB 'cette operation est non autoriser car le resultat est depace lecapacite:OF=1 & CF=1$'
data ends ;fin du segment de données
CODE SEGMENT
ASSUME DS:DATA
ASSUME CS:CODE
ASSUME SS:seg_pile
LEC PROC near
MOV CX,8
MOV AH,01H
Q2: INT 21H
CMP AL,48
JE Q1
CMP AL,49
JE Q1
JMP Q2
Q1: AND AL,00000001b
MOV byte ptr [BX],AL
INC BX
LOOP Q2
RET
LEC ENDP
ECR PROC near
MOV DX,offset M4
MOV AH,09H
INT 21H
MOV CX,0
S1: MOV byte ptr AL,[BX]
XOR AL,00110000b
MOV DL,AL
MOV AH,02H
INT 21H
INC BX
INC CX
CMP CX,8
JNE S1
RET
ECR ENDP
affichage proc near
mov Dx , offset mes
mov ah , 09h
int 21h
mov di,offset tab ;cette procedur afficher
mov ah , 09h ;le resultat d'addition
int 21h
ret
affichage endp
debut: mov ax , DATA
mov DS , ax
call lecture
mov ah,00h ;met AH a zero***/
mov cx,08
mov di ,offset tab1 ;adresse debut tableau tab1 =DI***/
mov bx ,offset tab2 ;adresse debut tableau tab2=bx***/
mov si ,offset tab ;adresse debut tableau tab =si***/
etq: mov al,[di] ;met le contennu de di dans al***/
cmp byte ptr[bx],al ;comparer le contennu de al avec le contennu de bx***/
jne etq1 ;fait un saut vers etq1***/
cmp byte ptr[bx],01h ;byte pTR[BX]=al& &comparer le contennu de BX avec 01h****/
jne etq2 ;byte ptr [BX]!=01h&& fait un saut vers etq2***/
cmp ah,01h ;comparer le contennu de ah avec 01h****/
jne etq3 ;ah!=01&&fait un saut vers etq3***/
mov byte ptr[si],01h ;met le contennu de si a 01h***/
mov ah,01h
inc si ;passe au suivant***/
inc bx ;passe au suivant***/
inc di ;passe au suivant***/
jmp etq ;fait un saut vers etq***/
etq3: mov byte ptr[si],00h ;met le contennu de si a 00h*****/
mov ah,10h ;met ah a 00h***/
inc bx ;passe au suivant***/
inc si ;passe au suivant****/
inc di ;passe au suivant****/
jmp etq ;fait un saut vers etq***/
etq4: mov byte ptr[si],00h ;met le contennu de si 00h***/
mov ah,00h
inc di ;passe au suivant***/
inc bx ;passe au suivant****/
inc si ;passe au suivant****/
jmp etq ;fait un saut vers etq***/
etq2: cmp ah,01h
jne etq4
mov byte ptr[si],1
mov ah,00h
inc bx
inc di
inc si
jmp etq
etq1: cmp ah,01h ;comparer ah avec 01h***/
jne etq5 ;ah!=01h && fait un saut vers etq5***/
mov byte ptr[si],00h ;ah=01h && met le contennu de si a 00h***/
mov ah,01h ;met ah a01h***/
etq5: mov byte ptr[si],01h ;met si a 01h***/
mov ah ,00h
inc di ;passe au suivant***/
inc bx ;passe au suivant***/
inc si ;passe au suivant***/
jmp etq ;fait un saut vers etq ****/
loop etq
;appel la procedure cf&of****/
call affichage ;appel laprocedure affichage***/
mov dx,offset tab ;procedure parmet d'afficher le contennu de tab****/
mov ah,09h
int 21h
mov ah,4ch ;retour au DOS***/
FIN: int 21h
code ends
END debut |
Partager