[2015][Julio][Problema 2]

[2015][Julio][Problema 2]

de Rossana Guerra Celano -
Número de respuestas: 4

La lógica de los for anidados la entiendo a medias.
Hubiera estado mal si hago?:

for (i = 0; i < 65536; i++)
{
    rom[i] = ((i / 256 + i % 256) / 2) % 256;
}

Gracias


En respuesta a Rossana Guerra Celano

Re: [Julio 2015] Problema 2

de Bruno Federico Bradach Garcia -

Buenas, tengo la misma duda. Lo hice igual excepto por el último "% 256" de adentro del for.

Esta bien este código en 8086? :

XOR AX, AX   ;   AX = i = 0

for:

   MOV CX, AH     ;    CX = i / 256

   ADD CX, AL      ; CX = (i / 256) + (i % 256)

   SHR CX, 1        ; CX = CX / 2

   MOV ES:[AX], CX

   INC AX

   CMP AX, 65536

   JNZ for

endp

Gracias.

En respuesta a Bruno Federico Bradach Garcia

Re: [Julio 2015] Problema 2

de Gustavo Brown -

Van algunos errores:

 - No se puede mover un registro de 8 bits en uno de 16 bits

 - No se puede direccionar memoria con AX

 - 65536 no entra en 16 bits

Saludos,
  Gustavo

En respuesta a Gustavo Brown

Re: [Julio 2015] Problema 2

de Andres Bello Ureta -

" - No se puede mover un registro de 8 bits en uno de 16 bits "

Vale mover un registro de de 16 en uno de 8 bits?.

Con la memoria es lo mismo? O ahí es cuando se utilizan las directivas ptr byte/word?

En respuesta a Andres Bello Ureta

Re: [Julio 2015] Problema 2

de Gustavo Brown -

- Tampoco vale mover un registro de 8 bits en uno de 16 bits.

- Las directivas BYTE PTR y WORD PTR sirven para desambiguar la instrucción en el caso de operandos a memoria y solo debe usarse cuando hay ambigüedad. 

Ejemplo donde hay que usar directiva:   no es lo mismo: INC BYTE PTR [BX] que INC WORD PTR [BX]

Ejemplo donde no hay que usar directiva: mov AX. [BX]  (no hay que usar directiva porque el acceso a memoria tiene que ser a palabra dado que el resultado se va a almacenar en un registro de 16 bits).

Saludos,
  Gustavo