18
2012
Programación en ensamblador (Resumen III) – Instrucciones

Definición de otros elementos
Con la directiva global hacemos visibles las subrutinas que hemos escrito en ensamblador:
global programa1, subprograma2
Con la directiva extern podremos utilizar variables definidas en C que utilizaremos desde ensamblador.
extern edad, nombre, altura
Instrucciones
En ensamblador disponemos de una serie de instrucciones, estas instrucciones pueden tener operandos. Por ejemplo, si queremos mover el contenido de R8 a R9 haremos lo siguiente:
mov R9, R8 (destino, fuente).
Si queremos incrementar el registro rax, haremos lo siguiente:
Inc rax (destino y fuente).
Y si queremos salir de una subrutina escribiremos:
ret (sin operandos).
push rbx (almacena el valor rbx en la pila).
pop rbx (pone el valor de la pila en rbx).
Las instrucciones pueden utilizar x operandos que en general vendrán definidas en cada instrucción.
Los operandos más habituales para datos son rax, rbx, rdx, rcx, r8 a r15.
Forma de las instrucciones
La forma de las instrucciones sigue la siguiente distribución:
[etiqueta:] instrucción [destino[, fuente]] [;comentario]
Estos son algunos ejemplos de instrucciones:
- mov ecx, eax
- jg while_pow
- jmp end_pow
Las Etiquetas
Definimos etiquetas como posiciones en el código programa a las que podemos acceder desde una instrucción de salto poniendo el nombre de la etiqueta:
Ejemplo:
jmp nombre_Etiqueta
La instrucción jmp irá a la posición del código en el que hayamos definido la etiqueta nombre_Etiqueta.
**Nota: NASM es case sensitive, por lo tanto distingue entre mayusculas y minusculas.
Juego de instrucciones
En ensamblador (NASM) podemos utilizar las siguientes instrucciones, la lista no está completa pero estas son las más generales:
Mover datos:
mov rbx,rdx (destino, fuente)
Introduce un dato en la cima de la pila:
push fuente:
Mueve el dato que hay encima de la pila al operador:
Pop destino:
Suma
add destino, fuente
Suma considerando el transporte
adc destino, fuente
Resta
sub destino, fuente
Resta considerando el borrow (transporte)
sbb destino, fuente
Incrementa
inc destino
Decrementa
dec destino
Multiplica sin tener en cuenta el signo
mul fuente
Multiplica teniendo en cuenta el signo
imul fuente
División entera sin signo
div fuente
División entera con signo
idiv fuente
Negación
neg destino
Comparación de dos operandos
cmp destino,fuente
Operaciones lógicas
and destino,fuente
or destino,fuente
xor destino,fuente
not destino (negación de cada bit)
Saltos
Salta a la etiqueta
jmp etiqueta
Salta a la etiqueta si el bit de cero está activo (jump equals)
je etiqueta
jne etiqueta (si no está activo)
Salta a la etiqueta si el bit de transporte está activo (jump carry)
jc etiqueta
jnc etiqueta (si no está activo)
Salta a la etiqueta si el bit de desbordamiento está activo (jump overflow)
jo etiqueta
jno etiqueta (si no está activo)
Salta a la etiqueta si el bit de signo está activo.
js etiqueta
jns etiqueta (si no está activo)
Cambios de secuencia
Llamar a una subrutina
call etiqueta
Retorno de una subrutina
ret
Llamada al sistema operativo
int servicio
Si queréis una tabla de instrucciones más completa podéis visitar esta web
Click on any of these buttons to help us to maintain this website.
Related Posts
3 Comments + Add Comment
Leave a comment
Encuéntralo aquí
Ayudas!
Entradas recientes
- Modificar el número de productos que muestra por página
- Problema Captcha Opencart
- Themes Opencart gratuitos
- Resolver el problema de Facebook “href URL must be absolute”
- Frameworks para el Desarrollo de páginas web IV
- Frameworks para el Desarrollo de páginas web III
- Frameworks para el Desarrollo de páginas web II
- Frameworks para el Desarrollo de páginas web I
- Big Table | No SQL
- Web 3.0
- Enviar emails utilizando el paquete UTL_HTTP de Oracle
- Realizar un import de un fichero .dmp (IMP)
- Problema con el boton Add to cart en Opencart
- Previsión de amenazas de seguridad en la red para 2013-2014
- Extensión Opencart para poner el precio con IVA
- Poner una página de mantemiento en tu web
- Formatear texto de un fichero con un Script Batch
- Crear un report con Oracle Reports
- Cloud Computing y Administración de servidores
- Tareas programadas en Linux (Cron)
Recientes
- samo: quiero saber como realizar la animacion de las rutas de un mapa es decir k se vaya dibujanto el mapa
- Ber: Hola Javier, Claro, hicimos una aplicación para Android (con Java) en la que el móvil enviaba los datos cada 20...
- Javier: Hola, muy interesante el codigo. Tengo una pregunta, sabes por casualidad o tienes alguna pagina de...
- frank: hice lo que publicaste hasta ahi genial pero cuando ingreso a sql plus deberia pedirme usuario y contraseña...
- Amaya: Supongamos que tenemos esta cadena en lenguaje ensamblador: cad DB “Hola mundo” deseo saber como...
Categorías
- Android (4)
- Bases de datos (75)
- Data Mining (2)
- MySql (3)
- Oracle (62)
- SGBD (4)
- Cajon desastre (4)
- Consolas (5)
- Desarrollo web (73)
- Blogger (1)
- Google Maps (3)
- Opencart (3)
- SEO (10)
- Wordpress (21)
- Ensamblador (13)
- Codigo (7)
- Facebook (API) (13)
- Adsense (1)
- Aplicación Test (1)
- Conectar con Facebook (3)
- Facebook en Español (2)
- Publicar Facebook (4)
- Flash (1)
- Flex (1)
- Forms (2)
- Hardware (18)
- Arquitectura (3)
- Iphone (5)
- Java (24)
- Android (1)
- JavaScript (17)
- Php (13)
- Proyectos Programación (10)
- Redes (22)
- Software (21)
- Ubuntu (6)
- Vb.net (4)
- Windows (1)
- XML (6)
Hl.
necesito el código para que me sume 2 numeros en lenguaje ensamblador, y que no los números los pida por teclado…. debe de aparecer esto al final:
La suma de los dos números ___ mas ____ es _____.
por favor si me puede ayudar
Quisiera saber con que herramientas puedo desarrollar codigo de ensamblador?
Supongamos que tenemos esta cadena en lenguaje ensamblador:
cad DB “Hola mundo”
deseo saber como se puede hacer para contar el número de caracteres de esa cadena e imprimir el resultado
Muchas gracias