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;
}
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.
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
" - No se puede mover un registro de 8 bits en uno de 16 bits "
Con la memoria es lo mismo? O ahí es cuando se utilizan las directivas ptr byte/word?
- 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