Inicio / Wikis / Cursos gratis / Curso de Asembler - Operaciones

Curso de Asembler - Operaciones

(8 opiniones)
Curso gratis creado por Pablo Barrón Ballesteros ( Wintermute ). Extraido de:
04 de Noviembre de 2005
Ensamblador

5 - Operaciones

    Las instrucciones INC y DEC:

Son las m s b sicas a la hora de hacer operaciones con registros: INC,

incrementa el valor de un registro ( o bueno, de cualquier posición en

memoria ) en una unidad, y DEC lo decrementa. Veamos:

INC AX

Incrementa en uno el valor de AX

INC WORD PTR [BX+4]

Incrementa la palabra situada en CS:[BX+4] en uno.

DEC AX

Decrementa AX, le resta uno.

DEC WORD PTR [BX+4]

Decrementa la palabra situada en CS:[BX+4] en una unidad.

Estas dos instrucciones, equivalentes a por ejemplo a "a++" en C, nos

servir n bastante como contadores ( para bucles ).

    Las instrucciones ADD y SUB

Se trata de dos operadores que contiene cualquier lenguaje de

programación: la suma y la resta. Tienen dos operandos, uno de destino y

otro fuente. Para la suma, se suman los dos operandos y se almacena en

el primero (destino), y para la resta, se resta al primero el segundo,

almacen ndose en destino, el primero. Aquí est n algunos formatos de ‚stas

instrucciones:

ADD AX,BX               ; Sumaría AX y BX y lo guardaría en AX

ADD [AX],BX             ; Suma el contenido de la dirección de AX a BX,

;y se almacena en la dirección de AX

ADD AX,[BX]             ; Se suman AX y el contenido de la dirección de

;BX, y se almacena ‚sta suma en AX

ADD AX,3                ; Lo mismo pero utilizando un valor inmediato

;en vez de la BX se¤alada anteriormente.

SUB CL,DL               ; Resta de CL el valor de DL, y se almacena en CL

SUB [CX],DX             ; Se resta al contenido de la dirección de CX

;el valor de DX, y se almacena en la dir. de CX

SUB CX,23h              ; Se resta de CX el valor 23h, y queda en CX el

;resultado

Os habr‚is dado cuenta de una cosa, ¨ y si el resultado excede lo que

puede contener el byte, o la palabra ?. sto se puede saber mediante los

flags, que trataremos m s adelante.

Tambi‚n os habr‚is fijado en que separ‚ con ; los comentarios. Bien,

‚sta es la manera en ensamblador de poner comentarios, como sería en Basic

la órden "REM", o en C la convención "/* [...] */"

    NEG, NOT y operaciones lógicas

Neg, pone el registro o el lugar al que apunta en memoria en negativo

según la aritm‚tica de complemento a dos tal que : NEG AX o NEG [AX]

Not es la que, como vimos, "invierte" los valores de los bits. Y el

resto de operaciones lógicas tambi‚n las vimos anteriormente. Pondr‚ ahora

tan sólo su sintaxis:

NOT SI                      ; (o Not AX, etc,... o sea, con un registro)

NOT Word ptr es:[ax]        ; Lo realiza sobre la palabra ( 2 bytes )

;que se encuentra en es:[ax]

AND AX,BX                   ; Efectúa un AND entre AX y BX, almacenando

;el resultado en AX ( siempre en el primer

;t‚rmino )

AND [AX],BX                 ; Lo dicho, pero AX apunta a un lugar de

;memoria

AND AX,[BX]

AND Byte ptr [15],3         ; Un AND en la dirección :0015 con lo que

;haya ahí y el valor "3"

OR  AX,BX

OR  [AX],BX

OR  Byte ptr [15],3

OR  DH,55h                  ;Tambi‚n podría hacerse en el AND, se

;confrontan DH y 55h en un OR.

Y todo lo dicho para OR y AND vale para XOR, de tal manera

que las operaciones son realizables entre:

Registro y registro                  CX,DX

Lugar de memoria y registro          [DX],BX

Registro y lugar de memoria          AX,[SI]

Lugar de memoria y número            word ptr ES:[AX],0D533h

Registro y número                    AX,0CD32h

    Multiplicación y división, MUL y DIV

Las pasar‚ algo r pido, ya que para nuestros objetivos no tienen una

necesariedad excesiva, al menos a corto plazo.

Estas operaciones multiplican al acumulador por el operando indicado.

