1 Etapas de solución de un problema
2 Módulo o secciones de un algoritmo
3
4
5
6
7
8
9
10
11 Comandos de debug
12
13
14
15 -n conteo.asm
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32 Dirección de memoria de la que se ha leído el código CS : Desplazamiento Bytes que hay a partir de esa zona de memoria, la instrucción en código máquina ejecutables directamente del procesador Conversión a ensamblador que efectúa debug a partir de la 2da. columna
33 Comandos debug
34 Ejemplo: Al= perimetro Ch= base Bx=altura Si al: 10 ch: 05 Add al,ch 15 Mul 2 2A
35
36 Diagrama de flujo si entonces
37 Crear un programa que determine que número es mayor o son iguales inicio a,b El mayor es a fin a>b ab entonces bh=1 Si b>a entonces bh=2 Si a=b entonces bh=0
38
39
40
41
42
43 Estructura de selección múltiple
44 inicio opc,a,b opc c=a+bc=a*bc=a-bc=a/b 1 23 default c fin Crear un programa que dada una opción(opc) y los operandos (a,b)realice las siguientes operaciones Si opc=1 entonces c=a+b Si opc=2 entonces c=a-b Si opc=3 entonces c=a/b en caso contrario c=a/b Si ch=opc al=operando 1 ah=operando 2 Mov ch,01 Mov al,10 Mov ah,02 //mov ch,02 Cmp ch,01 Jnz resta Add al,ah Jmp fin resta: cmp ch,02 Jnz division Sub al,ah Jmp fin division: cmp ch,03 Jnz mult Div ah Jmp fin mult: mult ah Fin: nop
45
46
47
48
49
50 Estructuras de repetición For(valor inicial; condición;incremento) { } While(condición){ } Do{ }while(condición)
51 for
52 while
53 Práctica de banderas
54 Conversión ASCII HEXADECIMAL Num letra 30 carácter 39 41 carácter 46 57
56 Conversión HEXADECIMAL ASCII ABCDEFABCDEF +37 0...90...9 +30 A +37 41 Ejemplo:
57 Rutinas y llamados F Llamada a una subrutina Terminación de un programa (dos) Fin de una subrutina retorno el control a la siguiente instrucción de donde se llamo
58 Escritura Carácter Mov AH,02 Int 21 ret Espera entrada proveniente del teclado, la exhibe y la coloca en el registro AL Lectura Carácter Mov AH,01 Int 21 ret El carácter a escribir debe estar en DL
59 Empaquetamiento 2 números push cx lee (al) ascii-hex(al) Mov cl,04 Shl al,cl Mov ch,al lee (al) ascii-hex(al) Add al,ch Pop cx ret
60 Desempaquetamiento 2 números (para escribir en pantalla) push cx Mov dh,dl Mov cl,04 Shr dl,cl Hex-ascii (dl) Escribir(dl) Mov dl,dh And dl,0f Hex-ascii (dl) Escribir(dl) Pop cx ret Suponiendo que el dato lo recibe en dl
61 Uso del segmento de datos
62
63 Buscar una Letra -500 ‘no se encontro’ 0d 0a ‘$’ -600 ‘si se encontro’ 0d 0a ‘$’
64 F Llamada a una subrutina Terminación de un programa (dos) Fin de una subrutina retorno el control a la siguiente instrucción de donde se llamo
65 ABCDEF
66 Ejemplo de uso DS
67 Mostrar los datos del DS $
68 Funciones bios int 10h [screen] gotoxy Mov ah,02 ;solicitud iniciar el cursor Mov bh,00 ;screen #0 Mov dh,05 ;ren 5 h Mov dl,12 ;col. 12 h (18 d ) Int 10
69 before after C Dos clrscr(); >cls Mov ax,0600 ;ah 06(scroll), al 00 (full screen) Mov bh,07 ;noraml attribute (black & white) Mov cx,0000 ;upper left row/col Mov dx,184f ;lower right row/col Int 10 ;interrupt– exit to bios
70 Introducción a masm Comments 1. ;This entire line is a comment 2.ADD AX,BX ;comment on same line as instruction Coding Format The en general format an Assembler instruction is the is the following [name] operation operand(s) Ejem: NameOper’sOperand COUNTERDB1;Name, operation, one operand MOVAX,0;Operation, two operands
71 Name A name in Assembler lenguage can use the following characters:
72
73
74
75
76
77
78
79
80
81
82
83 Usando Turbo Assembler
84
85
86
87
88
89 Compilador modo dos usando masm y link
90
91 Ejemplo
92
93 Compilación modo usando ml.exe dos con errores
94
95
96
97 Compilando usando AssemblerEditor, ml y link
98
99
100
101
102 Ensamblando con nasm Para ensamblar un archivo en assembler con nasm debemos ejecutar la siguiente instrucción: nasm -felf rapidas.asm Donde 1.rapidas.asm es nuestro archivo assembler en cuestión 2.la opci´on -felf indica que el formato del archivo objeto será ELF (el más común para Linux). Aquí también se podría haber utilizado la opción -o rapidas.o pero nasm por omisión utiliza ese archivo como destino. Nuevamente, si tuviéramos varios archivos en lenguaje ensamblador que utilizan funciones entre ellos, debemos ensamblarlos por separado y obtener así un archivo objeto para cada.
103
104
105 Linkeando todo para obtener el ejecutable
106
107
108
109
110
111
112
113
114
115
116 Sort.asm i j j i+1 dl table1(i) bl table1(j) dl
117 Compilando sort.asm con masm
118
119
120
121 Instrucciones de cadenas movsMueve un byte, palabra o palabra doble desde una localidad de memoria a otra lodsCarga desde memoria un byte en el al, una palabra en el AX o un palabra doble en EAX stosAlmacena los registros AL, AX, o EAX en memoria CmpsCompara localidades de memoria de un byte, palabra o palabra doble scasCompara el contenido de AL, AX, o EAX con el contenido de una localidad de memoria repUna instrucción asociada a REP provoca que una instrucción para que cadena se realice de manera repetitiva un numero especifico de veces. Ejem: string1 db 20 dup(‘*’); string2 db 20 dup(‘*’); …. cld Lea di,string2 ; Lea si, string1 Rep movsb jcxz Label1: mov al,[si] mov[di],al inc di inc si loop label1
122 Cadenas en ensamblador usando masm
123
124
125
126 Matrices
127
128
129
130
131 Archivos (escritura)
132
133
134
135
136
137 antes Después
138 Archivos (lectura)
139
140
141
142