Está en la página 1de 18

LABORATORIO ARQUITECTURA DE COMPUTADORAS 2012-B

INDICE

1. DIAGRAMA DE FLUJO…………………………………………………………………………………..3
2. PROGRAMA………………………………………………………………………………………………...6
3. CODIFICACION……………………………………………………………………………………………..7

1
LABORATORIO ARQUITECTURA DE COMPUTADORAS 2012-B

PROGRAMA PARA ORDENAR 10 NUMEROS EN FORMA


ASCENDENTE

SE TIENEN 10 NUMEROS ALEATORIOS EN LA POSICION DE MEMORIA DESDE 2000 A 2009, Y


SE REQUIERE GUARDAR LOS NUMEROS ORDENADOS ASCENDENTEMENTE

PARES: 2010 – 2014

IMPARES: 2015 – 2019

1 DIAGRAMA DE FLUJO

INICIO

VAR1 = 0
CONTADOR1= Ah
[198Fh] = 0

VAR2 = FFh

CONTADOR2 = Ah

VAR3 = 0
3

VAR2
< Si
1
[VAR3 + 2000h]

No

[VAR3 + 2000h]
<= Si
1
[VAR1 + 198F]

2
No

2
LABORATORIO ARQUITECTURA DE COMPUTADORAS 2012-B

VAR2 = [VAR3 + 2000h]

VAR3 = VAR3 + 1

CONTADOR2 = CONTADOR2 - 1

CONTADOR2
= No
3
0

Si

[VAR1 + 1900] = VAR2

VAR1 = VAR1 + 1

CONTADOR1 = CONTADOR1 - 1

CONTADOR1
= No
4
0

Si

3
LABORATORIO ARQUITECTURA DE COMPUTADORAS 2012-B

VAR1 = 0
VAR2 = 0
VAR3 = 0
CONTADOR = Ah
7
RECORRER A LA
DERECHA UNA
POSICION
[VAR1 + 1990]

ACARREO
= Si
1
0

No

[VAR2 + 2015] = [VAR1 + 1990]

VAR2 = VAR2 + 1

FIN

4
LABORATORIO ARQUITECTURA DE COMPUTADORAS 2012-B

SEUDOCODIGO

Para ordenar los números:


- Comparamos el primero de los valores con un valor “A” (por defecto será FFh)
- Si este valor “A” es menor que el primero de los datos no se hace nada y se compara
con el siguiente de los datos
- Si no es menor se compara el primero de los datos con el primer dato, menos una
posición, ya ordenado
- Si este valor es menor o igual, quiere decir que es un valor que ya se tomó
previamente y se sale del bucle
- Si no es menor o igual, entonces reemplazamos el valor “A” por el dato que se está
procesando
- Al terminar de comparar con todos los valores se halla el menor de los valores y se
escribe en la memoria
- Se vuelve a poner “A” en FFh para iniciar nuevas comparaciones y volver a encontrar el
siguiente menor y se vuelve a colocar este valor en memoria (una posición más que el
anterior valor)

2 PROGRAMA
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
; SECUENCIA PARA ORDENAR LOS NUMEROS ;
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;

XOR BX,BX
MOV CX,A
MOV AL,00
MOV [198F],AL
SIGUE2: MOV AL,FF
PUSH CX
MOV CX,A
XOR SI,SI
SIGUE1: CMP AL,[SI][2000]
JB EXIT
MOV AH,[SI][2000]
CMP AH,[BX][198F]
JBE EXIT
MOV AL,[SI][2000]
EXIT: INC SI
LOOP SIGUE1
MOV [BX][1990],AL
INC BX
POP CX
LOOP SIGUE2

Además las etiquetas tienen las siguientes direcciones en el programa:


SIGUE2 = 202A
SIGUE1 = 2032
EXIT = 2046
SIGUE3 = 205A
ES_PAR = 206B
SALIR = 2071

