ej 4 practico 8

ej 4 practico 8

de Bruno Stefano Lombardo Palleiro -
Número de respuestas: 3

Buenas, se me ocurrió esta solución y quisiera saber si es correcta.

Me basé en el código en C, que hice como si tuviera un arreglo de char(ya que un char es un byte), pero no se si esta era la idea.

También tengo una duda sobre la instrucción CMP. Si hago CMP AX,BX siempre la comparación (las flags que se activan) es con el primero respecto al segundo no?

Por ejemplo respecto a mi código, al usar JG  , saltaría si BX>DI.

Gracias

En respuesta a Bruno Stefano Lombardo Palleiro

Re: ej 4 practico 8

de Gustavo Brown -

Van algunos comentarios:

 Tu programa en algo nivel y tu programa en bajo nivel no son el mismo programa. Uno itera hasta encontrar un byte con valor 0 y el otro intenta recorrer desde cierto indice hasta otro.

El alto nivel no cumple lo pedido en la letra dado que la entrada no es un string de tipo ASCIIZ (terminado en \0) sino que es una tabla con rango conocido.

La idea es el bajo nivel sea código assembler correspondiente al alto nivel.

Luego sobre la implementación de bajo nivel, comento algunos errores:

- No se puede mover AL a BP. AL es de 8 bits y BP de 16 bits

- ADD BX, SI actualiza BX (BX = BX + SI), por lo que al ir a su vez cambiando SI el resultado no apunta a la secuencia de bytes de la tabla

- CMP BX, DI realiza la resta BX-DI y actualiza las flags y no guarda el resultado de la resta. Así que al usar JG saltaría si BX > DI, mirando los operandos como si tuvieran signo. Seguramente quieras usar ja

- el CMP con ambos operandos a memoria no es válido. Tendrias que comparar contra un registro (de 8 bits pues es una tabla de bytes)

Saludos,
  Gustavo

En respuesta a Gustavo Brown

Re: ej 4 practico 8

de Bruno Stefano Lombardo Palleiro -
Buenas Gustavo, muchas gracias por las correcciones.
Modifique el código de bajo nivel agregándole lo que me dijiste.
Al menos esa parte ahora sería correcta?
saludos
En respuesta a Bruno Stefano Lombardo Palleiro

Re: ej 4 practico 8

de Gustavo Brown -
Sigue siendo incorrecta:
 - Ahora CX tiene valores incorrectos (arranca con BX, luego BX+1, BX+1+2, BX+1+2+3, etc), deberías ir incrementando de a 1 el valor de CX
 - Estas yendo a buscar un dato a ES:[BP] donde BP tenia el valor a buscar en la parte baja y "basura" en la parte alta. En AL ya tenes el elemento que queres buscar.

Saludos,
  Gustavo