Ensamblador - Como imprimir un numero de 6 digitos en emu8086

 
Vista:
sin imagen de perfil
Val: 21
Ha mantenido su posición en Ensamblador (en relación al último mes)
Gráfica de Ensamblador

Como imprimir un numero de 6 digitos en emu8086

Publicado por Felipe Jose (7 intervenciones) el 30/10/2020 00:43:19
Buenas estoy realizando una multiplicacion entre numeros de hasta 3 digitos, lo ultimo que me falta es mostrar el resultado en pantalla pero no tengo idea de como poder mostrar un numero de hasta 6 digitos (ya que 999*999=998001), alguien me podria ayudar porfavor?

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
.model small
.stack 100
.data
 
 
     u db 0
     d db 0
     c db 0
     r dw 0
     u1 db 0
     d1 db 0
     c1 db 0
     r1 dw 0
     msg db 10,13,7,"Ingrese un numero:",'$'
     msg2 db 10,13,7,"Ingrese segundo numero:",'$'
     msg1 db 10,13,7,"resultado:",'$'
 
.code
 
     mov ax,@data
     mov ds, ax
 
     mov ah,09h
     lea dx,msg
     int 21h
 
     mov ah,01h
     int 21h
     sub al,30h
     mov c, al
 
     mov ah,01h
     int 21h
     sub al,30h
     mov d, al
 
     mov ah,01h
     int 21h
     sub al,30h
     mov u, al
 
 
 
     mov al,c
     mov bl,100
     imul bl
     add al,u
     mov r,ax
     mov al,d
     mov bl,10
     imul bl
     AAD
     add r,ax
 
 
     mov ax,@data
     mov ds, ax
 
     mov ah,09h
     lea dx,msg2
     int 21h
 
     mov ah,01h
     int 21h
     sub al,30h
     mov c1, al
 
     mov ah,01h
     int 21h
     sub al,30h
     mov d1, al
 
     mov ah,01h
     int 21h
     sub al,30h
     mov u1, al
 
 
 
     mov al,c1
     mov bl,100
     imul bl
     add al,u1
     mov r1,ax
     mov al,d1
     mov bl,10
     mul bl
     AAD
     add r1,ax
     mov ax,r
     mov bx,r1
     imul bx ;aqui el resultado estaria en AX, o en AX/DX si es un numero mayor a 16bits
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

Como imprimir un numero de 6 digitos en emu8086

Publicado por Nacho (81 intervenciones) el 30/10/2020 13:52:39
¿Y no vas a saber hacer lo más fácil?

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
.model small
.stack 100
.data
     u db 0
     d db 0
     c db 0
     r dw 0
     u1 db 0
     d1 db 0
     c1 db 0
     r1 dw 0
     msg db 10,13,7,"Ingrese un numero:",'$'
     msg2 db 10,13,7,"Ingrese segundo numero:",'$'
     msg1 db 10,13,7,"resultado:",'$'
     resultado db 8 dup (0)
     final equ this byte
 
.code
start:
     mov ax,@data
     mov ds, ax
 
     mov ah,09h
     lea dx,msg
     int 21h
 
     mov ah,01h
     int 21h
     sub al,30h
     mov c, al
 
     mov ah,01h
     int 21h
     sub al,30h
     mov d, al
 
     mov ah,01h
     int 21h
     sub al,30h
     mov u, al
 
     mov al,c
     mov bl,100
     imul bl
     add al,u
     mov r,ax
     mov al,d
     mov bl,10
     imul bl
     AAD
     add r,ax
 
     mov ah,09h
     lea dx,msg2
     int 21h
 
     mov ah,01h
     int 21h
     sub al,30h
     mov c1, al
 
     mov ah,01h
     int 21h
     sub al,30h
     mov d1, al
 
     mov ah,01h
     int 21h
     sub al,30h
     mov u1, al
 
     mov al,c1
     mov bl,100
     imul bl
     add al,u1
     mov r1,ax
     mov al,d1
     mov bl,10
     mul bl
     AAD
 
     add r1,ax
     mov ax,r
     mov bx,r1
     imul bx ;aqui el resultado estaria en AX, o en AX/DX si es un numero mayor a 16bits
 
     mov si, offset final-1
     mov bx, 10
 sig:div bx
     or dl, 30h
     mov [si], dl
     dec si
     mov dx, 0
     cmp ax, 9
     ja sig
 
     or al, 30h
     mov [si], al
 