5
LABORATORIO ARQUITECTURA DE COMPUTADORAS 2012-B

3 CODIFICACION
3.1 XOR BX,BX
TIPO: Registro a registro

CODIGO DE INSTRUCCIÓN: 001100dw modreg r/m

d =0 mod =11 r/m = 011

w =1 reg =011

CODIGO RESULTANTE (BINARIO): 00110001 11011011


CODIGO RESULTANTE (HEXADECIMAL): 31 DB
0C9C:2020 31DB
0C9C:2022

3.2 MOV CX,A


TIPO: Inmediato a registro

CODIGO DE INSTRUCCIÓN: 1011 w reg data data if w = 1

w =1 reg =001 data =00000000 00001010

CODIGO RESULTANTE (BINARIO): 10111001 00001010 00000000


CODIGO RESULTANTE (HEXADECIMAL): B9 0A 00
0C9C:2022 B90A00
0C9C:2025

3.3 MOV AL,0


TIPO: Inmediato a registro

CODIGO DE INSTRUCCIÓN: 1011 w reg data Data if w =1

w =0 reg =000 data =00000000

CODIGO RESULTANTE (BINARIO): 10110000 00000000


CODIGO RESULTANTE (HEXADECIMAL): B0 00
0C9C:2025 B000
0C9C:2027

6
LABORATORIO ARQUITECTURA DE COMPUTADORAS 2012-B

3.4 MOV [198F],AL


TIPO: Acumulador a memoria

CODIGO DE INSTRUCCIÓN: 1010001w addr-low addr-high

w =0 addr-low =10001111 addr-high =00011001

CODIGO RESULTANTE (BINARIO): 10100010 10001111 00011001


CODIGO RESULTANTE (HEXADECIMAL): A2 8F 19
0C9C:2027 A28F19
0C9C:202A

3.5 MOV AL,FF


TIPO: Inmediato a registro

CODIGO DE INSTRUCCIÓN: 1011 w reg data data if w = 1

w =0 reg =000 data =11111111

CODIGO RESULTANTE (BINARIO): 10110000 11111111


CODIGO RESULTANTE (HEXADECIMAL): B0 FF
0C9C:202A B0FF
0C9C:202C

3.6 PUSH CX
TIPO: Registro

CODIGO DE INSTRUCCIÓN: 01010 reg

reg =001

CODIGO RESULTANTE (BINARIO): 01010001


CODIGO RESULTANTE (HEXADECIMAL): 51
0C9C:202C 51
0C9C:202D

7
LABORATORIO ARQUITECTURA DE COMPUTADORAS 2012-B

3.7 MOV CX,A


TIPO: Inmediato a registro

CODIGO DE INSTRUCCIÓN: 1011 w reg data data if w = 1

w =1 reg =001 data =00000000 00001010

CODIGO RESULTANTE (BINARIO): 10111001 00001010 00000000


CODIGO RESULTANTE (HEXADECIMAL): B9 0A 00
0C9C:202D B90A00
0C9C:2030

3.8 XOR SI,SI


TIPO: Registro a registro

CODIGO DE INSTRUCCIÓN: 001100 d w modreg r/m

d =0 mod =11 r/m =110

w =1 reg =110

CODIGO RESULTANTE (BINARIO): 00110001 11110110


CODIGO RESULTANTE (HEXADECIMAL): 31 F6
0C9C:2030 31F6
0C9C:2032

3.9 CMP AL,[SI][2000]


TIPO: Registro con memoria

CODIGO DE INSTRUCCIÓN: 001110 d w modreg r/m

d =1 mod =10 r/m = 100

w= 0 reg =000 DISP = 00100000 00000000

CODIGO RESULTANTE (BINARIO): 00111010 10000100 00000000 00100000


CODIGO RESULTANTE (HEXADECIMAL): 3A 84 00 20
0C9C:2032 3A840020
0C9C:2036

8
LABORATORIO ARQUITECTURA DE COMPUTADORAS 2012-B

