Autor Tema: Enunciado y su codigo en assembler.  (Leído 276 veces)

0 Usuarios y 1 Visitante están viendo este tema.

Desconectado e7german

  • PIC10
  • *
  • Mensajes: 2
Enunciado y su codigo en assembler.
« en: 13 de Marzo de 2018, 21:49:51 »
Buenas noches, estoy haciendo unos ejercicios y queria sacarme la duda de si este codigo es el que cumple con lo que indica el enunciado.

A partir de la dirección de memoria 7210, se tiene una lista de 3 números enteros de 16 bits cada uno. Sumar 40d a cada uno y el resultado escribirlo en otra lista a partir de la dirección 7310. Si el resultado fuera correcto escribir 8000h en la posición correspondiente de la lista destino. El programa iniciara en la dirección 1000.


     1000   MOV SI, 7210
              MOV DI, 7310
              MOV CX, 3
ETIQUETA
              MOV AX, [SI]
              MOV AX, 28(40d en HEXA)
              JNZ ETIQUETA2
              MOV AX, 8000
ETIQUETA2   
              MOV DI, [AX]
              INC SI
              INC DI
              DEC CX
              JNZ ETIQUETA
              INT 20

Despues, los puntos siguientes tienen  los estos enunciados que realmente no se bien como hacerlos.

2)Una vez escrito y comprobado el programa anterior, indique que cambios realizaría para convertir la o las instrucciones del programa, donde se realiza una suma y la verificación del flag o de los flags correspondientes, en una subrutina a ubicarse en la posición de memoria 1500.

3) Una vez escrito y comprobado el programa del punto 1 : indique que cambios realizaría para convertir la o las instrucciones del programa donde se realiza la suma y la verificación del flag o de los flags correspondientes, en una interrupción a ubicarse en la posición de memoria 3000:2200, interrupción por software 61 e indicar los cambios a realizar en la tabla de vectores de interrupción(posición de memoria y valores)


Desde ya muchas gracias de tomarse el tiempo de darme una mano quien lo haga.

Saludos.

Desconectado KILLERJC

  • Colaborador
  • DsPIC33
  • *****
  • Mensajes: 6904
Re:Enunciado y su codigo en assembler.
« Respuesta #1 en: 13 de Marzo de 2018, 23:11:24 »
Todavia no dijimos que compilador estamos usando, parece MASM, pero puede ser cualquier otro que utilice la sintaxis de Intel. Tambien parece ser DOS por el INT 21h 20h
Estos codigos que estamos haciendo se encuentras muy incompletos como para tratar de compilarlos, y el tema es mucho mas comlpejo, asi que voy a tratar de focalizarme sobre las instrucciones nomas.


El primer codigo, 2 cosas:

- Ponerle una etiqueta con un numero no se si es posible para comenzar, y eso no va a hacer que esa direccion sea la 0x1000, seguramente necesites usar la directiva ORG 1000h para indicar que alli comienza.
- Los INC aumentan de a 1, y vos necesitas aumentar de a 2, ya que son numeros de 16 bits.

El punto 2, es modificar el valor de la ORG a 1500h , y ponerle una etiqueta al comienzo, asi poder hacer un CALL a esa etiqueta desde otro lugar.

Lamentablemente hasta aca llega mi conocimiento de ASM.
El punto 3 te pide que la rutina que vos tenes ahora sea una interrupcion.
Esto va a llevar que.... posiciones toda la rutina en la direccion 3000:2200  ( no tengo claro a que se refiere esta notacion, Si es para dividir los 16bits, o si esta usando memoria segmentada), voy a asumir que se trata de una memoria segmentada, por lo que la direccion abosulta es de ( 3000h * 16d + 2200h  = 32200h ) imagino que lo harias con un ORG, no estoy seguro
Si es una interrupcion vas a tener que volver de la misma, por lo tanto el INT 20h va a tener que ser reemplazado por un IRET

Vas a tener que modificar la tabla de interrupciones que empieza en 0000h:0000h  termina en 0000h:03FFh, para la interrupcion numero 61, esta interrupcion para  DOS es una interrupcion de usuario, puedas definir la direccion de tu rutina cargando el valor sobre los vectores de interrupcion, es decir cargar el valor 32200h en la direccion de vector ( 61h * 4 = 184h ) ya que ocupan 4 bytes cada direccion de interrupcion.

Entonces pienso que quedaria algo asi:

Código: ASM
  1.      ; Aca modifico la tabla de vectores, solo la int 61h
  2.                         ; Hago el INT 61h
  3.                         ; Y hago el INT 20h ( o 21h + AX = 0 )
  4.  
  5.      ORG 32200h
  6.  
  7.      ; Aca la rutina con un IRET

Seguramente antes de esos ejercicios te dieron cuales eran las directivas para hacerlo.
Y como ves no es a ciencia cierta lo que estoy diciendo, asi que deberias tomarlo con pinzas, esperar que alguien pueda responderte con mas seguridad, o buscar informacion por vos mismo.
« Última modificación: 13 de Marzo de 2018, 23:23:14 por KILLERJC »


 

anything