end start
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
1
Comentar
sin imagen de perfil
Val: 21
Ha mantenido su posición en Ensamblador (en relación al último mes)
Gráfica de Ensamblador

Como imprimir un numero de 6 digitos en emu8086

Publicado por Felipe Jose (7 intervenciones) el 30/10/2020 17:04:57
me imagine que era lo mas fácil pero como empece recien hace dias sinceramente no encontraba la solución, muchas gracias enserio, acabo de intentar correr el codigo que me pasaste pero me presenta un error en la linea "sig:div bx", me sale lo siguiente, este error ya me ha pasado con anterioridad y tampoco e sabido como resolverlo, me podrias echar una mano aqui también por favor? si no es molestia
Error
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

Como imprimir un numero de 6 digitos en emu8086

Publicado por Nacho (81 intervenciones) el 30/10/2020 19:11:24
Ese error se produce porque el resultado de la operación no cabe en ax. Para esos casos hay que hacer un pequeño apaño

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
.model small
.stack 100
.data
     u db 0
     d db 0
     c db 0
     r dw 0
     u1 db 0
     d1 db 0
     c1 db 0
     r1 dw 0
     msg db 10,13,7,"Ingrese un numero:",'$'
     msg2 db 10,13,7,"Ingrese segundo numero:",'$'
     msg1 db 10,13,7,"resultado:",'$'
     resultado db 8 dup (0)
     final equ this byte
 
.code
start:
     mov ax,@data
     mov ds, ax
 
     mov ah,09h
     lea dx,msg
     int 21h
 
     mov ah,01h
     int 21h
     sub al,30h
     mov c, al
 
     mov ah,01h
     int 21h
     sub al,30h
     mov d, al
 
     mov ah,01h
     int 21h
     sub al,30h
     mov u, al
 
     mov al,c
     mov bl,100
     imul bl
     add al,u
     mov r,ax
     mov al,d
     mov bl,10
     imul bl
     AAD
     add r,ax
 
     mov ah,09h
     lea dx,msg2
     int 21h
 
     mov ah,01h
     int 21h
     sub al,30h
     mov c1, al
 
     mov ah,01h
     int 21h
     sub al,30h
     mov d1, al
 
     mov ah,01h
     int 21h
     sub al,30h
     mov u1, al
 
     mov al,c1
     mov bl,100
     imul bl
     add al,u1
     mov r1,ax
     mov al,d1
     mov bl,10
     mul bl
     AAD
 
     add r1,ax
     mov ax,r
     mov bx,r1
     imul bx ;aqui el resultado estaria en AX, o en AX/DX si es un numero mayor a 16bits
 
     mov si, offset final-1
     mov cx, 10
 
     mov bx, dx
 sig:xchg ax, bx
     xor  dx, dx
     div  cx
     xchg ax, bx
     div  cx
     or dl, 30h
     mov [si], dl
     dec si
     cmp ax, 9
     ja sig
 
     or al, 30h
     mov [si], al
 
end start
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
1
Comentar
sin imagen de perfil
Val: 21
Ha mantenido su posición en Ensamblador (en relación al último mes)
Gráfica de Ensamblador

Como imprimir un numero de 6 digitos en emu8086

Publicado por Felipe Jose (7 intervenciones) el 30/10/2020 20:01:37
ya entiendo,gracias. Acabo de poner la correccon de tu codigo en el mio, corre sin problemas pero al final en pantalla no me muestra el resultado, se queda en blanco, tienes una idea de porque?


prueba1
prueba1.2
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

Como imprimir un numero de 6 digitos en emu8086

Publicado por Nacho (81 intervenciones) el 30/10/2020 21:36:37
Es por los ceros.

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
.model small
.stack 100
.data
     u db 0
     d db 0
     c db 0
     r dw 0
     u1 db 0
     d1 db 0
     c1 db 0
     r1 dw 0
     msg db 10,13,7,"Ingrese un numero:",'$'
     msg2 db 10,13,7,"Ingrese segundo numero:",'$'
     msg1 db 10,13,7,"resultado: ",'$'
     resultado db 10 dup (0), '$'
     final equ this byte
 
