Apuntes Ensamblador
Apuntes Ensamblador
Apuntes Ensamblador
APUNTES IMPRESOS
MATERIA: ENSAMBLADOR
UNIDAD 1. Sistemas de numeración
Pre-fetch
Queues
Cachés
Pipelines
Superscalar designs.
BITS Y BYTES
Para los propósitos de referencia, los bits en un byte son numerados del 0 al 7 y
de derecha a izquierda
7 6 5 4 3 2 1 0
0 1 0 0 0 0 0 1
WORD. Un campo de 16 bits ( 2 Bytes ), los bits son numerados del 0 al 15 como
en las letras “PC”.
15 14 13 12 11 10 9 8 7 6 5 4 3 2 1 0
0 1 0 1 0 0 0 0 0 1 0 0 0 0 1 1
CODIGO ASCII
Los 8 bits de datos habilitan 28 (256 posibles combinaciones) de todos los bits en
“OFF”= 0000 0000 hasta todos los bits en “ON” 1111 1111 Para propósitos de
estandarización, típicamente adoptan el código ASCII (American Standar Code for
Information Interchange).
NUMEROS BINARIOS
ARITMÉTICA BINARIA
Adición Binaria.
0 + 0 = 0
0 + 1 = 1
1 + 0 = 1
1 +1 = 10
65 01000001
+42 + 00101010
107 01101011
60 00111100
+53 + 00110101
113 01110001
Números Negativos
Ejemplos de complemento a 2:
5 3 = 0011010 1
1 1 0 0 1 0 1 0 Complemento a 1
+ 1
1 1 0 0 1 0 1 1 = - 5 3 Complemento a 2
6 0 = 0011110 0
1 1 0 0 0 0 1 1 Complemento a 1
+ 1
1 1 0 0 0 1 0 0 = - 6 0 Complemento a 2
Sustracción binaria
0100000 1
+ 1101011 0
1
0001011 1
Multiplicación Binaria
1 x1=1
1 x 0 = 0
0 x 1 = 0
0 x 0 = 0
1010 x 10
10100
1 0 1 0 0 = 20
En efecto 2 x 10 = 20
Otro ejemplo
0010010 1
x 0000011 1
0010010 1
00100101
00100101 .
01000000 11 = 259
En efecto 37 x 7 = 259
REPRESENTACIÓN HEXADECIMAL
Hexadecimal - Binario
Ah = 10d
Octal – Binario
Binario - Octal
OPERACIONES LOGICAS
XOR
0 XOR 0 = 0
0 XOR 1 = 1
1 XOR 1 = 0
1 XOR 0 = 1
0 OR 0 = 0
0 OR 1 = 1
1 OR 0 = 1
1 OR 1 = 1
AND
1 AND 1 = 1
0 AND 1 = 0
0 AND 0 = 0
0 AND 0 = 0
Por ejemplo:
0011 0011
AND 0000 1111
0000 0011
y como se observa se esta filtrando la parte baja.
La operación sería AND 33h,0Fh
para obtener 03h
MNEMONICO
SEGMENTOS
3 PRINCIPALES SEGMENTOS
2. Code Segment
3. Data Segment
contiene: Algunos datos definidos, constantes y áreas que el programa
necesita.
(DS) Direcciona este Segmento
4. Extra Segment
Es para usos Especiales
Los Segmentos se dividen de la siguiente manera:
S.O
Stack
Segment
Data
Segment
Code
Segment
Extra
Segment
REGISTROS
AH AL
AX
1. SI: Source Index Uso: Algunas Operaciones de cadenas y se asocia con DS.
2. DI: Destination Index. Uso: Operaciones de Cadenas y se asocia con ES.
BANDERAS
16 BITS
OVERFLOW DIRECCION INTERRUPT TRAP SIGNO ZERO CA. AUX PARIDAD CARRY
COMPUTADORA BASICA
Unidad de Entrada
Unidad de Salida
Unidad de Memoria
Unidad Aritmética / Lógica
Unidad de Control
CONTROL UNIT
ALU BUS INTERFACE
EXECUTION UNIT UNIT
Datos y Instrucciones
Operandos Resultados a ejecutar
MEMORY UNIT
Cualquier otro programa escrito en algún lenguaje de programación tiene que ser
convertido al lenguaje de máquina nativo del CPU para correr en la computadora.
Un compilador es un programa que traduce los programas escritos en lenguaje de
programación a lenguaje de máquina de una arquitectura de computadora
particular.
EU: EXECUTION UNIT BIU: Bus Interface Unit
AH AL PROGRAM CONTROL
BH BL
CH CL CS
DH DL
SP DS
BP SS
SI ES
DI
BUS
COTROL
UNIT
ALU
1
CU
2 Cola de
FLAG REGS 3 Instrucciones
4
.
.
INSTRUCTION POINTER
A.L.U.
E.U. tiene 3 secciones: C.U.
10 Registros
0001 0111
0000 0000
0000 0011
0 4 B Ch 0 0 0 3h = 0 4 BCFh
CS= 0 4 B C
04BD
04BE
04BF
04C0
Operación:
DIRECCIONAMIENTO INMEDIATO
Ejemplo:
Operación
AL
0000 0110
0000 0100
DIRECCIONAMIENTO DIRECTO
AX
n+2
n+1
n
[DS] + ‘F01h
[DS] + ´F00h
DIRECCIONAMIENTO INDIRECTO
Operación:
DI DS
0FAB
SI
001C
0000 0001
DIRECCIONAMIENTO BASE
Operación:
DS
0111 0000 n+2
AX 0100 0111 n+1
0000 0011 n
0000 1111
DIRECCIONAMIENTO INDEXADO
SI
0000 1111
0070
0000 0000
1001 0100 n+3
n+2
0000 0011
DX n n+1
n DS
DIRECCIONAMIENTO BASE-INDEXADO
Ejemplo:
BX
SI
AL 0011 0010
0100 0000 DS
0000 0010
UNIDAD 3. Programación en Ensamblador: grupo de instrucciones
3. 1Transferencia de datos
Las instrucciones de transferencia de datos son las encargadas de mover datos de un byte
o de una palabra de un sitio a otro de la computadora como pueden ser la memoria, el
espacio de E/S y los registros del CPU. La Tabla 1 lista estas instrucciones y da una breve
nota sobre la operación de cada una de ellas.
PUSH y POP son instrucciones importantes utilizadas para meter o sacar datos del
Segmento de Stack que tiene una estructura de pila. Solo acepta registros de 16 bits como
argumento. La ejecución de instrucciones PUSH y POP, está relacionada con los
apuntadores SP y BP:
SP: Stack Pointer. Uso: Permite Implementación de un Stack en memoria. Asociado con el
registro SS para direccionar el Stack.
BP: Base Pointer. Uso: Facilita la referencia a parámetros (datos y direcciones vía Stack)
INSTRUCCIÓN PUSH
Instrucciones a ejecutar:
SS
PUSH AX 1389
PUSH BX
PUSH CX SP (Tope de la pila)
FFE8
1389 :FFE8
1389:FFE9
4B
1389:FFEA
CA
1389:FFEB
34
1389:FFEC
EF
1389:FFED 15
1389:FFEE 1B
INSTRUCCIÓN POP
La instrucción POP realiza lo inverso a la instrucción PUSH. POP remueve y extrae datos de
la pila a un registro, indicado en el argumento de la instrucción. Después de dos bytes
fueron extraídos de la pila, el apuntador de pila (SP) es incrementado en 2.
SS
1389
Instrucciones a ejecutar:
POP AX
POP BX 1389 :FFE8
1389:FFE9
SP 1389:FFEA
1389:FFEB
FFEC 1389:FFEC
1389:FFED 15
1389:FFEE 1B
PUSHF
POPF
LAHF
Carga el registro AH con banderas, LAHF copia el byte de orden inferior del registro de
banderas en AH. Después de la ejecución de esta instrucción, los bits 7,6,4,2 y 1 de AH son
iguales a las banderas S, Z, A, P y C respectivamente.
SAHF
IN y OUT
PUERTOS:
Conectan al procesador al Mundo Externo.
Reciben una señal.
Envían una señal a dispositivos ( pantalla)
Aunque extravagante el procesador puede manejar hasta 65,563 puertos.
Cada puerto tiene un número único empezando por el puerto 0.
E/S se realiza directamente a nivel de puerto
Sintaxis
IN PUERTO, reg
Out puerto, reg
El puerto puede ser especificado de manera estática directamente dado como operando el
número de puerto en el rango de 0 a 256.
Ejemplo:
IN
AL,
port
#
Out
#por
t ,ax
Otra opción es dar el número de puerto Dinámicamente a través del uso de una variable:
Indirectamente por el contenido del Registro DX.
Mov AL,
byte
Mov DX,
#puerto
OUT
DX,AL
La Tabla 2 muestra una lista de la formas de las instrucciones IN y OUT. Note que solo el
registro AL y AX están siendo utilizados para la transferencia de datos entre los
dispositivos de E/S y el microprocesador. La instrucción IN transfiere un dato desde un
puerto E/S al registro AL o AX, y la instrucción OUT transfiere una dato del registro AX o
AL a un puerto de E/S.
Existen dos formas para el direccionamiento de puertos con la instrucción IN y OUT las
cuales son: puerto fijo y puerto variable. El direccionamiento con puerto fijo permite la
transferencia de datos entre AL o AX y un puerto de E/S con dirección de 8 bits. Se le llama
direccionamiento "puerto fijo" porque la dirección de puerto se almacena con la instrucción
(análogamente al direccionamiento inmediato).
XCHG
XLAT
LEA
En una comparación de la instrucción LEA con MOV se puede observar lo siguiente: LEA
BX,[DI] carga la dirección especificada por [DI] (contenido de DI) en el registro BX.
LDS y LES
Ejemplo:
; AX = F-34
MOV AX, F
SUB AX, 34
Estas instrucciones afectan a los bits OF, SF, ZF, AF, PF, CF del registro de estado.
INSTRUCCIÓN NEG
Realiza la operación aritmética de negado de un operando y guarda el resultado en el
mismo operando. Combina el signo de positivo a negativo y de negativo a positivo, para
ello realiza un complemento a 2. Admite todos los tipos de direccionamiento, excepto
inmediato.
NEG reg
NEG mem
Ejemplo:
MOV AX, FFF0h
MOV BX, 3
MUL BX ;DX:AX = FFF0h*3
AX FFD0
AX FFF0
BX 0003
BX 0003
DX 0002
Ejemplo:
MOV AX, FFF1h
MOV BX, 7
DIV BX
FFF5 AX 2490
AX
BX 0007
BX0007
DX 0005
INTRUCCIONES LÓGICAS
Realizan las operaciones lógicas y son: OR, XOR, AND, NOT, TEST, CMP
Estas operaciones son bit a bit. La tabla de verdad cada una de estas funciones es:
0 0 0 0 0
0 1 0 1 1
1 0 0 1 1
1 1 1 1 0
Admiten todos los modos de direccionamiento excepto los dos operandos en memoria.
INSTRUCCIÓN AND
Afectan a los bits SF, ZF, PF del registro de estado. Además ponen a cero los bits CF y OF.
Podemos utilizar la operación AND para filtrar o enmascarar bits. Por ejemplo, suponga
que AL=53h, si deseamos enmascarar la parte más baja de AL, se requiere conformar una
máscara cuyo valor sea 0Fh, tal que permita esta operación:
00000011 RESULTADO=03
INSTRUCCIÓN OR
Podemos utilizar la operación OR, por ejemplo si deseamos prender los bits impares,
suponga que AL=00h, ¿Cuál debería ser la máscara? La respuesta es máscara= 55h:
01010101 RESULTADO=55
INSTRUCCIÓN XOR
Podemos utilizar la operación XOR, por ejemplo si deseamos convertir código hexadecimal
de mayúsculas a minúsculas. Si se observa la tabla de ASCII, la diferencia entre el código de
mayúsculas a minúsculas es sólo el bit 5. El código de la A= 41h=0100 0001 y a=61h=01100
0001 ¿Cuál debe ser la máscara que convierta cualquier carácter de mayúsculas a
minúsculas y viceversa? La respuesta es, máscara= 20h:
01100001 RESULTADO=61
Note que el operador lógico XOR, también tiene la posibilidad de invertir en ambos
sentidos:
INSTRUCCIÓN NOT
Realiza la operación de negado lógico de los bits del operando, Cambia 0’s por 1’s y
viceversa, guardando el resultado en el mismo operando. Admite todos los modos
direccionamiento excepto inmediato. Las Banderas no se afectan.
NOT reg
NOT mem
INTRUCCIÓN TEST
Realiza la operación lógica “AND” de dos operandos, pero NO afecta a ninguno de ellos,
SÓLO afecta al registro de banderas. Admite todos los tipos de direccionamiento excepto
los dos operandos en memoria:
TEST reg, reg
TEST reg, mem
TEST mem, reg
TEST reg, inmediato
TEST mem, inmediato
Afecta a todos los bits del registro de banderas, de la misma manera que la instrucción
AND.
INTRUCCIÓN CMP
Internamente resta operando 2 del operando 1 pero no cambia los valores, los operandos
deben ser ambos byte o ambos word, sólo afecta al registro de banderas. Admite todos los
modos de direccionamiento, excepto los dos operando en memoria.
CMP reg, reg
CMP reg, mem
CMP mem, reg
CMP reg, inmediato
CMP mem, inmediato
Se usa con las instrucciones de salto.
3.3 Rotaciones y corrimientos
CORRIMIENTOS
MOV CL,03
MOV CL,03
MOV CL,03
La mayoría de los programas constan de varios ciclos en los que una serie de pasos se
repite hasta alcanzar un requisito específico y varias pruebas para determinar que acción se
realiza de entre varias posibles. Una práctica común es verificar si un programa está al final
de su ejecución. Requisitos como éstos implican la transferencia de control a la dirección
de una instrucción que no sigue de inmediato de la que se está ejecutando actualmente.
Una transferencia de control puede ser hacía adelante, para ejecutar una serie de pasos
nuevos, o hacia atrás, para volver a ejecutar los mismos pasos.
La forma más común para transferir el control en programas de lenguaje ensamblador es
usando instrucciones denominadas salto, dentro de los cuales están los “Saltos
incondicionales” y los “Saltos condicionales”.
Saltos incondicionales
Los saltos incondicionales saltan hasta la etiqueta destino de forma automática, quiere
decir que no necesita cumplir con algún tipo de condición.
SINTAXIS
JMP destino
EJEMPLO
1. JMP EtiquetaFin ; desde aquí saltará hasta las líneas 5 y 6.
2. mov ax,5 ; las líneas de la 2 a la 4 no se ejecutarán
3. mov bx,8
4. add ax,bx
5. EtiquetaFin:
6. mov dx,1 ; sí se ejecutará
Saltos condicionales
Para usar correctamente los brincos condicionales, es muy importante entender que hay
dos tipos de datos: Datos con signo y datos sin signo, entonces por ejemplo, dados los
valores de Ax y BX, ¿ Quién es mayor ? ¿ Es AX>BX ? o ¿Es BX > AX?:
Entonces, dependiendo de si un dato es considerado como dato con signo o sin signo, son
la instrucciones que usaremos, debido a que hay un grupo saltos condicionales para datos
con signo y un grupo de saltos condicionales para datos sin signo.
SINTAXIS
INSTRUCCIÓN JNE
1. CMP op1,op2 ; se realiza la comparación de los operandos op1 y op2
2. JNE Etiqueta ; si los operandos son diferentes desde aquí saltará hasta la línea 6
3. mov ax,5 ; caso contrario ejecutará desde la línea 3 hasta la línea 5
4. mov bx,8
5. add ax,bx
6. Etiqueta:
7. mov dx,1
INSTRUCCIÓN JZ
1. SUB op1,op2 ; se realiza la operación aritmética resta entre los operandos op1 y op2
2. JZ Etiqueta ; si el resultado es cero, entonces desde aquí saltará y ejecutará las líneas 6 y
7
3. mov ax,5 ; caso contrario ejecutará desde la línea 3 hasta la línea 5
4. mov bx,8
5. add ax,bx
6. Etiqueta:
7. mov dx,1
INSTRUCCIÓN JNZ
1. SUB op1,op2 ; se realiza la operación aritmética resta entre los operandos op1 y op2
2. JNZ Etiqueta ; si el resultado es diferente de cero, entonces saltará y ejecutará las líneas 6
y7
3. mov ax,5 ; caso contrario ejecutará desde la línea 3 hasta la línea 5
4. mov bx,8
5. add ax,bx
6. Etiqueta:
7. mov dx,1
3.4 Ciclos
Ejemplo de ciclos
Ejemplo del uso de LOOP para imprimir en pantalla una barra de caracteres ASCII en
cuadros de cuatro por cuatro:
X:MOV DL,2A
MOV AH,02
INT 21
LOOP X
Y:MOV DL,20
MOV AH,02
INT 21
LOOP Y
MOV AH,02
INT 21
MOV AH, 02
INT 21
POP CX
Dentro de la programación del lenguaje ensamblador, se considera que una de las fases
más importantes del desarrollo de cualquier programa es el proceso de depuración. Dicho
proceso adquiere aún más importancia al programar en ensamblador, dado que las
operaciones efectuadas son de muy bajo nivel y cualquier fallo puede provocar un
funcionamiento erróneo o incluso el fallo del sistema. Un ejemplo de un depurador es “
Debug” que funciona en plataforma del sistema operativo DOS y ejecuta líneas de
comandos accediendo a posiciones de memoria para editar código en lenguaje
ensamblador. Debug trabaja en el sistema hexadecimal para el ingreso de datos y para
visualizar sólo muestra los caracteres o símbolos disponibles en código ASCII.
Características de DEBUG:
› Despliega todo el código del programa y los datos en forma hexadecimal.
› Permite ejecutar un programa en modo de paso sencillo (un paso a la vez), de
manera que pueda ver el efecto de cada instrucción sobre las localidades de memoria y los
registros.
INSTALACIÓN DEL DEBUG
Los pasos a seguir para ejecutar los comandos del debug son los siguientes:
1. Ejecutar el DOSBox, al hacerlo aparecerá una pantalla como la de la figura 4, en la cual se
puede observar que la aplicación queda activa en la unidad Z.
2. Considerando que se tiene el archivo “debug.exe” en la carpeta Debug de la unidad C:\, el
siguiente paso es activar o “montar” la unidad y la carpeta, para que pueda ser reconocida
por la aplicación del DOSBox, tecleando la siguiente instrucción de la línea de comando del
DosBox (ver figura 5):
Mount c: c:\Debug
3. En la línea de comandos escribimos c: (ver figura 6). AL hacerlo cambiamos de la unidad Z a
la unidad C, y más específicamente al directorio Debug.
4. Finalmente, ejecutamos el depurador escribiendo el comando “debug”; al hacerlo aparecerá
un guion medio (-), que indica que ya esta activa la línea de comandos del depurado, como
se muestra en la figura 8.
Figura 4. Entorno de comandos del debug DosBox
Figura 5. Ejecución del comando “mount” para activar la unidad c,y el directorio Debug del
dico duro.
Figura 6. Instrucción para cambiar de unidad.
ASSEMBLE (A)
El comando A se usa para introducir mnemotécnicos de ensamblador y que éstos se
traduzcan directamente a lenguaje de máquina en memoria.
La sintaxis es
A <dirección>
Prácticamente cualquier mnemotécnico es soportado por DEBUG, incluyendo los
especificadores de "override" de segmento (CS:, DS:, ES:, SS:).
Ejemplo
- a 0100 Indica la dirección donde se empezarán a almacenar las instrucciones del programa
(ver figura 8)
DUMP (D)
Este comando despliega el contenido de una serie de localidades de memoria.
La sintaxis es:
D <dirección1> <dirección2>
ENTER (E)
Este comando permite cambiar los contenidos de localidades específicas de memoria.
La sintaxis es:
E <dirección> <cambios>
FILL (F)
Este comando llena un bloque de memoria con un valor específico o una serie de valores.
La sintaxis es:
F DS:0000 DS:00FF 0
F DS:0000 LFF 0
GO (G)
Este comando ejecuta el código en memoria. Si se está depurando un programa, permite
ejecutar el código cargado en memoria. También permite establecer puntos de quiebre
(breakpoints) que son direcciones en las que se detiene la ejecución del programa.
La sintaxis es:
G =<inicio> <quiebre1> <quiebre2> ... <quiebre10>
M <bloque> <dirección>
N <nomarch1< <nomarch2>
O <puerto< <valor>
QUIT (Q)
Este comando se usa para salir de DEBUG.
REGISTER (R)
Este comando despliega los registros del CPU y los valores de las banderas.
La sintaxis es:
R <registro>
<registro> es el nombre opcional y puede ser alguno de los siguientes: AX, BX, CX, DX, SP,
BP, SI, DI, DS, ES, SS, CS, IP, PC o F. IP y PC son sinónimos.
SEARCH (S)
Este comando permite buscar en un bloque de memoria una secuencia específica de
valores.
La sintaxis es:
S <bloque> <valor_a_buscar>
TRACE (T)
Este comando permite ejecución paso-a-paso de las instrucciones de máquina. Después
de cada instrucción se muestra el estado de los registros.
La sintaxis es:
T =<inicio> <cuenta>
UNASSEMBLE (U)
Este comando decodifica los valores de un grupo de localidades de memoria a
mnemotécnicos de 8086.
La sintaxis es la siguiente:
U <alcance>
04BC:0100
Realizar aritmética en formato ASCII o BCD sólo es adecuado para campos pequeños.
Para muchos propósitos aritméticos, es más práctico convertir tales números a formato
binario. De hecho, es más fácil convertir desde ASCII a binario, de manera directa, que
convertir de ASCII s BCD y luego binario.
El método de conversión, está basado en el hecho de que un número ASCII está en base
10 y la computadora realiza la aritmética en base 2. Aquí está el procedimiento:
1. Inicie con el byte de más a la derecha del número ASCII y procese de derecha a izquierda.
2. Quite el 3 del dígito hexadecimal de la izquierda de cada byte ASCII, para formar un número
BCD empaquetado.
3. Multiplique el primer dígito BCD por 1, el segundo por 10 (0Ah), el tercero por 100 ( 64h ) y
así sucesivamente, y sume los productos.
El ejemplo siguiente convierte el número ASCII 1234 a binario:
Decimal Hexadecimal
4x1 = 4 4 x 01h = 4h
3 x 10 = 30 3 x 0Ah = 1Eh
A 4D2 7B 4
A 7B C 3
A C 1 2
Como el cociente (1) ahora es menor que el divisor (0Ah) la operación está terminada. Los
residuos, junto con el último cociente forman el resultado BCD, de derecha a izquierda:
1234. Todo lo que resta por hacer es almacenar estos dígitos en memoria, con los 3 ASCII,
como 31323334.
UNIDAD 4. Interrupciones y Traps.
INTERRUPCIONES
Ejemplo de interrupción Trap. Connota la idea de alterar el flujo del programa cuando
una condición especial ocurre. Otros ejemplos de interrupción ocurren cuando sucede
un overflow, la función de la tecla Print Screen, división por cero, etc.
Tipos de Interrupciones
Hardware software
INT tipo_Interrupción
Cada Interrupción
- 2 Bytes de Segmento
- 2 Bytes de Offset
la suma de estos 4 bytes dan la dirección real del programa que contiene la rutina
de servicio asociada a cada interrupción.
VECTOR DE INTERRUPCIONES
CS Tipo 255
IP
.
.
.
Mov AH,35h
Mov AL,5h
Int 21h
Mov word PTR HOFFSET,BX
Mov word PTR LOFFSET,ES
Begin
Keyboard
Service
No Kb Action
Check
Keyboard
Status
Read in Key
Code Process
Key stoke
Int 9h Hardware
Int 16h Generada por Software que accesa la rutina de teclado de BIOS.
• Dentro de esta rutina del teclado del BIOS, es la rutina de S.I.
normalmente accesada por Int 9H.
• Las Interrupciones de Orden de Int 9H se llaman
Interrupciones mascarables.
• IF (bandera de interrupción habilitada ) se prende.
• En general si una interrupción ocurre durante la ejecución de
una Instrucción espera hasta que la Instrucción se complete
antes de tomar efecto, a excepción de repeat, lock, mov y pop.
• Las Interrupciones no mascarables usan la line signal NMI en el
Intel 8088. Esas Interrupciones no pueden ser deshabilitadas y
prácticamente se usan cuando ocurren eventos críticos de
tiempo que requieren atención del procesador.
[NOMBRE]بOPERACIONبOPERANDO[S]
132 Caracteres por Línea Máximo
RET
INC CX
ADD AX, 1249
PSEUDO-OPERACIONES[LISTADOS]
PAGE 60,132
10,255 60,132 Default PAGE - 66,80
TITLE Texto
PSEUDO-OPERACIÓN[SEGMENTO]
NOMBRE ENDS
X proc near
Ret
X endp
SEGNAME ENDS
NOMBRE: Es único
FAR: Indica al Cargador del Programa DOS que este PROC es el punto de
Entrada para ejecutar el programa.
PSEUDO-OPERACIÓN ASSUME
El procesador 8086 / 8088 usa SS, DS, y CS. Pero hay que Indicar al
ensamblador el propósito de cada segmento.
PSEUDO-OPERACIÓN END
END[PROCNAME]
INICIALIZACION DE UN PROGRAMA
Práctica de laboratorio:
END PRINCIPAL
4) MOV AX,DATASEG
MOV DS, AX
El cargador del Programa ha inicializado bien el SS y CS, pero el DS
hay que guardarlo nuevamente.
Formato General
[NOMBRE] Expresión
Opcional DB,DW,DD,DQ Y DT
VAR1 DB 25
FLD3 DB 11,12,13,14...
Ejemplos:
DW 10 DUP(?)
DB 5 DUP(14)
DB 3 DUP(4 DUP(8))
CADENAS DE CARACTERES
DB
línea. DB Carácter. Puede contener una cadena de longitud mayor que el fin del
DB Número. Puede contener una o más constantes.
DD. Define Doble word. Define campos que son doble-word en longitud
(4 Bytes)
FLD3 DW 12345
FLD4 DW FLD3DB_FLD2DB
CORRIMIENTOS: RCL,RCR,ROL,ROR,SHL,SAR,SHR
LÓGICOS: AND,OR,TEST,XOR
PSEUDO-OPERACIÓN EQU
Define un valor que puede usarse para sustituir en otras Instrucciones a
diferencia de los otros, no define un dato de campo.
TIMES EQU 10
Si TIMES aparece en otra PSEUDO-INSTRUCCIÓN el ensamblador sustituye
el valor de 10.
7 6 5 4 3 2 1 0
ATRIBUTO BL R G B I R G B
Flash Background Intensity Foreground
Atributos Comunes
Int 10h
MOV AH,02
MOV BH,00
MOV DX,Ren/Col
Int 10h
AH = 03 Lee la posición actual del cursor.
MOV AH,03
MOV BH,00
Int 10h
Por ejemplo:
Cad DB ‘Hola’,’$’
MOV SI , 0
Mov CONT , 0
Etiq: Mov AH,09h
Mov AL, CAD[SI]
Mov BH, 00
MovBL, 87h
Mov CX,1
Int 10h
Inc SI
Dec CONT
JNZ Etiq
1. Abel, P(2001). IBM PC Assembly Language and Programming (5ta. Edición). USA, Prentice Hall
2. Yale, N, P(2004). Introducción a los Sistemas de Cómputo (2ª. Edición). México: McGraw Hill.
3. Kip Irvine(2014). Assembly Language for x86 Processors (7th Edition) 7th Edition. Prentice-Hall
(Pearson Education)
4. aniel Kusswurm(2014). Modern X86 Assembly Language Programming: 32-bit, 64-bit, SSE, and
AVX. Apress.