Nasm:convert hexa to decimal avec e/s

Description

Conversion de valeur hexa en valeur décimal avec entrée sur clavier et affichage à l'écran avec des petits contrôles en plus.

Source / Exemple :


;NASM-IDE ASM Assistant Assembler Project File
BITS 16			;Set code generation to 16 bit mode
ORG 0x0100		;Set code start address to 0100h
SEGMENT .text
;;;;;;;;;;;;;;;;;;;;;;
;Entr?e clavier
;Input Data from keyboard
;*****************;;;;;
labbg:
       push  labbeg
       push len_labbeg        ;;;;; Affichage titre a l'?cran
       call Pint0921h
begin:
       push  zon0h
       push len_zon0h        ;;;;; Affichage message a l'?cran
       call Pint0921h
lop0:
	mov al,0ch           ;;;;; Keybord buff?ris?
	mov dx,buf1
	mov ah,0ah
	int 0x21
	cmp byte [buf1+1],8
	jbe st00
	mov al,07h               ;;; byte  bell
	mov ah,0eh
	int 10h
	mov cl,[buf1+1]
        mov bh,0                ;;;; Traitement cas > 8 bytes
        mov al,' '
	mov ah,0Ah
	int 10h
	jmp lop0
st00:
        xor ecx,ecx
	mov cl,[buf1+1]
	xor si,si
	mov bx,buf1+2
des1:
                mov al,[bx]
		mov byte [bufzs+si],al
		cmp cl,1
		je Ctldata0
		inc  si
		inc bx
         	loop des1

Ctldata0:
     xor ecx,ecx        	
     mov cl,[buf1+1]
     xor esi,esi
     xor edi,edi
     xor eax,eax
Ctldata1:
       push cx
       mov  al,[bufzs+si]
       mov cx,lent_nmbhc
       mov  di,nmbhc

       repne scasb
         pop cx
      je stt0
     jmp eror
stt0:

         mov bp,di
         sub bp,nmbhc
         dec bp
         cmp bp,15
         jbe stt1
         mov  bl,[nmbhc+bp-6]
         mov byte [bufzs+si],bl
stt1:
        inc si
       loop Ctldata1
        jmp  sut0                      ;;;;traitement minuscule (lowcase)
eror:
    push lab_err
    push lent_lab_err
    call Pint0921h                     ;;;;;;error not Hexa
    jmp begin
sut0:

    xor cx,cx
    mov cl,[buf1+1]
          push bufzs
          push bufz
          push cx
          call movbyte
   ;;;;;;;;;

;*****************
	xor eax,eax

Valh:

           xor ecx,ecx
           xor si, si
	mov cl,[buf1+1]
	xor ebx,ebx

         sub cl,1
        jz onee

bcl00:
         xor eax,eax
         mov   al,[bufz+si]
         cmp al,'A'
         jnb Ablp1
         sub al,'0'
         jmp Ablp2
Ablp1:
         sub al,'A'                    ;;convert ascii to hex
         add al,10
Ablp2:

         add ebx,eax
         shl ebx,4
         inc si
         loop bcl00
onee:
         xor eax,eax
         mov al,[bufz+si]
        cmp al,'A'
         jnb Ablp21
         sub al,'0'
         jmp Ablp22
Ablp21:
         sub al,'A'
         add al,10
Ablp22:

        add  ebx,eax

;;;;;;;;;;;;;;;;;;;;;;;;
;;;;;Affichage en d?cimal
;;::::::::::::::::::::::::
    mov eax,ebx
;;;;;;;;;;;;;;;;;;

    xor esi,esi
    xor edi,edi
    xor ecx,ecx
    mov ebx,10
    xor ecx,ecx
    mov ecx,1
    mov si,0
    xor edx,edx
Lop1:
    xor edx,edx
    div ebx                            ;;convert en decimal
    cmp eax,ebx
    jb par10
   add dl,'0'
   mov  [affdec+si], dl
     inc ecx
    inc si
     jmp Lop1
par10:
    add dl,'0'
    mov  [affdec+si], dl
    inc si
    inc ecx
    add al,'0'
    mov  [affdec+si], al
par11:
    push  zon0
    push len_zon0
    call Pint0921h
;;;;;;;;;;;;
xor ax,ax
xor dx,dx
xor di,di
mov ax,cx
mov bx,3
mov byte [flg],0
div bx

;;;;;;;
par12:
    mov al,[affdec+si]
    mov ah,0eh
    int 10h
    dec si
    inc di
     cmp byte [flg],1
    je st12
    cmp di,dx
    je frmt
st12:
     cmp di,3
    jne lop12

frmt:
    mov al,' '
    mov ah,0eh
    int 10h
    mov byte [flg],1
    xor di,di                     ;;;;;format output 9 999 999
lop12:
  loop par12

;;;;;;;;;;;;;;;;
call Crlf
jmp begin

%include "utilit.asm"
%include "interup.asm"
%include "crlf.asm"
SEGMENT .dat
lab_err db 'Err0 : Not Hexa number'
mem1 db '$' 	
nmbhc db   '0123456789ABCDEFabcdef'
zon0   db '-- Decimal value : '
mem3 db '$'
zon0h   db  '-- Enter Hex value (Ctrl+C Exit) : '
mem4 db '$'
flg  db  0
mem5 db '$'
len_zon0 equ $-zon0
len_zon0h equ $-zon0h
lent_lab_err equ $-lab_err
lent_nmbhc equ 22
labbeg db '***** Convert Hex  to  decimal',0ah,0dh
db        '***** Version 11.2004 ********',0ah,0dh
db        'e-mail:GriechMoloud@yahoo.fr ',0ah,0dh
db        '_____________________________$',0ah,0dh
len_labbeg equ $-labbeg
SEGMENT .bss		;Uninitialised data segment
affdec resb 15
buf1   resb 15
bufzs  resb 15
bufz  resb 10

Conclusion :


j'attend vos remarques et suggestions

Codes Sources

A voir également

Vous n'êtes pas encore membre ?

inscrivez-vous, c'est gratuit et ça prend moins d'une minute !

Les membres obtiennent plus de réponses que les utilisateurs anonymes.

Le fait d'être membre vous permet d'avoir un suivi détaillé de vos demandes et codes sources.

Le fait d'être membre vous permet d'avoir des options supplémentaires.