.code
start:
     mov ax,@data
     mov ds, ax
 
     mov ah,09h
     lea dx,msg
     int 21h
 
     mov ah,01h
     int 21h
     sub al,30h
     mov c, al
 
     mov ah,01h
     int 21h
     sub al,30h
     mov d, al
 
     mov ah,01h
     int 21h
     sub al,30h
     mov u, al
 
     mov al,c
     mov bl,100
     imul bl
     add al,u
     mov r,ax
     mov al,d
     mov bl,10
     imul bl
     AAD
     add r,ax
 
     mov ah,09h
     lea dx,msg2
     int 21h
 
     mov ah,01h
     int 21h
     sub al,30h
     mov c1, al
 
     mov ah,01h
     int 21h
     sub al,30h
     mov d1, al
 
     mov ah,01h
     int 21h
     sub al,30h
     mov u1, al
 
     mov al,c1
     mov bl,100
     imul bl
     add al,u1
     mov r1,ax
     mov al,d1
     mov bl,10
     mul bl
     AAD
 
     add r1,ax
     mov ax,r
     mov bx,r1
     imul bx ;aqui el resultado estaria en AX, o en AX/DX si es un numero mayor a 16bits
 
     mov si, offset final-2
     mov cx, 10
 
     mov bx, dx
 sig:xchg ax, bx
     xor  dx, dx
     div  cx
     xchg ax, bx
     div  cx
     or dl, 30h
     mov [si], dl
     dec si
     cmp ax, 9
     ja sig
 
     or al, 30h
     mov [si], al
 
     mov ah,09h
     mov dx, offset msg1
     int 21h
 
     mov ah,09h
     mov dx,si
     int 21h
 
 
 
end start
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
1
Comentar
sin imagen de perfil
Val: 21
Ha mantenido su posición en Ensamblador (en relación al último mes)
Gráfica de Ensamblador

Como imprimir un numero de 6 digitos en emu8086

Publicado por Felipe Jose (7 intervenciones) el 30/10/2020 21:46:47
Sinceramente agradezco mucho que te tomes el tiempo para resolver mis dudas y errores y me imagino que ahorita ya debo de ser una molestia pero me vuelve a lanzar un error que desconozco en la siguiente linea de código.
Error2
error2.1
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

Como imprimir un numero de 6 digitos en emu8086

Publicado por Nacho (81 intervenciones) el 30/10/2020 22:18:37
La función 9 de la int 21h imprime caracteres hasta que se encuentra el símbolo $. Ese mensaje dice que ha imprimido 2000 caracteres y no ha encontrado ese símbolo así que para porque hay algo mal.

Lo que imprime es msg, mira a ver ese mensaje.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
1
Comentar
sin imagen de perfil
Val: 21
Ha mantenido su posición en Ensamblador (en relación al último mes)
Gráfica de Ensamblador

Como imprimir un numero de 6 digitos en emu8086

Publicado por Felipe Jose (7 intervenciones) el 30/10/2020 23:14:01
investigue mientras revisaba el codigo y no encontre solucion, segun lo que e leido debe haber un string que no posee '$' y por eso me esta dando ese error pero no identifico cual es, tambien lei que cambiar: resultado db 10 dup(0) a resultado db 10 dup('$') ayudaria pero no resolvio el problema. otro punto es que mis msg, msg1 y msg2 poseen al final ,'$'
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

Como imprimir un numero de 6 digitos en emu8086

Publicado por Nacho (81 intervenciones) el 31/10/2020 11:39:44
Fíjate que yo no he puesto resultado db 10 dup(0) ni resultado db 10 dup('$'), he puesto resultado db 10 dup(0) , '$'
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
1
Comentar
sin imagen de perfil
Val: 21
Ha mantenido su posición en Ensamblador (en relación al último mes)
Gráfica de Ensamblador

Como imprimir un numero de 6 digitos en emu8086

Publicado por Felipe Jose (7 intervenciones) el 31/10/2020 15:22:20
claro pero lei que el error tambien puede deberse a que textualmente "estas cargando el buffer con puros ceros" es decir el (0) por eso trate dejarlo en blanco pero tampoco soluciono nada
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar