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
|
; Afficher ax en hexa avec les masques de bits de TASM / MASM
.MODEL SMALL
.STACK 100h
.DATA
symboles db '0123456789ABCDEF'
resultat db '0000',13,10,'$'
Val RECORD POS1:4, POS2:4, POS3:4, POS4:4
DVal Val <0000b,0000b,0000b,0000b>
.CODE
start:
mov ax,@data
mov ds,ax ;set DS to point to the data segment
mov es,ax
mov ax, 1234d ; une petite addition
mov bx, 2313d ; en exemple
add ax, bx
mov [Dval], ax ; on stocke le résultat dans DVal
mov bx, OFFSET symboles ; prépare l'addressage basé indirect de symboles
mov di, OFFSET resultat ; pointe sur résultat
cld
mov si, DVal ; Contenu de
and si, MASK POS1 ;si = 0A000h
mov cl, POS1 ;shift position dans cl
shr si, cl ;on dcale de cl bits vers la droite
mov ax, [bx][si] ; symbole correspondant dans ax
movsb ; copie ax dans resultat
mov si, DVal ; ensuite on fait pareil pour les autres positions (POS#)
and si, MASK POS2 ; position 2
mov cl, POS2
shr si, cl
mov ax, [bx][si]
movsb
mov si, DVal
and si, MASK POS3 ; position 3
mov cl, POS3
shr si, cl
mov ax, [bx][si]
movsb
mov si, DVal
and si, MASK POS4 ;position 4
; mov cl, POS2
; shr si, cl
mov ax, [bx][si]
movsb
mov dx, offset resultat ; on va afficher resultat
mov ah,9h ; fonction DOS : afficher chaine
int 21h ; affiche
mov ah,4ch ;fonction DOS: terminate program
mov al,0 ;return code 0
int 21h ;termine
END start |
Partager