Ensamblador - Necesito ayuda

 
Vista:

Necesito ayuda

Publicado por tricia (4 intervenciones) el 23/10/2010 22:37:21
Necesito crear una funcion en ensamblador que imprima los números de 2 en dos desde 0 hasta el número que esté en el registro AL

#make_COM#
ORG 100h

MOV AL, 2
CICLO:
CMP AL, 10
JE FIN
MOV AH, 0EH
ADD AL, 30H
INT 10H
SUB AL, 30H
ADD AL, 2
JMP CICLO
FIN:
RET

ESE PEDAZO LO QUE HACE ES IMPRIMIR DEL 0 AL 10 LO NÚMEROS PARES. PERO LO QUE TIENE Q HACER ES IMPRIMIR POR EJEMPLO 10,12,14,16 osea todos pero lo que no sé es como decirle que imprima mas de un digito a la vez.
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
sin imagen de perfil
Val: 6
Ha mantenido su posición en Ensamblador (en relación al último mes)
Gráfica de Ensamblador

RE:Necesito ayuda

Publicado por José Antonio López Cano (8 intervenciones) el 28/10/2010 17:06:44
Hola,
Hace unos días posteé un código en un foro que puede serte de utilidad. Imprime la suma de 2 números. Lo posteé en:
http://www.programmingforums.org/thread30456.html
Lo útil del código es la parte que transforma un entero sin signo en una cadena de caracteres. Como quien preguntaba usaba el servicio 9h de la interrupción 21h, la cadena la terminaba con el carácter '$'. Puedes finalizarla con cero o con lo que prefieras. No soluciona directamente tu pregunta, pero te puede ayudar bastante. Si pese a este código no solucionas tu problema házmelo saber y te vuelvo a contestar. Ahí va el código:
.model small
.stack 248
.data
num1 db 12
num2 db 13
;Quien preguntaba usaba bytes.
;podría haber usado palabras: num1 dw 12...
mystring db 40 dup(?) ;I need room for the target string
;Necesito espacio para la cadena de destino.
.code
start:
mov ax, @data
mov ds, ax

xor ax, ax
;Como quien preguntaba usaba bytes, primero pongo la palabra a cero
;Ahora opero con el byte de menor peso.
mov al, num1
add al, num2

;Entre aquí...
mov bx, offset mystring
call inttostr
mov dx, offset mystring

printing:
mov ah, 09h
int 21h
;...y aquí, podrías crear un bucle
mov ax, 4c00h
int 21h

inttostr:
;In bx the offset to the target string
;In ax the unsigned integer to convert to string
;It converts an unsigned integer to an ascii string
;En bx el desplazamiento a la cadena de destino.
;En ax el entero sin signo a convertir a cadena
;Convierte un entero sin signo en una cadena ascii.
push ax
push bx
push cx
push dx
push si
xor cx, cx
xor dx, dx
mov si, 10
label2:
;I divide the number by 10 repeatedly
; and I put the remainders in the stack.
;Divido el número entre 10 repetidamente
;Pongo los restos (dx) en la pila. Recuerda que en ax queda el resultado
cmp ax, 10
jb label1
div si
push dx
inc cx
jmp label2

label1:
push ax
inc cx
label3:
;I retrive the numbers in the stack and
;I add to them the ascii value for '0' (character).
;Recupero los números que hay en la pila.
;Si el número era 123. Saldrán de la pila con el orden 1, 2, 3.
;En cx tengo la cantidad de números que tengo que recuperar
;Les sumo el valor ascii del carácter '0' (cero).
pop dx
add dx, '0'
mov byte ptr ds:[bx], dl
inc bx
dec cx
jnz label3
;The service 9h of the 21h interrupt prints a string
;terminated by the character '$'
;El servicio 9h de la interrupción 21h imprime una cadena
;terminada por el carácter '$'.
mov byte ptr ds:[bx], '$'

pop si
pop dx
pop cx
pop bx
pop ax
ret

end start

Espero que te sea útil. Si no lo acabas de solucionar házmelo saber.
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

RE:Necesito ayuda

Publicado por tricia (4 intervenciones) el 02/11/2010 02:14:16
Hola, me fue de mucha ayuda tu código....
Realmente te lo agradesco...
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