CMP con dos direcciones de memoria

CMP con dos direcciones de memoria

de Dara Leslie Silvera Martinez -
Número de respuestas: 4

Buenas, queria saber si al igual que en la suma, no se puede comparar dos direcciones de memoria, ej

CMP ES:[BX], ES:[BP+4].

Otra duda, es que si estos dos codigos serian lo mismo

MOV DX,ES:[BX] 

CMP DL, [BP+4]

Y ESTE

MOV BYTE PRT DL,ES:[BX]

CMP DL, [BP+4]

Por otro lado, queria preguntar a grande rasgos cuales son los errores mas comunes para romper el stack en recursion, desde ya muchas gracias.

En respuesta a Dara Leslie Silvera Martinez

Re: CMP con dos direcciones de memoria

de Federico Rivero -

Estimada,

Voy por partes: con respecto al direccionamiento memoria-memoria, no está soportado por x86 en  ninguna de las operaciones de ALU (incluída CMP). La única excepción relevante es un PUSH con operando en memoria, ej: PUSH DS:[BX], ahí se busca el ooerando en DS:BX  y se lo guarda al tope del stack, lo cual realiza dos accesos a memoria.

El código que indicás es equivalente, sí.  Cuidado que no va byte ptr porque al usar DL ya se aclara que el modo es de 8 bits. Resta aclarar que los fragmentos son equivalentes porque x86 es little endian. Y por tanto en al hacer MOV DX, ES:[BX] se guarda en DL el byte bajo, que está en ES:BX, y en DH el alto, que está en ES:BX + 1. Si fuera big endian no sería equivalente. 

Los errores más comunes es una pregunta complicada de responder. Te diría que acomodar mal el stack a la salida de una función es bastante común. 

Saludos,

          Federico

En respuesta a Federico Rivero

Re: CMP con dos direcciones de memoria

de Santiago Gongora De La Fuente -
Federico, tengo una duda general sobre las partes altas y bajas de los registros AX,BX,CX y DX de 8086.

Si, por poner un ejemplo, se hiciera
MOV AX, 0x2F5C

¿Esta asegurado que en AL encuentro "0x5C" y en AH "0x2F"? ¿O para separarlos debería repaldarlo en otro registro, hacer una máscara (0xFF00 y 0x00FF) y luego hacer el shift-right?

¡Gracias!
En respuesta a Santiago Gongora De La Fuente

Re: CMP con dos direcciones de memoria

de Federico Rivero -

Estimado,

Sí! Si ejecutás MOV AX, 0x2F5C queda en AL 0x5C y AH 0x2F . No me queda claro qué otra opción de resultado se te ocurría, si te parece, comentala y podemos discutirlo.

Saludos!

          Federico