Buenas, alguien podría explicar como encarar este ejercicio? Se nos ocurre utilizar el registro DS junto con el SI para ir almacenando datos, pero no estamos seguros si es correcto.
Disculpen la pregunta tan general, simplemente no veo como encararlo con las condiciones que marca el ejercicio.
Gracias!
El ejercicio 2 es el de hacer la función AND. A ese te referís?
Si, finalmente lo encaré utilizando el registro BP de la siguiente forma:
push BP; respaldo BP
mov BP, SP
mov AX, [BP+8]; copiamos parametro X en AX
and AX, [BP+6]; and con parametro Y
and AX, [BP+4]; and con parametro z
pop BP; devuelvo BP a su estado original
ret;
De esta forma usamos BP para ir apuntando a los parámetros que están en el stack, y al final dejamos el stack de la misma forma que lo recibimos al principio y reestablecemos BP. Esto es correcto? Está bien haber usado el registro BP para esto? Podría haber usado otro? DX por ejemplo?
Gracias!
Hola! Tengo unas dudas con respecto a este ejercicio. Mi solución es muy parecida a la del compañero.
Mis dudas son:
1. Cuando el ejercicio dice: "Los argumentos de la función (que se puede suponer todos de 16 bits) se envían al stack en el orden en que son declarados en la llamada a la función." ¿Se refiere a cargar en el stack los registros antes de invocar a la función? es decir:
PUSH AX
PUSH BX
PUSH CX
call AND_1
¿O debe incluirse en la función AND_1? Mas allá de la respuesta ¿tendría que hacer un POP de resultado después de hacer la call?
2. El código assembler me quedó:
AND_1 PROC
PUSH BP
MOV BP, SP
MOV AX, word ptr [BP+8]
AND AX, word ptr [BP+4]
AND AX, word ptr [BP+6]
POP BP
RET
AND_1 ENDP
Tengo dudas de si es necesario especificar en los MOV word ptr ya que en la letra ya dice que son palabras y no bytes. Otra duda es si es necesario reemplazar el valor de AX en el stack con el nuevo valor a retornar.
Muchas gracias!
Saludos!