3.10 JB 2046
TIPO: Salto si es menor

CODIGO DE INSTRUCCIÓN: 01110010 disp.

disp =00001110 (2046 – 2038=Eh)

CODIGO RESULTANTE (BINARIO): 01110010 00001110


CODIGO RESULTANTE (HEXADECIMAL): 72 0E
0C9C:2036 720E
0C9C:2038

3.11 MOV AH,[SI][2000]


TIPO: Memoria a registro

CODIGO DE INSTRUCCIÓN: 100010 d w modreg r/m

d =1 mod =10 r/m =100

w =0 reg =100 DISP = 00100000 00000000

CODIGO RESULTANTE (BINARIO): 10001010 10100100 00000000 00100000


CODIGO RESULTANTE (HEXADECIMAL): 8A A4 00 20
0C9C:2038 8AA40020
0C9C:203C

3.12 CMP AH,[BX][198F]


TIPO: Registro con memoria

CODIGO DE INSTRUCCIÓN: 001110 d w modreg r/m

d =1 mod =10 r/m = 111

w =0 reg =100 DISP = 00011001 10001111

CODIGO RESULTANTE (BINARIO): 00111010 10100111 10001111 00011001


CODIGO RESULTANTE (HEXADECIMAL): 3A A7 8F 19
0C9C:203C 3AA78F19
0C9C:2040

9
LABORATORIO ARQUITECTURA DE COMPUTADORAS 2012-B

3.13 JBE 2046


TIPO: Salto si es menor o igual

CODIGO DE INSTRUCCIÓN: 01110110 disp

disp =00000100 (2046 – 2042 = 4h)

CODIGO RESULTANTE (BINARIO): 01110110 00000100


CODIGO RESULTANTE (HEXADECIMAL): 76 04
0C9C:2040 7604
0C9C:2042

3.14 MOV AL,[SI][2000]


TIPO: Memoria a registro

CODIGO DE INSTRUCCIÓN: 100010 d w modreg r/m

d =1 mod =10 r/m =100

w =0 reg =000 DISP = 00100000 00000000

CODIGO RESULTANTE (BINARIO): 10001010 10000100 00000000 00100000


CODIGO RESULTANTE (HEXADECIMAL): 8A 84 00 20
0C9C:2042 8A840020
0C9C:2046

3.15 INC SI
TIPO: Registro

CODIGO DE INSTRUCCIÓN: 01000 reg

reg=110

CODIGO RESULTANTE (BINARIO): 01000110


CODIGO RESULTANTE (HEXADECIMAL): 46
0C9C:2046 46
0C9C:2047

10
LABORATORIO ARQUITECTURA DE COMPUTADORAS 2012-B

3.16 LOOP 2032


TIPO: Bucle CX veces

CODIGO DE INSTRUCCIÓN: 11100010 disp

disp =11101001 (2032 – 2049 = E9h)

CODIGO RESULTANTE (BINARIO): 11100010 11101001


CODIGO RESULTANTE (HEXADECIMAL): E2 E9
0C9C:2047 E2E9
0C9C:2049

3.17 MOV [BX][1990],AL


TIPO: Registro a memoria

CODIGO DE INSTRUCCIÓN: 100010 d w modreg r/m

d =0 mod =10 r/m =111

w =0 reg =000 DISP = 00011001 10010000

CODIGO RESULTANTE (BINARIO): 10001000 10000111 10010000 00011001


CODIGO RESULTANTE (HEXADECIMAL): 88 87 90 19
0C9C:2049 88879019
0C9C:204D

3.18 INC BX
TIPO: Registro

CODIGO DE INSTRUCCIÓN: 01000 reg

reg =011

CODIGO RESULTANTE (BINARIO): 01000011


CODIGO RESULTANTE (HEXADECIMAL): 43
0C9C:204D 43
0C9C:204E

11
LABORATORIO ARQUITECTURA DE COMPUTADORAS 2012-B

