Académique Documents
Professionnel Documents
Culture Documents
Alumnos:
Alumnos:
Introduccin 5
Objetivos 5
Marco Terico 10
Desarrollo de la practica 10
Asignaciones 40
Asignacin 1 6.67
Asignacin 2 6.67
Asignacin 3 6.67
Asignacin 4 6.67
Asignacin 5 6.67
Asignacin 6 6.67
Conclusiones 30
NOTA FINAL
INDICE
INTRODUCCION....................................................................................................................4
OBJETIVOS ............................................................................................................................... 4
DESARROLLO DE LA PRACTICA..................................................................................... 7
ASIGNACION 1 ....................................................................................................................... 9
ASIGNACION 2 .....................................................................................................................11
ASIGNACION 3 .................................................................................................................... 15
ASIGNACION 4 ................................................................................................................... 20
ASIGNACION 5 ..................................................................................................... 24
ASIGNACION 6 ................................................................................................................... 26
CONCLUSIONES ................................................................................................................. 30
INTRODUCCION
OBJETIVOS
Objetivo General:
Objetivos Especficos:
4
MARCO TEORICO
ESTRUCTURA INTERNA
5
La ventaja de esta divisin fue el ahorro de esfuerzo necesario para producir el
8088. Slo una mitad del 8086 (el BIU) tuvo que redisearse para producir el 8088.
6
se le resta dos, mientras que al extraer (pop) un valor de la pila este a registro se
le suma dos.
SI = Puntero ndice (no se puede subdividir). Sirve como puntero fuente para las
operaciones con cadenas. Tambin sirve para realizar direccionamiento indirecto.
DI = Puntero destino (no se puede subdividir). Sirve como puntero destino para
las operaciones con cadenas. Tambin sirve para realizar direccionamiento
indirecto.
DESARROLLO DE LA PRACTICA
org 1000h
mov [1000h],3
mov [1001h],6
add al,[1000h]
add al,[1001h]
mov [1002h],al
ret
7
Imagen:
Se inicia con direccionar el inicio del programa a 1000h, luego se ingresan los
valores a sumar en las direcciones 1000h y 1001h. Realiza la suma en el registro
al y finalmente lo direcciona a 1002h.
8
ASIGNACIONES
Cdigo:
9
Imgenes:
10
2. Disee un programa el cual solicite el ingreso de 10 caracteres (5 nmeros de
un digito y 5 letras, las cuales deben de ser vocales), los nmeros deben ser
almacenados en la tabla NUMS y las vocales en la tabla VCLS, y luego se deben
de mostrarse en pantalla los elementos de la tabla NUMS y de la tabla VCLS, en
el orden que fueron ingresado.
Cdigo:
11
39. int 21h
40.
41. cmp al,'a' ;Se validan los datos
ingresados
42. je ok
43.
12
92.
93. paro db " SOLO numeros" , 0Dh, 0Ah, "$"
94.
95. tabla db 10,13,10, 13," NUMS : " , "$"
96.
97. nums db 5 dup (?)
98.
99. cont db 0
100.
101. mssg2 db "Ingrese SOLO vocales: $"
102.
103. valida db " VALIDA", 0Dh, 0Ah, "$"
104.
105. detenerse db " SOLO vocales", 0Dh, 0Ah, "$"
106.
107. cont2 db 0
108.
109. VOC db 5 dup (?)
110.
111. 5vocales db "FIN", 0Dh, 0Ah, "$"
112.
113. tabla2 db 10, 13, 10, 13, " VOC : ", "$"
114.
115. nl db 10,13, " " ,0Dh, 0Ah, "$"
116.
117.
118. mov cx, 5
119.
120. salir: mov dl, offset tabla ; Muestra las tablas
en pantalla
121. mov ah, 9
122. int 21h
123. mov dl, nums
124. mov ah, 02h
125. int 21h
126. mov dl, nums+1
127. mov ah, 02h
128. int 21h
129. mov dl, nums+2
130. mov ah, 02h
131. int 21h
132. mov dl, nums+3
133. mov ah, 02h
134. int 21h
135. mov dl, nums+4
136. mov ah, 02h
137. int 21h
138. mov dx, offset tabla2
139. mov ah, 9
140. int 21h
141. mov dl, VOC
142. mov ah, 02h
143. int 21h
144. mov dl, VOC+1
145. mov ah, 02h
146. int 21h
147. mov dl, VOC+2
148. mov ah, 02h
149. int 21h
150. mov dl, VOC+3
151. mov ah, 02h
13
152. int 21h
153. mov dl, VOC+4
154. mov ah, 02h
155. int 21h
Imgenes:
Figura 5. Simulacin del programa de forma correcta, cumpliendo con todos los
parmetros del enunciado.
14
3. Disear un programa que almacene 4 nmeros, 2 en la tabla NUMS1 y 2 en
otra tabla NUMS2. Posteriormente realizar la suma, resta, multiplicacin y
divisin. Entre los elementos de las tablas y los resultados deben de ser
almacenados en la tabla RESUL de la siguiente manera.
Cdigo:
1. org 100h
2.
3. mov ax,0600h ;06 recorre la pantalla, 00 pantalla completa
4. mov bx,0f000h ;fondo blanco, letra negra
5. mov cx,0000h ;esquina superior izquierda reglon, columna
6. mov dx,184Fh ;esquina inferior derecha reglon, columna
7. int 10h ;llama al BIOS
8.
9. ;configurar cursor
10. mov ah,02h ;peticion para fijar cursor
11. mov bh,00 ;numero de pagina
12. mov dh,00 ;fila
13. mov dl,00 ;columna
14. int 10h ;llama al BIOS
15.
16. mov si,0 ;apunta a la primera direccion del tabla
NUMS_1
17. mov di,0 ;apunta a la primera direccion del tabla
NUMS_2
18. mov bx,0 ;da un valor a bx
19.
20. cptrdenums:
21. cmp si, 4 ;al ingresar 4 numeros se sale de este
bucle
22. je ops
23. mov ah,09h ;peticion para desplegar
24. lea dx,msg1 ;cargar la dirrecion de la indicacion
25. int 21h ;llama al DOS
26.
27. ;codigo para leer numero con eco
28. mov ah,01h ;peticion de leer numero, se guarda en al
29. int 21h ;llama al DOS
30.
31. cmp al,29h ;
15
32. jb ERROR ;
33. cmp al,30h ;Comprueba que el valor sea un digito
34. je ECERO ;
35. cmp al,39h ;
36. ja ERROR ;
37.
38. cmp si,1
39. ja tablaNUMS_2
40.
41. sub al,30h ;introduce el valor no el hexa del ascii
42. mov NUMS_1[si],al ;introduce el num en la tabla NUMS_1
43. inc si
44. loop cptrdenums
45.
46. tablaNUMS_2:
47. sub al,30h ;introduce el valor no el hexa del ascii
48. mov NUMS_2[di],al ;introduce el num en la tabla NUMS_2
49. inc si
50. inc di
51. loop cptrdenums
52. ;__________________________________________________________
53. ops:
54. mov cx,2 ;inicializa datos antes de las
operaciones
55. mov si,0
56. mov di,0
57. suma:
58. mov al, NUMS_1[si] ;adquiere los operandos de las tablas
59. mov bl, NUMS_2[si]
60. add bl,al
61. mov RESUL[di],bl ;guarda el resultado en la tabla
62. add di,4 ;salto de posicion en la tabla
63. inc si
64. loop suma
65.
66. mov cx,2
67. mov si,0 ;inicializa datos antes de las
operaciones
68. mov di,1
69. resta:
70. mov al, NUMS_1[si] ;adquiere los operandos de las tablas
71. mov bl, NUMS_2[si]
72. sub al, bl
73. mov RESUL[di],al ;guarda el resultado en la tabla
74. add di,4 ;salto de posicion en la tabla
75. inc si
76. loop resta
77.
78. mov cx,2
79. mov si,0 ;inicializa datos antes de las
operaciones
80. mov di,2
81. multiplicacion:
82. mov al, NUMS_1[si] ;adquiere los operandos de las tablas
83. mov bl, NUMS_2[si]
84. mul bl
85. mov RESUL[di],al ;guarda el resultado en la tabla
86. add di,4 ;salto de posicion en la tabla
87. inc si
88. loop multiplicacion
89.
16
90. mov cx,2
91. mov si,0 ;inicializa datos antes de las
operaciones
92. mov di,3
93. division:
94. mov al, NUMS_1[si] ;adquiere los operandos de las tablas
95. mov bl, NUMS_2[si]
96. mov ah,00h
97. div bl
98. mov RESUL[di],al ;guarda el resultado en la tabla
99. inc si ;salto de posicion en la tabla
100. add di,4
101. loop division
102.
103. ;Imprime resultados
104. mov cx,8
105. mov si,0
106. printRESUL:
107.
108. mov ah,09h
109. lea dx,msg2
110. int 21h
111.
112. mov ah,00h
113. mov al,RESUL[si] ;saca el resultado de su tabla
114. cmp al,81 ;corrobora que no sea negativo
115. ja negative
116. aam ;corrige resultado
117. mov bx,ax
118. add bl,30h ;corrige el valor del numero
119. add bh,30h
120. mov ah, 02h
121. mov dl,bh ;imprime
122. int 21h
123. mov ah, 02h
124. mov DL,BL ;imprime
125. int 21H
126. inc si
127. loop printRESUL
128. jmp salida ;manda a terminar el programa
129.
130. negative:
131. not ax
132. add ax,01h
133. aam
134. add ax,3030h ;corrige el valor
135. mov bx,ax
136. mov ah,09h
137. lea dx,msgneg ;imprime el simbolo negativo
138. int 21h
139. mov ah,02h
140. mov dl,bh ;imprime
141. int 21h
142. mov ah,2h
143. mov dl,bl ;imprime
144. int 21h
145. inc si
146. loop printRESUL
147. jmp salida ;manda a terminar el programa
148. ;_________________________________________________________
149. ECERO:
17
150. mov ah,09h ;Mensaje de advertencia,
151. lea dx,msgCERO ;ya que no hay division entre cero
152. int 21h
153. jmp cptrdenums
154. ;_________________________________________________________
155. ERROR:
156. mov ah,09h ;Mensaje de advertencia,
157. lea dx,msgERROR ;el dato ingresado no es un numero
158. int 21h
159. jmp cptrdenums
160. ;_________________________________________________________
161. salida:
162. hlt
163.
164. ;Variables
165. msg1 db 10,13,"Ingrese un numero:","$"
166. msg2 db 10,13,"El resultado es:","$"
167. msgneg db 10,13,"-","$"
168. msgERROR db 10,13,"ERROR, POR FAVOR INGRESAR UN NUMERO","$"
169. msgCERO db 10,13,"ERROR, POR FAVOR INGRESAR UN NUMERO
DISTINTO DE CERO","$"
170. NUMS_1 db 2 dup(?)
171. NUMS_2 db 2 dup(?)
172. RESUL db 8 dup(?)
Imgenes:
18
Figura 8. Comportamiento del programa, se observa que el programa es capaz de realizar
operaciones aritmticas con resultados negativos.
19
4. Disee un programa que almacene 5 nmeros en una tabla llamada NUMS,
que los compare, y muestre en pantalla cual es el promedio, y cul es el nmero
menor.
Cdigo:
1. org 100h
2.
3. mov ax,0600h ;06 recorre la pantalla, 00 pantalla completa
4. mov bx,0f000h ;fondo blanco, letra negra
5. mov cx,0000h ;esquina superior izquierda reglon, columna
6. mov dx,184Fh ;esquina inferior derecha reglon, columna
7. int 10h ; llama al BIOS
8.
9. ;configura el cursor
10. mov ah,02h ;peticion para fijar cursor
11. mov bh,00 ;numero de pagina
12. mov dh,00 ;fila
13. mov dl,00 ;columna
14. int 10h ;llama al BIOS
15.
16. mov si,0 ;apunta a la primera direccion de la tabla
17. mov cx,5 ;contador de # de datos obtenidos
18. cptrdenums:
19.
20. mov ah,09h ;peticion para desplegar
21. lea dx,msg1 ;cargar la dirrecion de la indicacion
22. int 21h ;llama al DOS
23.
24. ;codigo para leer numero con eco
25. mov ah,01h ;peticion de leer numero, se guarda en al
26. int 21h ;llama al DOS
27.
28. cmp al,29h ;
29. jb ERROR ;
30. cmp al,30h ;Comprueba que el valor sea un
digito
31. cmp al,39h ;
32. ja ERROR ;
33.
34. mov ah,0h
35. sub al,30h ;introduce el valor no el hexa del ascii
36. mov NUMS[si],al ;introduce el num en la tabla NUMS_1
37. inc si
38. loop cptrdenums
39. mov ah,09h
40. lea dx,msg2
41. int 21h
42.
43. mov si,0
44. mov di,0
45. mov ah,0
46.
47. mov al, NUMS[di]
48. comparador:
49. inc si ;cuando ya se haya comparado los 5 #s
50. cmp si,5h ;
20
51. je print ; se va a imprimir
52. mov bl, NUMS[si] ;
53. cmp al,bl ;compara el primer dato con el resto
54. jb menor
55. ja mayor
56. loop comparador
57.
58. menor: ;si el dato es el menor, se guarda
59. mov MEN[0],al ;y se sigue comparando el mismo #
60. jmp comparador
61.
62. mayor: ;si el dato es el mayor, se intercambian
63. mov bl,NUMS[di] ;para luego regresar y capturar siempre
64. mov al, NUMS[si] ;el menor
65. jmp comparador
66.
67. ;Imprime resultados
68.
69. print:
70.
71. mov bh,0h ;para evitar errores
72. mov bl,al
73. add bl,30h ;se corrige el valor
74. mov ah,06h
75. mov dl,bl ;se imprime
76. int 21h
77.
78. mov ah,09h
79. lea dx,msgprom ;imprime enunciado msgprom
80. int 21h
81.
82. mov cx,4
83. mov si,0
84. mov bx,0
85. mov bl,NUMS[si]
86. sum:
87. inc si
88. add bl,NUMS[si] ;sumatoria de los #s en bl
89. loop sum
90.
91. mov ah,0h ;para evitar errores
92. printprom:
93.
94. mov al,bl ;manda la sumatoria a al
95. mov bl,5
96. div bl ;obtiene el promedio
97. mov bl,al
98. add bl,30h ;corrige el dato
99. mov ah,06h
100. mov dl,bl ;imprime
101. int 21h
102. jmp salida
103.
104. ERROR:
105. mov ah,09h ;Mensaje de advertencia,
106. lea dx,msgERROR ;el dato ingresado no es un numero
107. int 21h
108. jmp cptrdenums
109. ;_________________________________________________________
110. salida:
111. hlt
21
112.
113. ;Variables
114. msg1 db 10,13,"Ingrese un numero:","$"
115. msg2 db 10,13,"El menor es:","$"
116.
117. msgneg db 10,13,"-","$"
118. msgERROR db 10,13,"ERROR, POR FAVOR INGRESAR UN NUMERO","$"
119. msgprom db 10,13,"El promedio es: ","$"
120. NUMS db 5 dup(?)
121. MEN db 1 dup (?)
Imgenes:
22
Figura 10. Aqu se observa que cuando la suma no da un mltiplo de 5, en este caso 17,
el programa aproxima al entero inmediato anterior.
23
5. Defina el registro de banderas y explique la funcin de cada bit que lo
conforma.
Las banderas proveen una manera de obtener informacin acerca de del estado
actual de la mquina y el resultado de procesamiento de una instruccin. El
registro de banderas es un registro de 16 bits, pero no todos los bits se usan.
Bandera de acarreo: CF (Carry Flag): este bit ser alterado en su valor (1 o 0) por
la ejecucin de instrucciones aritmticas. Para la suma y resta, cuando el resultado
exceda el tamao de los operandos manejados y el microprocesador no pueda
entregarlo en sus registros de tamao fijo, sta bandera detectar dicho bit y lo
almacenar hasta que se realice otra operacin de suma o resta. Para la suma se
le llama acarreo final y para la resta se le llama prstamo
24
Bandera de paridad PF (PARITY FLAG): este bit ser alterado en su valor por la
ejecucin de instrucciones aritmticas o lgicas. La paridad es detectada en el
byte menos significativo en el resultado de la operacin y checar cuantos unos
lgicos (1) existen. Si la cantidad de unos en impar (1,3,5,7), se detectar una
paridad IMPAR (ODD). Si la cantidad de unos es par (0,2,4,6,8), se detectar una
paridad PAR (EVEN).
Bandera de acarreo auxiliar AF (AUXILIARY CARRY FLAG): este bit ser alterado
en su valor por la ejecucin de instrucciones aritmticas. El acarreo auxiliar ser
detectado por el que se produce de las unidades a las decenas (o del bit 3 al bit
4), y no en el resultado. Esta bandera es utilizada principalmente en instrucciones
que convierten resultados de hexadecimal a decimal (BCD).
Bandera de cero ZF (ZERO FLAG): este bit ser alterado en su valor por la
ejecucin de instrucciones aritmticas y/o lgicas. La bandera de CERO ser
detectada cuando el resultado que se produce en la operacin sea cero (igual a
0) o diferente de cero (no 0).
Bandera de signo SF (SIGN FLAG): este bit ser alterado en su valor por la
ejecucin de instrucciones aritmticas y/o lgicas. El signo ser detectado cuando
el resultado que se produce en la operacin sea positivo o negativo. Este se
identifica en el bit ms significativo del resultado.
25
6. Investigar el uso de las siguientes instrucciones y realizar un pequeo ejemplo
con cada una de ellas.
MOV AL, 5
Intercambia destino con origen; no se puede usar con
MOV AH, 2
registros de segmento. Esta instruccin encuentra su
XCHG AL, AH ; AL
XCHG utilidad en aquellas instrucciones que tienen asociados = 2, AH = 5
RET
AH = flags register
Transfiere al registro AH el contenido de las banderas.
AH bit:
bits 1, 3, 5 are
reserved.
flags register = AH
SAHF AH bit:
Almacena en los ocho bits menos significativos del
7 6 5 4 3
registro de indicadores el valor del registro AH. 2 1 0
bits 1, 3, 5 are
reserved.
26
MOV BX, OFFSET
TABLA
La instruccin XLAT tabla carga en el registro AL el contenido
de la posicin [BX][AL], en donde el registro BX ha de apuntar MOV AL, 4
27
Se desplazan a la izquierda los bits del operando destino
tantas posiciones como indique el operando fuente. El
MOV AX, 5A30H
desplazamiento de una posicin se realiza de la siguiente
SHL AX, 8
forma: el bit de mayor peso del operando se desplaza al bit
RET
RCL AL, 1 ; AL =
00111001b, CF=0.
RET
de tal forma que el bits del extremo izquierdo del operando ROL AL, 1 ; AL =
00111000b, CF=0.
destino hacia el bit del extremo derecho de dicho operando
RET
y al mismo tiempo para el bit de acarreo CF.
28
RCR Rotar a la derecha con acarreo. Rota a la derecha los bits del operando
STC ; set
junto con la bandera de acarreo, CF, el nmero de bits especificado carry (CF=1).
RCR AL, 1 ; AL
= 10001110b, CF=0.
RET
Rotar a la derecha. Rota a la derecha los bits del operando de tal forma
MOV AL, 1Ch ;
que el bit del extremo derecho del operando destino para el bit AL = 00011100b
extremo izquierdo de dicho operando y al mismo tiempo para el bit ROR AL, 1 ;
AL = 00001110b,
de acarreo CF. CF=0.
RET
ROR
29
CONCLUSIONES
30