Ensamblador - Ensamblador - imprimir numeros de 5 cifras

 
Vista:
Imágen de perfil de Jonatan
Val: 2
Ha aumentado su posición en 46 puestos en Ensamblador (en relación al último mes)
Gráfica de Ensamblador

Ensamblador - imprimir numeros de 5 cifras

Publicado por Jonatan (1 intervención) el 18/06/2021 05:41:20
Hola. Estoy tratando de convertir los valores indicados en las variables decimales num1, num2, num3. Por alguna razon que desconozco no imprime correctamente los valores superiores a 7FFF(hexa). que seria en este caso el valor de num3, a partir de ese valor se reinicia la impresion de los caracteres y vuelve a imprimir de 0 para arriba. Alguna ayuda o sugerencia? necesito imprimir los valores hasta el numero 64000 inclusive.

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
title ejercicio10
cr equ 13
lf equ 10
 
escribe macro palabra
    lea dx,palabra
    call escribir
endm
 
numcad macro numero cad
local pushear, primer_dig, popear
    push ax
    push bx
    push cx
    push dx
    push si
 
    sub ax,ax
    sub cx,cx
    sub bx,bx
    sub si,si
    sub dx,dx
 
    mov ax,numero
    mov bx,10
 
pushear: cmp ax,10
         jnge primer_dig
         div bx
         push dx
         inc cx
         sub dx,dx
         jmp pushear
 
primer_dig: mov dx,ax
            push dx
            inc cx
 
popear: pop dx
        add dl,48
        mov cad[si],dl
        inc si
        cmp si,cx
        jl popear
 
        mov cad[si],'$'
 
        pop si
        pop dx
        pop cx
        pop bx
        pop ax
endm
 
datos segment
    texto1 db cr,lf,'Numeros: ','$'
    num1 dw 29791,'$'
    num2 dw 32767,'$' ;7FFF en hexa
    num3 dw 32768,'$' ;8000 en hexa
    cadena db 10 dup(' '),'$'
    espacio db ' ','$'
datos ends
 
pila segment stack
    db 64 dup('pila')
pila ends
 
codigo segment
inicio proc far
assume ds:datos,ss:pila,cs:codigo
    push ds
    sub ax,ax
    push ax
    mov ax,datos
    mov ds,ax
 
;||||||convertir numeros a cadena de caracteres||||||
 
    escribe texto1
 
    numcad num1 cadena
    escribe cadena
 
    escribe espacio
 
    numcad num2 cadena
    escribe cadena
 
    escribe espacio
 
    numcad num3 cadena
    escribe cadena
 
    call esperar
    ret
inicio endp
 
escribir proc
    push ax
    mov ah,09
    int 21h
    pop ax
    ret
escribir endp
 
esperar proc
    push ax
    mov ah,00
    int 16h
    pop ax
    ret
esperar endp
 
codigo ends
end inicio
Valora esta pregunta
Me gusta: Está pregunta es útil y esta claraNo me gusta: Está pregunta no esta clara o no es útil
0
Responder