Lectura y escritura de un caracter - cs.buap.mxhilario_sm/slide/ensamblador 2012-ok... · Cuando se...
Transcript of Lectura y escritura de un caracter - cs.buap.mxhilario_sm/slide/ensamblador 2012-ok... · Cuando se...
![Page 1: Lectura y escritura de un caracter - cs.buap.mxhilario_sm/slide/ensamblador 2012-ok... · Cuando se necesitan múltiples campos de un mismo tamaño y asociados entres si, lo que en](https://reader031.fdocuments.mx/reader031/viewer/2022022622/5bb23b7409d3f206648bb8d8/html5/thumbnails/1.jpg)
Lectura y escritura de un caracter
![Page 2: Lectura y escritura de un caracter - cs.buap.mxhilario_sm/slide/ensamblador 2012-ok... · Cuando se necesitan múltiples campos de un mismo tamaño y asociados entres si, lo que en](https://reader031.fdocuments.mx/reader031/viewer/2022022622/5bb23b7409d3f206648bb8d8/html5/thumbnails/2.jpg)
Trabajando con cadenas en Debug
![Page 3: Lectura y escritura de un caracter - cs.buap.mxhilario_sm/slide/ensamblador 2012-ok... · Cuando se necesitan múltiples campos de un mismo tamaño y asociados entres si, lo que en](https://reader031.fdocuments.mx/reader031/viewer/2022022622/5bb23b7409d3f206648bb8d8/html5/thumbnails/3.jpg)
HerramientasEntorno Dos y WindowsMasm es el ensamblador mas usado en DOS y Windows, desarrollado por Microsoft,puede utilizarse para crear bibliotecas y controladores de dispositivos., existes otrosensambladores para Dos como son: TASM, NASM, ETC..
Entorno LinuxPara desarrollar programas ensamblador en Linux, deberemos elegir el compilador deensambladorque queremos utilizar. La elección lógica es usar GAS (as), el estándar quelleva toda distribución Linux.
GAS tiene la desventaja de utilizar la sintaxis AT&T, que difiere bastante de la sintaxisIntel (algo más sencilla). Una alternativa es utilizar NASM, que ofrece la mismafuncionalidad que GAS, pero utiliza la sintaxis de Intel.
Sin embargo, puesto que gcc utiliza as como ensamblador, conviene conocer ambassintaxis.
Así pues, los programas que hagamos en esta parte de las prácticas los desarrollaremosutilizando las herramientas NASM y GAS.
![Page 4: Lectura y escritura de un caracter - cs.buap.mxhilario_sm/slide/ensamblador 2012-ok... · Cuando se necesitan múltiples campos de un mismo tamaño y asociados entres si, lo que en](https://reader031.fdocuments.mx/reader031/viewer/2022022622/5bb23b7409d3f206648bb8d8/html5/thumbnails/4.jpg)
Sintaxis AT&T. Ensamblador de GNU
GAS (Gnu ASsembler) utiliza la sintaxis de AT&T, que tiene pequeñas diferencias conrespecto a la sintaxis estándar de Intel (usada en NASM, TASM, MASM, etc). Lasprincipales diferencias se detallan a continuación:
• En AT&T, a los nombres de los registros se les añade el prefijo %AT&T: %eax
I NTEL: eax
![Page 5: Lectura y escritura de un caracter - cs.buap.mxhilario_sm/slide/ensamblador 2012-ok... · Cuando se necesitan múltiples campos de un mismo tamaño y asociados entres si, lo que en](https://reader031.fdocuments.mx/reader031/viewer/2022022622/5bb23b7409d3f206648bb8d8/html5/thumbnails/5.jpg)
•En AT&T, el destino se coloca a la derecha y el fuente a la izquierda (en Intel es alrevés). Las siguientes instrucciones cargan en ebx el valor de eax
AT&T: movl %eax, %ebxINTEL: mov ebx, eax
• En AT&T, a los valores inmediatos se les añade el prefijo $ en el siguiente ejemplo,la primera instrucción carga la dirección de la variable en eax; la segunda carga elvalor 0F02h en ebx
AT&T: movl $var, %eaxmovl $0xf02, %ebx
INTEL: mov eax, offset varmov ebx, 0f02h
• En AT&T, el tamaño del resultado se especifica con sufijos (b, w o l) en lasinstrucciones (en Intel cuando hay ambigüedad se utiliza byte ptr, word ptr odword ptr). Si lo omitimos, GAS intentará “adivinar” el tamaño, y es algo que noqueremos que haga...
![Page 6: Lectura y escritura de un caracter - cs.buap.mxhilario_sm/slide/ensamblador 2012-ok... · Cuando se necesitan múltiples campos de un mismo tamaño y asociados entres si, lo que en](https://reader031.fdocuments.mx/reader031/viewer/2022022622/5bb23b7409d3f206648bb8d8/html5/thumbnails/6.jpg)
![Page 7: Lectura y escritura de un caracter - cs.buap.mxhilario_sm/slide/ensamblador 2012-ok... · Cuando se necesitan múltiples campos de un mismo tamaño y asociados entres si, lo que en](https://reader031.fdocuments.mx/reader031/viewer/2022022622/5bb23b7409d3f206648bb8d8/html5/thumbnails/7.jpg)
• Direccionamiento a memoria:Es uno de los aspectos que más cambian. Veamos la sintaxis de Intel para hacer undireccionamiento a base, con índice y desplazamiento:
[ base + indice*escala + desplazamiento ]en la sintaxis AT&T esto queda como sigue: desplazamiento ( base , indice , escala )Veamos dos ejemplos:
AT&T: movl array (, %eax, 4), %edxINTEL: mov edx, array[eax*4]AT&T: movl (%ebx) , %eax
movl 3(%ebx) , %eaxI NTEL: mov eax , [ebx]
mov eax,[ebx+3]• Salto lejano
AT&T: lcall $sección, $offsetljmp $sección, $offsetlret $V
INTEL: call far sección:offsetjmp far sección:offsetret far V
![Page 8: Lectura y escritura de un caracter - cs.buap.mxhilario_sm/slide/ensamblador 2012-ok... · Cuando se necesitan múltiples campos de un mismo tamaño y asociados entres si, lo que en](https://reader031.fdocuments.mx/reader031/viewer/2022022622/5bb23b7409d3f206648bb8d8/html5/thumbnails/8.jpg)
• Nemotécnico. Varían los nemotécnicos de algunas instruccionesAT&T: movswl %ax, %ecx
movzbw %ah, %cxcbtwcwtlcwtdcltd
INTEL: movsx ecx, axmovzx cx, ahcbwcwdecwdcdq
![Page 9: Lectura y escritura de un caracter - cs.buap.mxhilario_sm/slide/ensamblador 2012-ok... · Cuando se necesitan múltiples campos de un mismo tamaño y asociados entres si, lo que en](https://reader031.fdocuments.mx/reader031/viewer/2022022622/5bb23b7409d3f206648bb8d8/html5/thumbnails/9.jpg)
• Directivas del compilador.
![Page 10: Lectura y escritura de un caracter - cs.buap.mxhilario_sm/slide/ensamblador 2012-ok... · Cuando se necesitan múltiples campos de un mismo tamaño y asociados entres si, lo que en](https://reader031.fdocuments.mx/reader031/viewer/2022022622/5bb23b7409d3f206648bb8d8/html5/thumbnails/10.jpg)
![Page 11: Lectura y escritura de un caracter - cs.buap.mxhilario_sm/slide/ensamblador 2012-ok... · Cuando se necesitan múltiples campos de un mismo tamaño y asociados entres si, lo que en](https://reader031.fdocuments.mx/reader031/viewer/2022022622/5bb23b7409d3f206648bb8d8/html5/thumbnails/11.jpg)
;Programa Hola Mundo en ensamblador
;Compilador: MASM 6.15
;MASM (Microsoft Assambler)
;Programa para DOS bajo entorno Windows
;declaramos el segmento de pila
Pila segment stack 'stack'
db 128 dup (?)
Pila ends
;segmento de datos
Datos segment 'data'
Saludo db 'Hola mundo!!!Datos ends
;segmento de còdigo
Codigo segment 'code'
assume CS:Codigo, DS:Datos, SS:Pila
Main:
;lo primero es mover el segmento de datos al
;registro de segmento DS
mov ax, seg Datos
mov ds, ax
;Usamos la función 09h de DOS para mostrar una cadena
;La cadena debe estar en DX
mov dx, offset Saludo
mov ah, 9
int 21h
;devolveos el control al sistema operativo mediante la
;función 4Ch del DOS.
mov ah, 4Ch
int 21h
Codigo ends
end Main
![Page 12: Lectura y escritura de un caracter - cs.buap.mxhilario_sm/slide/ensamblador 2012-ok... · Cuando se necesitan múltiples campos de un mismo tamaño y asociados entres si, lo que en](https://reader031.fdocuments.mx/reader031/viewer/2022022622/5bb23b7409d3f206648bb8d8/html5/thumbnails/12.jpg)
Masm (DOS)
SS
DS
CS
![Page 13: Lectura y escritura de un caracter - cs.buap.mxhilario_sm/slide/ensamblador 2012-ok... · Cuando se necesitan múltiples campos de un mismo tamaño y asociados entres si, lo que en](https://reader031.fdocuments.mx/reader031/viewer/2022022622/5bb23b7409d3f206648bb8d8/html5/thumbnails/13.jpg)
Compilando masm usando ml
![Page 14: Lectura y escritura de un caracter - cs.buap.mxhilario_sm/slide/ensamblador 2012-ok... · Cuando se necesitan múltiples campos de un mismo tamaño y asociados entres si, lo que en](https://reader031.fdocuments.mx/reader031/viewer/2022022622/5bb23b7409d3f206648bb8d8/html5/thumbnails/14.jpg)
holanasm32.asm usando NASM en windows
![Page 15: Lectura y escritura de un caracter - cs.buap.mxhilario_sm/slide/ensamblador 2012-ok... · Cuando se necesitan múltiples campos de un mismo tamaño y asociados entres si, lo que en](https://reader031.fdocuments.mx/reader031/viewer/2022022622/5bb23b7409d3f206648bb8d8/html5/thumbnails/15.jpg)
Compilando y ejecutando con Nasmen Windows
![Page 16: Lectura y escritura de un caracter - cs.buap.mxhilario_sm/slide/ensamblador 2012-ok... · Cuando se necesitan múltiples campos de un mismo tamaño y asociados entres si, lo que en](https://reader031.fdocuments.mx/reader031/viewer/2022022622/5bb23b7409d3f206648bb8d8/html5/thumbnails/16.jpg)
![Page 17: Lectura y escritura de un caracter - cs.buap.mxhilario_sm/slide/ensamblador 2012-ok... · Cuando se necesitan múltiples campos de un mismo tamaño y asociados entres si, lo que en](https://reader031.fdocuments.mx/reader031/viewer/2022022622/5bb23b7409d3f206648bb8d8/html5/thumbnails/17.jpg)
hola.asm usando NASM en linux
![Page 18: Lectura y escritura de un caracter - cs.buap.mxhilario_sm/slide/ensamblador 2012-ok... · Cuando se necesitan múltiples campos de un mismo tamaño y asociados entres si, lo que en](https://reader031.fdocuments.mx/reader031/viewer/2022022622/5bb23b7409d3f206648bb8d8/html5/thumbnails/18.jpg)
Instalando NASM en Linux
![Page 19: Lectura y escritura de un caracter - cs.buap.mxhilario_sm/slide/ensamblador 2012-ok... · Cuando se necesitan múltiples campos de un mismo tamaño y asociados entres si, lo que en](https://reader031.fdocuments.mx/reader031/viewer/2022022622/5bb23b7409d3f206648bb8d8/html5/thumbnails/19.jpg)
![Page 20: Lectura y escritura de un caracter - cs.buap.mxhilario_sm/slide/ensamblador 2012-ok... · Cuando se necesitan múltiples campos de un mismo tamaño y asociados entres si, lo que en](https://reader031.fdocuments.mx/reader031/viewer/2022022622/5bb23b7409d3f206648bb8d8/html5/thumbnails/20.jpg)
Compilando y ejecutando con Nasmen Linux
![Page 21: Lectura y escritura de un caracter - cs.buap.mxhilario_sm/slide/ensamblador 2012-ok... · Cuando se necesitan múltiples campos de un mismo tamaño y asociados entres si, lo que en](https://reader031.fdocuments.mx/reader031/viewer/2022022622/5bb23b7409d3f206648bb8d8/html5/thumbnails/21.jpg)
hola.asm usando GAS
![Page 22: Lectura y escritura de un caracter - cs.buap.mxhilario_sm/slide/ensamblador 2012-ok... · Cuando se necesitan múltiples campos de un mismo tamaño y asociados entres si, lo que en](https://reader031.fdocuments.mx/reader031/viewer/2022022622/5bb23b7409d3f206648bb8d8/html5/thumbnails/22.jpg)
Compilando y ejecutando con GAS
![Page 23: Lectura y escritura de un caracter - cs.buap.mxhilario_sm/slide/ensamblador 2012-ok... · Cuando se necesitan múltiples campos de un mismo tamaño y asociados entres si, lo que en](https://reader031.fdocuments.mx/reader031/viewer/2022022622/5bb23b7409d3f206648bb8d8/html5/thumbnails/23.jpg)
![Page 24: Lectura y escritura de un caracter - cs.buap.mxhilario_sm/slide/ensamblador 2012-ok... · Cuando se necesitan múltiples campos de un mismo tamaño y asociados entres si, lo que en](https://reader031.fdocuments.mx/reader031/viewer/2022022622/5bb23b7409d3f206648bb8d8/html5/thumbnails/24.jpg)
![Page 25: Lectura y escritura de un caracter - cs.buap.mxhilario_sm/slide/ensamblador 2012-ok... · Cuando se necesitan múltiples campos de un mismo tamaño y asociados entres si, lo que en](https://reader031.fdocuments.mx/reader031/viewer/2022022622/5bb23b7409d3f206648bb8d8/html5/thumbnails/25.jpg)
![Page 26: Lectura y escritura de un caracter - cs.buap.mxhilario_sm/slide/ensamblador 2012-ok... · Cuando se necesitan múltiples campos de un mismo tamaño y asociados entres si, lo que en](https://reader031.fdocuments.mx/reader031/viewer/2022022622/5bb23b7409d3f206648bb8d8/html5/thumbnails/26.jpg)
![Page 27: Lectura y escritura de un caracter - cs.buap.mxhilario_sm/slide/ensamblador 2012-ok... · Cuando se necesitan múltiples campos de un mismo tamaño y asociados entres si, lo que en](https://reader031.fdocuments.mx/reader031/viewer/2022022622/5bb23b7409d3f206648bb8d8/html5/thumbnails/27.jpg)
![Page 28: Lectura y escritura de un caracter - cs.buap.mxhilario_sm/slide/ensamblador 2012-ok... · Cuando se necesitan múltiples campos de un mismo tamaño y asociados entres si, lo que en](https://reader031.fdocuments.mx/reader031/viewer/2022022622/5bb23b7409d3f206648bb8d8/html5/thumbnails/28.jpg)
![Page 29: Lectura y escritura de un caracter - cs.buap.mxhilario_sm/slide/ensamblador 2012-ok... · Cuando se necesitan múltiples campos de un mismo tamaño y asociados entres si, lo que en](https://reader031.fdocuments.mx/reader031/viewer/2022022622/5bb23b7409d3f206648bb8d8/html5/thumbnails/29.jpg)
![Page 30: Lectura y escritura de un caracter - cs.buap.mxhilario_sm/slide/ensamblador 2012-ok... · Cuando se necesitan múltiples campos de un mismo tamaño y asociados entres si, lo que en](https://reader031.fdocuments.mx/reader031/viewer/2022022622/5bb23b7409d3f206648bb8d8/html5/thumbnails/30.jpg)
![Page 31: Lectura y escritura de un caracter - cs.buap.mxhilario_sm/slide/ensamblador 2012-ok... · Cuando se necesitan múltiples campos de un mismo tamaño y asociados entres si, lo que en](https://reader031.fdocuments.mx/reader031/viewer/2022022622/5bb23b7409d3f206648bb8d8/html5/thumbnails/31.jpg)
![Page 32: Lectura y escritura de un caracter - cs.buap.mxhilario_sm/slide/ensamblador 2012-ok... · Cuando se necesitan múltiples campos de un mismo tamaño y asociados entres si, lo que en](https://reader031.fdocuments.mx/reader031/viewer/2022022622/5bb23b7409d3f206648bb8d8/html5/thumbnails/32.jpg)
Campos simples
La sintaxis para definir campos en el segmento de datos depende en parte del ensambladorusado, si bien casi siempre guardan cierta similitud, en el caso de NASM
Identificador db│dw│dd valor
Donde:
Identificador es una etiqueta o nombre que vamos a asignar a esa posición en el segmento dedatos, nasm no distingue entre mayúsculas y minúsculas.
db (define byte) en hexadecimal max +7F en decimal +127 a -128
dw (define word) ) en hexadecimal max +7FFF en decimal +32,767 a -32,768
dd (define double word) en hexadecimal max +7FFFFFFF en decimal+2,147,483,647 a -2,147,483,648
![Page 33: Lectura y escritura de un caracter - cs.buap.mxhilario_sm/slide/ensamblador 2012-ok... · Cuando se necesitan múltiples campos de un mismo tamaño y asociados entres si, lo que en](https://reader031.fdocuments.mx/reader031/viewer/2022022622/5bb23b7409d3f206648bb8d8/html5/thumbnails/33.jpg)
Conjunto de campos
Cuando se necesitan múltiples campos de un mismo tamaño y asociados entres si, lo que enotros lenguajes se conoce como matrices , arreglos o vectores, tenemos varias opciones, sepueden usar cualquiera de los campos simples (db, dw, o dd) con el repetidor times de nasm.Este precede al indicador y va seguido de un entero que comunica el número de veces que serepetira.
Ejem:
caracteres times 256 db ’?’
Si no necesitamos dar un valor inicial a cada uno de los bytes reservados , podemos usar lasintaxis siguiente
caracteres resb 256
Además de resb, para reservar bytes, también podemos usar resw y resd para reservar uncierto numero de palabras o dobles palabras.
![Page 34: Lectura y escritura de un caracter - cs.buap.mxhilario_sm/slide/ensamblador 2012-ok... · Cuando se necesitan múltiples campos de un mismo tamaño y asociados entres si, lo que en](https://reader031.fdocuments.mx/reader031/viewer/2022022622/5bb23b7409d3f206648bb8d8/html5/thumbnails/34.jpg)
Conjunto campos
![Page 35: Lectura y escritura de un caracter - cs.buap.mxhilario_sm/slide/ensamblador 2012-ok... · Cuando se necesitan múltiples campos de un mismo tamaño y asociados entres si, lo que en](https://reader031.fdocuments.mx/reader031/viewer/2022022622/5bb23b7409d3f206648bb8d8/html5/thumbnails/35.jpg)
![Page 36: Lectura y escritura de un caracter - cs.buap.mxhilario_sm/slide/ensamblador 2012-ok... · Cuando se necesitan múltiples campos de un mismo tamaño y asociados entres si, lo que en](https://reader031.fdocuments.mx/reader031/viewer/2022022622/5bb23b7409d3f206648bb8d8/html5/thumbnails/36.jpg)
![Page 37: Lectura y escritura de un caracter - cs.buap.mxhilario_sm/slide/ensamblador 2012-ok... · Cuando se necesitan múltiples campos de un mismo tamaño y asociados entres si, lo que en](https://reader031.fdocuments.mx/reader031/viewer/2022022622/5bb23b7409d3f206648bb8d8/html5/thumbnails/37.jpg)
Menu.asm
![Page 38: Lectura y escritura de un caracter - cs.buap.mxhilario_sm/slide/ensamblador 2012-ok... · Cuando se necesitan múltiples campos de un mismo tamaño y asociados entres si, lo que en](https://reader031.fdocuments.mx/reader031/viewer/2022022622/5bb23b7409d3f206648bb8d8/html5/thumbnails/38.jpg)