Punteros 8086

Punteros 8086

de Mauricio Javier Morinelli Lujan -
Número de respuestas: 1

Hola me surge la duda de como manejar punteros.

Sea el siguiente caso:


short proc(nodo* arbol){

       if (nodo == NULL){

                  ...

      }

      ....

}


Como hago la comparación nodo == NULL en 8086 ?

Suponiendo que nodo viene en BX lo correcto para mi seria cmp BX,0. (BX tiene la dirección(desplazamiento) donde se encuentra el nodo, si esa dirección es 0, el nodo era null ? ).

En BX tendria la dirección donde se encuentra efectivamente la estructura nodo, por lo que cmp [BX], word ptr 0 compararía el primer elemento de la estructura nodo con el 0 mientras lo que se quiere saber es si el nodo es nulo o no.


Por otra parte respecto a punteros FAR, si nodo fuera un puntero FAR estaría ocupando 4 bytes, dado que los registros son de hasta 2 bytes, en este caso, como compararia nodo == NULL ?

Saludos.

En respuesta a Mauricio Javier Morinelli Lujan

Re: Punteros 8086

de Gustavo Brown -

Si son punteros NEAR, entonces comparas con 0 (NULL).
Si recibís el puntero al nodo en BX y queres ver si es nulo, harías CMP BX, 0

Si el puntero fuese FAR deberias tener 2 palabras (ej: ES y BX)

Ahí tendrías que comparar tanto segmento como offset, si ambos son NULL (0) entonces el puntero es nulo.

Ej (segmento en ES, offset en BX):

  PUSH AX 
  PUSH ES
  POP AX
  OR AX, BX
  POP AX ; recupero AX
  JZ nodo_es_nulo
nodo_no_es_nulo:
   .....
nodo_es_nulo:
  ....

Saludos,
   Gustavo