3.19 POP CX
TIPO: Registro

CODIGO DE INSTRUCCIÓN: 01011 reg

reg =001

CODIGO RESULTANTE (BINARIO): 01011001


CODIGO RESULTANTE (HEXADECIMAL): 59
0C9C:204E 59
0C9C:204F

3.20 LOOP 202A


TIPO: Bucle CX veces

CODIGO DE INSTRUCCIÓN: 11100010 disp

disp =11011001 (202A – 2051 = D9h)

CODIGO RESULTANTE (BINARIO): 11100010 11011001


CODIGO RESULTANTE (HEXADECIMAL): E2 D9
0C9C:204F E2D9
0C9C:2051

3.21 XOR BX,BX


TIPO: Registro a registro

CODIGO DE INSTRUCCIÓN: 001100dw modreg r/m

d=0 mod = 11 r/m = 011

w =1 reg = 011

CODIGO RESULTANTE (BINARIO): 00110001 11011011


CODIGO RESULTANTE (HEXADECIMAL): 31 DB
0C9C:2051 31DB
0C9C:2053

12
LABORATORIO ARQUITECTURA DE COMPUTADORAS 2012-B

3.22 XOR SI,SI


TIPO: Registro a registro

CODIGO DE INSTRUCCIÓN: 001100 d w modreg r/m

d =0 mod =11 r/m =110

w =1 reg =110

CODIGO RESULTANTE (BINARIO): 00110001 11110110


CODIGO RESULTANTE (HEXADECIMAL): 31 F6
0C9C:2053 31F6
0C9C:2055

3.23 XOR DI,DI


TIPO: Registro a registro

CODIGO DE INSTRUCCIÓN: 001100 d w modreg r/m

d =0 mod =11 r/m =111

w =1 reg =111

CODIGO RESULTANTE (BINARIO): 00110001 11111111


CODIGO RESULTANTE (HEXADECIMAL): 31 FF
0C9C:2055 31FF
0C9C:2057

3.24 MOV CX,A


TIPO: Inmediato a registro

CODIGO DE INSTRUCCIÓN: 1011 w reg data data if w = 1

w =1 reg =001 data =00000000 00001010

CODIGO RESULTANTE (BINARIO): 10111001 00001010 00000000


CODIGO RESULTANTE (HEXADECIMAL): B9 0A 00
0C9C:2057 B90A00
0C9C:205A

13
LABORATORIO ARQUITECTURA DE COMPUTADORAS 2012-B

3.25 MOV AL,[BX][1990]


TIPO: Memoria a registro

CODIGO DE INSTRUCCIÓN: 100010 d w modreg r/m

d =1 mod =10 r/m =111

w =0 reg =000 DISP = 00011001 10010000

CODIGO RESULTANTE (BINARIO): 10001010 10000111 10010000 00011001


CODIGO RESULTANTE (HEXADECIMAL): 8A 87 90 19
0C9C:205A 8A879019
0C9C:205E

3.26 PUSH AX
TIPO: Registro

CODIGO DE INSTRUCCIÓN: 01010 reg

reg =000

CODIGO RESULTANTE (BINARIO): 01010000


CODIGO RESULTANTE (HEXADECIMAL): 50
0C9C:205E 50
0C9C:205F

3.27 ROR AL,1


TIPO: Rotar a la derecha

CODIGO DE INSTRUCCIÓN: 110100 v w mod 001 r/m

v =0 mod = 11

w =0 r/m = 000

CODIGO RESULTANTE (BINARIO): 11010000 11001000


CODIGO RESULTANTE (HEXADECIMAL): D0 C8
0C9C:205F D0C8
0C9C:2061

14
LABORATORIO ARQUITECTURA DE COMPUTADORAS 2012-B

3.28 JNB 206B


TIPO: Salta si no es menor (si el acarreo, CF, es igual a 0)

CODIGO DE INSTRUCCIÓN: 01110011 disp.

