Ensamblador

  0   1   2   3   4   5   6   7   8   9   10

4 Vamos a ver diferentes ejemplos de instrucciones para entenderlas un poco mejor. Será bueno tener un libro al lado para saber qué hace cada instrucción.
  1. Ejemplo de las instrucciones: CBW y CWD
    ;------------------------------------------------------------------------------ ;Definicion del segmento de pila ;------------------------------------------------------------------------------ PILA SEGMENT STACK "STACK" db 40h dup(0) PILA ENDS ;------------------------------------------------------------------------------ ;Definicion del segmento de codigo ;------------------------------------------------------------------------------ CODE SEGMENT assume CS:code, SS:pila START: mov ah,3 ;No sirve para nada, solo para ver que al convertir ;en palabra o doble palabra se machacan los registros mov al,5 cbw ;Convertir un byte en palabra cwd ;Convertir una palabra en doble palabra neg al ;al pasa a ser un numero negativo (complemento a 2) mov ah,4 ;basura, igual que en caso anterior cbw ;Convertir un byte en palabra cwd ;Convertir una palabra en doble palabra mov ax,4C00h int 21h CODE ENDS END START
  2. Ejemplo de la instruccion: AAM (ajuste ASCII en multiplicación)
    ;------------------------------------------------------------------------------ ; Programa que prueba la instruccion: AAM ; ; ah <- cociente (al/10) ; al <- resto (al/10) ; ;------------------------------------------------------------------------------ ;------------------------------------------------------------------------------ ;Definicion del segmento de codigo ;------------------------------------------------------------------------------ CODE SEGMENT assume CS:code START: mov al,9 mov cl,5 mul cl ;Resultado: ax=002D aam ;En el cociente hay un 4 y en el resto un 5 ;Resultado es ax=0405 mov ax,4c00h int 21h CODE ENDS END START
  3. Ejemplo de la instruccion: AAA (ajuste ASCII en suma)
    ;------------------------------------------------------------------------------ ; Programa que muestra el uso de la instruccion AAA. Esta instruccion convierte ; el contenido de AL en un numero decimal ASCII (desempaquetado) tras una ; instruccion de suma. Se utiliza para ajustar el resultado despues de una suma ; de dos numeros decimales en formato ASCII ;------------------------------------------------------------------------------ ;------------------------------------------------------------------------------ ;Definicion del segmento de pila ;------------------------------------------------------------------------------ PILA SEGMENT STACK "STACK" db 40h dup(0) PILA ENDS ;------------------------------------------------------------------------------ ;Definicion del segmento de codigo ;------------------------------------------------------------------------------ CODE SEGMENT assume CS:code,SS:pila START PROC mov ax,8 ; add al,1 ; aaa ;AX=0009h mov ax,8 ; add al,2 ; aaa ;AX=0100h mov ax,11110001b ; add al,1 ; aaa ;AX=0002h mov ax,8 ; add al,7 ; aaa ;AX=0105h add al,4 ; aaa ;AX=0109h add al,9 ; aaa ;AX=0208h mov ax,4C00h ; int 21h ;Terminar el programa START ENDP CODE ENDS END START
  4. Ejemplo de la instruccion: AAA (ajuste ASCII en suma). Del examen de ETCII del año 2001:
    ;------------------------------------------------------------------------------ ; Programa que prueba la instruccion: AAA ; ; ah <- cociente (al/0Ah) ; al <- resto (al/0Ah) ; ;------------------------------------------------------------------------------ ; Ejercicio: examen ETCII - 7/11/01 ;------------------------------------------------------------------------------ ;Definicion del segmento de codigo ;------------------------------------------------------------------------------ CODE SEGMENT assume CS:code start: mov ax,16h mov bx,191h add ax,bx aaa ;AX=0107h add ax,7h aaa ;AX=0204h mov ax,4c00h int 21h CODE ENDS END START
  5. Ejemplo que muestra la diferencia entre las instrucciones: AAA y DAA
    ;------------------------------------------------------------------------------ ; Programa que prueba las instrucciones: AAA y DAA ;------------------------------------------------------------------------------ ;------------------------------------------------------------------------------ ;Definicion del segmento de pila ;------------------------------------------------------------------------------ PILA SEGMENT STACK "STACK" db 40h dup(0) PILA ENDS ;------------------------------------------------------------------------------ ;Definicion del segmento de codigo ;------------------------------------------------------------------------------ CODE SEGMENT assume CS:code, SS:pila START: mov al,5 add al,7 aaa ;Ajuste BCD no empaquetado xor ax,ax mov al,5 add al,7 daa ;Ajuste BCD empaquetado mov ax,4C00h int 21h CODE ENDS END START
  6. Ejemplo de la instrucción NEG (convertir a complemento a 2):
    ;------------------------------------------------------------------------------ ;Definicion del segmento de pila ;------------------------------------------------------------------------------ PILA SEGMENT STACK "STACK" db 40h dup(0) PILA ENDS ;------------------------------------------------------------------------------ ;Definicion del segmento de codigo ;------------------------------------------------------------------------------ CODE SEGMENT assume CS:code, SS:pila START: mov al,8 neg al ;Convertir a su complemento a 2 mov ax,4C00h int 21h CODE ENDS END START
  7. Otra forma de convertir a complemento a 2 mediante las instrucciones NOT e INC:
    ;------------------------------------------------------------------------------ ;Definicion del segmento de pila ;------------------------------------------------------------------------------ PILA SEGMENT STACK "STACK" db 40h dup(0) PILA ENDS ;------------------------------------------------------------------------------ ;Definicion del segmento de codigo ;------------------------------------------------------------------------------ CODE SEGMENT assume CS:code, SS:pila START: mov al,8 not al ; inc al ;Convertir a su complemento a 2 mov ax,4C00h int 21h CODE ENDS END START

www.victorsanchez2.com
victorsanchez2 en gmail.com
victorsanchez2 en jabberes.org
http://www.linkedin.com/in/victorsanchez2
victorsanchez2.asc (Huella digital: 4D05 8831 CB70 5F22 D836 73FF BA0A 5C66 BBB9 AC5A)
Tf: 659 35 74 53

Valid XHTML 1.0 Transitional