Si el operando es de 8 bits ( 1 byte ), el acumulador es AL. Si el

operando es de 16 bits, el acumulador es AX. El resultado se almacena

en AX o en el par DX-AX respectivamente, si el operando es de 8 bits o

16 bits.

Tambi‚n tendremos que diferenciar entre dos tipos de multiplicaciones

y divisiones que entiende el procesador. Los que comienzan con una I

operan con números con signo ( ‚sto es, si queremos usar números negativos

y tal ), y los que no, con números sin signo.

Visto ‚sto, podremos decir que:

MUL Byte Ptr [CX]

Va a multiplicar el byte que hay en la dirección que marca CX por el

contenido que hay en AL, y una vez hecho ‚sto, va a almacenarlo en AX.

MUL SI

Multiplicaría SI por el contenido de AX, almacen ndose en el par AX-DX.

La palabra superior ( de m s valor ), se devolvería en DX, y la inferior

en AX.

IMUL SI

Esto y el ejemplo anterior sería lo mismo, sólo que operando con

números con signo.

Para la división, el dividendo ha de estar en AX ( y ser 16 bits por

tanto ). El divisor se indica en el operando, por ejemplo en DIV BL, ‚ste

divisor estaría en BL. Se dividiría AX entre BL y el resultado quedaría en

AL, quedando el resto en AH. Vamos a ver algún ejemplo que os veo muy

perdidos:

En la división de un número de diecis‚is bits entre otro de 8 bits, el

cociente y resto ser n de 8 bits ( 1 byte ). El dividendo ha de estar en AX,

y el divisor es el operando de la instrucción, que puede ser un registro o

un sitio en la memoria ( y se necesita poner lo de byte ptr )

O sea, sería tal que:

DIV CL          o       IDIV    BYTE  PTR ES:[BP]

El resultado se devuelve en AL, y el resto en AH. Si por ejemplo AX

valiese 501d y cl valiese 2, a hacer el DIV CL, en AL quedaría 255 y en AH

quedaría 1.

Se puede dividir tambi‚n un número de 32 bits ( 4 bytes ) entre otro de

16 bits ( 2 bytes ), con lo que cociente y resto serían de 16 bits. El

dividendo estaría formado por el par DX/AX. Al hacer por ejemplo un:

DIV SI

Se dividiría DX-AX entre SI, almacen ndose el resultado en AX, y el resto

en DX. Por ejemplo:

Si en DX est  el valor 003Fh y en AX 5555h, el par sería 3F5555h, con lo

que al dividirlo por SI ( que pongamos que vale 0CCC4h ), se almacenaría en

AX el resultado y en DX el resto.

Y ahora pasamos a una parte en la que hay algo de teoría y tal,...
Valora este capítulo: (8 opiniones)
Autor y licencia de 'Curso de Asembler - Operaciones'
Pablo Barrón Ballesteros ( Wintermute ) CopyLeft
Este contenido ha sido recopilado por el equipo de Wikilearning. Todo el contenido recopilado se ha obtenido respetando y comunicando en nuestro site la licencia de cada fuente.
Wikilearning tiene permiso expreso por escrito de los autores para publicar los contenidos que ha extraído de otras webs, incluyendo su uso comercial.

Opiniona sobre 'Curso de Asembler - Operaciones' (8)

Tu nombre debe tener tres caracteres como mínimo.
Es necesario que te des de alta con una cuenta de correo válida.
Es necesario que te des de alta con una cuenta de correo válida.
El contenido del título de tu opinión debe tener tres caracteres como mínimo.
Es obligatorio que selecciones una valoración del recurso.
El contenido del comentario de tu opinión debe tener tres caracteres como mínimo.

Opina sobre este curso gratis



* Valoración:
* Nombre:
* Correo electrónico:
* Título:
* Comentario:

Wikis relacionados con 'Curso de Asembler - Operaciones'

la Administración de Operaciones es el área de la Administración de Empresas dedicada tanto a... Más »
El objetivo de este curso es aprender a programar en el lenguaje Ada, desde sus... Más »
Excelente curso de iniciación a la astronomía para aquellos que quieran aprender sobre esta apasionante... Más »
La idea de este curso surgió de varias conversaciones entre amig@s de la cuadrilla y... Más »
Este es un curso tremendamente completo, guiado y con ejemplos y prácticas pensadas para convertirlo... Más »
¿Estás seguro de que deseas eliminar este capítulo?