disp = 00001000 (206B – 2063 = 08h)

CODIGO RESULTANTE (BINARIO): 01110011 00001000


CODIGO RESULTANTE (HEXADECIMAL): 73 08
0C9C:2061 7308
0C9C:2063

3.29 POP AX
TIPO: Registro

CODIGO DE INSTRUCCIÓN: 01011 reg

reg =000

CODIGO RESULTANTE (BINARIO): 01011000


CODIGO RESULTANTE (HEXADECIMAL): 58
0C9C:2063 58
0C9C:2064

3.30 MOV [SI][2015],AL


TIPO: Registro a memoria

CODIGO DE INSTRUCCIÓN: 100010 d w modreg r/m

d =0 mod =10 r/m =100

w =0 reg =000 DISP = 00100000 00010101

CODIGO RESULTANTE (BINARIO): 10001000 10000100 00010101 00100000


CODIGO RESULTANTE (HEXADECIMAL): 88 84 15 20
0C9C:2064 88841520
0C9C:2068

15
LABORATORIO ARQUITECTURA DE COMPUTADORAS 2012-B

3.31 INC SI
TIPO: Registro

CODIGO DE INSTRUCCIÓN: 01000 reg

reg =110

CODIGO RESULTANTE (BINARIO): 01000110


CODIGO RESULTANTE (HEXADECIMAL): 46
0C9C:2068 46
0C9C:2069

3.32 JMP 2071


TIPO: Dentro de un segmento corto

CODIGO DE INSTRUCCIÓN: 11101011 disp

disp = 00000110 (2071 – 206B = 06h)

CODIGO RESULTANTE (BINARIO): 11101011 00000110


CODIGO RESULTANTE (HEXADECIMAL): EB 06
0C9C:2069 EB06
0C9C:206B

3.33 POP AX
TIPO: Registro

CODIGO DE INSTRUCCIÓN: 01011 reg

reg =000

CODIGO RESULTANTE (BINARIO): 01011000


CODIGO RESULTANTE (HEXADECIMAL):
0C9C:206B 58
0C9C:206C

16
LABORATORIO ARQUITECTURA DE COMPUTADORAS 2012-B

3.34 MOV [DI][2010],AL


TIPO: Registro a memoria

CODIGO DE INSTRUCCIÓN: 100010 d w modreg r/m

d =0 mod =10 r/m =101

w =0 reg =000 DISP = 00100000 00010000

CODIGO RESULTANTE (BINARIO): 10001000 10000101 00010000 00100000


CODIGO RESULTANTE (HEXADECIMAL): 88 85 10 20
0C9C:206C 88851020
0C9C:2070

3.35 INC DI
TIPO: Registro

CODIGO DE INSTRUCCIÓN: 01000 reg

reg =111

CODIGO RESULTANTE (BINARIO): 01000111


CODIGO RESULTANTE (HEXADECIMAL): 47
0C9C:2070 47
0C9C:2071

3.36 INC BX
TIPO: Registro

CODIGO DE INSTRUCCIÓN: 01000 reg

reg =011

CODIGO RESULTANTE (BINARIO): 01000011


CODIGO RESULTANTE (HEXADECIMAL): 43
0C9C:2071 43
0C9C:2072

17
LABORATORIO ARQUITECTURA DE COMPUTADORAS 2012-B

3.37 LOOP 205A


TIPO: Bucle CX veces

CODIGO DE INSTRUCCIÓN: 11100010 disp

disp = 11100110 (205A – 2074 = E6h)

CODIGO RESULTANTE (BINARIO): 11100010 11100110


CODIGO RESULTANTE (HEXADECIMAL): E2 E6
0C9C:2072 E2E6
0C9C:2074

Los valores que se guardan en el espacio de memoria que corresponde al programa


(2020h – 2073h), se corroboran con la instrucción del DEBUG:

-U 2020 2073

18

También podría gustarte