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


0