Ensamblador - Recibir un número hexadecimal por teclado.

 
Vista:
Imágen de perfil de Carlos
Val: 13
Ha mantenido su posición en Ensamblador (en relación al último mes)
Gráfica de Ensamblador

Recibir un número hexadecimal por teclado.

Publicado por Carlos (5 intervenciones) el 15/03/2019 22:34:59
Pues eso. Lo cierto es que el profesor no da clases, sólo deja actividades y hay "recursos" para estudiar, pero están en SCRIBD y hay qué pagar para verlos :/ Así que no sé casi nada de ensamblador. Me he tirado las últimas 5 horas viendo tutoriales y códigos de otros intentando encontrar algo útil, pero nada... Así que esta es mi última esperanza. Estoy programando en Emu8086, por si acaso es necesario aclarar.

"Diseñar e implementar un programa en lenguaje ensamblador que reciba un número de 16 bits introducido por el teclado con la función scan como valor hexadecimal y sea convertido a bcd para luego imprimirse en pantalla como cadena decimal usando la función print.
Sube el archivo fuente o el archivo comprimido de proyecto del programa de tu practica, deben incluirse todos los archivos necesarios para poder ejecutarlo.

Debes leer la documentación del emu8086 para la librería contenida en el archivo emu8086.inc en tutoriales sección 5. (Aquí no hay nada, por cierto.)
Para terminar el programa debes usar la interrupción 20h.

La interrupción 21h sólo será valida si es que esta siendo usada por las funciones de la librería emu8086.inc"

En el código que tengo, ingreso el número hexadecimal asignandolo directamente a hex. Pero el profesor pide que sea ingresada por teclado, ¿cómo hago eso?

(Por cierto, esta ya es mi tercera pregunta, pero es que me está costando mucho encontrar la información adecuada. Disculpen las molestas.)

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
org 100h
.model small
.data
hex dw 0FFFFH
counter db 0
.code
;initilize Data Segment
mov ax,@DATA
mov DS,ax
mov ax,hex
mov bx,000Ah
L:
inc counter
div bx
push dx
cmp ax,0
mov dx,00h
je exit
jmp L
exit:
mov cl,counter
mov ch,00h
L1:
pop dx
add dl,30h
mov ah,02h
int 21h
LOOP L1
;to terminate program
mov ah,4ch
int 21h
ret
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

Recibir un número hexadecimal por teclado.

Publicado por Nacho (35 intervenciones) el 16/03/2019 10:38:58
Tienes que separar el código en bloques porque si no no hay quien se aclare.

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
org 100h
.model small
 
.data
hex dw 0FFFFH
counter db 0
 
.code
;initilize Data Segment
mov ax,@DATA
mov DS,ax
 
mov ax,hex
mov bx,000Ah
 
L:
inc counter
div bx
push dx
cmp ax,0
mov dx,00h
je exit
jmp L
 
exit:
mov cl,counter
mov ch,00h
 
L1:
pop dx
add dl,30h
mov ah,02h
int 21h
LOOP L1
 
;to terminate program
mov ah,4ch
int 21h
ret

Y aún así no se entiende.

Para introducir un número se puede usar la función 0ah de la int 21h. Eso te daría un búfer con los números ascii de cada carácter introducido,

Si introduces el número 427a te quedaría un búfer con 34323761. Luego sería pasar eso a un número. En la siguiente pregunta tienes un ejemplo de uso de las funciones de la 21h.

http://ict.udlap.mx/people/oleg/docencia/ASSEMBLER/asm_interrup_21.html
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