Descarga la aplicación para disfrutar aún más
Vista previa del material en texto
1 Prof. Jorge M. Runco 1Curso 2015 Arquitectura de Computadoras Curso 2015 Clase 1 Pasaje de parámetros Prof. Jorge Runco Curso 2015 2 Temas de clase � Registros � Instrucciones � Tipos de instrucciones � Programas � Subrutinas � Pasaje de parámetros 2 Prof. Jorge Runco Curso 2015 3 Organización de registros �Registros visibles al usuario: son utilizados por el programador (AX, BX,… BP, SP..) �Registros de control y estado: son utilizados por la UC para controlar la operación de la CPU: no son visibles por el programador (MAR, MBR, IP…..) Prof. Jorge Runco Curso 2015 4 Organización de registros CPU PII Intel (principales)(1) AH AL BH BL CH CL DH DL EAX EBX ECX EDX 16 bits 8 bits 8 bits De uso general A X B X C X D X 3 Prof. Jorge Runco Curso 2015 5 Organización de registros CPU PII Intel (principales)(2) CS SS DS ES FS GS 16 bits Segmentos Prof. Jorge Runco Curso 2015 6 Organización de registros CPU PII Intel (principales)(3) SP BP SI DI 16 bits Punteros de pila y registros índices 4 Prof. Jorge Runco Curso 2015 7 Organización de registros CPU PII Intel (principales)(4) EIP EFLAGS PC y banderas Prof. Jorge Runco Curso 2015 8 Organización de registros CPU PII Intel (principales)(5) • AX : acumulador, es el principal en las operaciones aritméticas • BX : puntero base (dir de memoria) • CX : contador, interviene en instrucciones de ciclo • DX : datos, participa en multiplicación y división 5 Prof. Jorge Runco Curso 2015 9 Organización de registros CPU PII Intel (principales)(6) � SI y DI : apuntadores que utilizan las instrucciones que recorren arreglos o tablas � BP y SP : también son apuntadores a memoria, pero a una zona especial: pila ó stack � E : reg de 32 bits Prof. Jorge Runco Curso 2015 10 Instrucciones - Intel �Tienen la forma : instrucción destino,fuente �destino y fuente son 2 operandos, donde c/u de ellos está especificado por alguno de los mdd vistos, el otro operando es un registro de la CPU 6 Prof. Jorge Runco Curso 2015 11 Instrucciones - Intel (2) �Llamando : • mem = especificación de una dirección de memoria • reg = registro de la CPU • inm = dato inmediato Las instrucciones tienen la forma Prof. Jorge Runco Curso 2015 12 Instrucciones - Intel (3) Instrucción mem, reg Instrucción reg , mem Instrucción reg , reg Instrucción reg , inm Instrucción mem, inm 7 Prof. Jorge Runco Curso 2015 13 Instrucciones - Intel (4) �El nombre destino y fuente proviene del hecho que si hay un movimiento de datos, es desde la derecha (fuente) hacia la izquierda (destino). �En una suma hay 2 operandos y el resultado se almacena en el lugar del operando izquierdo (destino). Prof. Jorge Runco Curso 2015 14 Instrucciones - Intel 8086 Ejemplos: • ADD AX,BX AX=AX+BX • ADD AL,AH AL=AL+AH • MOV AL,CH AL=CH • SUB AX,BX AX=AX - BX � Direccionamiento por registro 8 Prof. Jorge Runco Curso 2015 15 Instrucciones - Intel 8086 (2) Ejemplos: • ADD AX,35AFh AX=AX+35AFh • ADD AL,15 AL=AL+15 • MOV AL,3Eh AL=3Eh • SUB AX,1234h AX=AX - 1234h �Direccionamiento Inmediato Prof. Jorge Runco Curso 2015 16 Instrucciones - Intel 8086 (3) Ejemplos: • ADD AX, [35AFh] AX = AX + contenido direcc. 35AFh y 35B0h • ADD AL, DATO AL = AL + contenido variable DATO (8 bits) • MOV CH, NUM1 CH = contenido variable NUM1 (8 bits) � Direccionamiento Directo 9 Prof. Jorge Runco Curso 2015 17 Instrucciones - Intel 8086 (4) Ejemplos: • ADD AX, [BX] AX = AX + dato almacenado en dirección contenida en BX y la que sigue • MOV [BX], AL dato en la dirección contenida en BX = AL � Direccionamiento Indirecto por registro Prof. Jorge Runco Curso 2015 18 Instrucciones - Intel 8086 (5) Ejemplos: • MOV CX, [BX+SI] CX = dato almacenado en la direcc. BX+SI y la siguiente • MOV [BX+DI], AL dato almacenado en la direcc. BX+DI = AL � Direccionamiento base + índice 10 Prof. Jorge Runco Curso 2015 19 Instrucciones - Intel 8086 (6) Ejemplos: • MOV AL, [BX+2] AL=dato almacenado en dir BX+2 • MOV [BX+2Ah], AX dato almacenado en dir BX+2Ah y la que sigue = AX (16 bits) � Direccionamiento Relativo por registro Prof. Jorge Runco Curso 2015 20 Instrucciones - Intel 8086 (7) Ejemplos: • MOV AL, [BX+SI+2] AL = dato almacenado en la dir BX+SI+2 • MOV [BX+DI+2Ah], AX dato almacenado en la dir BX+DI+2Ah y la que sigue = AX (16 bits) � Direccionamiento relativo base+índice 11 Prof. Jorge Runco Curso 2015 21 Orden de los bytes 1 ORG 1000H 1000 34 92 2 NUM1 DW 9234H El número de 2 bytes es almacenado en sentido invertido, la parte alta del número en la dirección más alta Dir 1001H Prof. Jorge Runco Curso 2015 22 Orden de los bytes (2) 12 ORG 2000H 2000 8B 06 00 10 13 MOV AX,NUM1 2004 8B 16 02 10 14 MOVDX,NUM1+2 2008 8B 0E 04 10 15 MOV CX,NUM2 200C 8B 1E 06 10 16 MOV BX,NUM2+2 2010 E8 00 30 17 CALL SUM32 2013 F4 18 HLT 19 END Este mecanismo se llama “little-endian” 12 Prof. Jorge Runco Curso 2015 23 Problema • Intel 80x86, Pentium y VAX son “little- endian”. • IBM S/370, Motorola 680x0 (Mac), y la mayoría de los RISC son “big-endian”. Incompatibilidad !!! Prof. Jorge Runco Curso 2015 24 Funcionamiento de la pila • Zona de memoria destinada a un uso específico • Uso del sistema: salva la dirección de retorno cuando es llamada una subrutina ó se produce una interrupción por hardware • Uso del usuario: pasaje de parámetros • Cada vez que se ejecuta un programa, el so inicializa el reg SP apuntando a la pila • El simulador inicializa SP=8000H 13 Prof. Jorge Runco Curso 2015 25 Operaciones de apilar/desapilar • PUSH : apila datos. El SP apunta al último dato almacenado, por lo tanto primero se decrementa y luego almacena el dato. • POP : desapila datos. Desapila el dato y luego incrementa el SP. Operación inversa a la anterior. Prof. Jorge Runco Curso 2015 26 Funcionamiento de la pila � Mover dato � Modificar SP SP Apilar Desapilar 2 2 1 2 1 2 1 1 PUSH POP x86 14 Prof. Jorge Runco Curso 2015 27 Definición del procedimiento Nombre Proc ... … … Ret Nombre Endp Cuerpo del procedimiento Prof. Jorge Runco Curso 2015 28 Pasaje de parámetros a subrutinas � Procedimientos (subrutinas), en general requieren datos de entrada y proveen datos de salidas. � Parámetros son estos datos pasados a y desde el procedimiento. � Estos parámetros pueden ser pasados de dos maneras : � Por valor � Por referencia 15 Prof. Jorge Runco Curso 2015 29 Parámetros por valor � Es eso: se pasa el valor de una variable al procedimiento. � Son sólo parámetros de entrada. � Independientemente del uso de este valor por parte del procedimiento, éste no puede ser modificado. Prof. Jorge Runco Curso 2015 30 Parámetros por referencia � Aquí es pasada la dirección de la variable y no su valor. � Es necesario cuando hay que modificar el valor del parámetro (retorno). � En general menos eficiente que pasar por valor. Tenemos la dir y hay que acceder a memoria para buscar el dato. � Pero más eficiente cuando hay que transferir un arreglo datos entre proc. Así se pasa la dir del arreglo. 16 Prof. Jorge Runco Curso 2015 31 ¿Dónde se pasan los parámetros? ●Vía registros ● El número de registros es la principal limitación ● Es importante documentar que registros se usan ●Vía memoria ● Se usa un área definida de memoria (RAM). ● Difícil de estandarizar Prof. Jorge Runco Curso 2015 32 ¿Dónde se pasan los parámetros? ●Vía pila (stack) ● Es el método más ampliamente usado. ● Lo usa la mayoría de los lenguajes de alto nivel. ● Independiente de memoria y registros. ● Hay que comprender bien como funciona porque la pila (stack) esusada por el usuario y por el sistema. ● Aunque es más complicado, en general los registros son recursos muy preciados. 17 Prof. Jorge Runco Curso 2015 33 En HLL y por valor Procedure Mio (I) ……….. ………… Begin …………. …………. Mio (x); En x86 por valor en registros Mio Proc …El dato está en ax.. ………. Mio Enp …….. dato dw …. ……….. mov ax, dato call Mio En x86 por valor en la pila Mio Proc …El dato está en la pila…… ………. Mio Enp dato dw …. ……….. mov ax, dato push ax call Mio Prof. Jorge Runco Curso 2015 34 En HLL y por referencia Procedure Mio (Var:I) ……….. ………… Begin …………. …………. Mio (x); En x86 por referencia en registros Mio Proc ….La dir de dato en ……ax…… ………. Mio Enp …….. dato dw …. ……….. mov ax, offset dato call Mio En x86 por referencia y en la pila Mio Proc …La dir de dato en la pila…… ………… Mio Enp …….. dato dw …. ……….. mov ax,offset dato push ax call Mio 18 Prof. Jorge Runco Curso 2015 35 Llamada al procedimiento y pasaje de parámetros por pila En programa principal … Push Parámetro 1 Push Parámetro 2 Call Nombre … … Prof. Jorge Runco Curso 2015 36 Uso de registros con la pila (1) � SP = Stack pointer (Puntero de pila). � Apunta al último dato almacenado en la pila : � Por el usuario con push y pop � Por el sistema al salvar la dirección de retorno en el llamado a una subrutina ó cuando se produce una interrupción (la veremos más adelante). 19 Prof. Jorge Runco Curso 2015 37 Uso de registros con la pila (2) � BP= Base pointer (Puntero base). Como SP no es un registro base ó índice, no puede ser usado para direccionar entre corchetes. No está permitido [SP]. � Para direccionar la pila se usa BP. Así si se ejecutan instrucciones push y pop se modifica sp; si hay una llamada a procedimiento también se modifica SP. � BP está manejado por el usuario. Prof. Jorge Runco Curso 2015 38 Posibles pasos en un procedimiento 1. Salvar el estado de BP (viejo BP) 2. Salvar estado de SP (BP=SP) 3. Reservar espacio para datos locales (opcional) 4. Salvar valores de otros registros (opcional) 5. Acceder a parámetros 6. Escribir sentencias a ejecutar 7. Retornar parámetro (opcional) 8. Regresar correctamente del procedimiento 20 Prof. Jorge Runco Curso 2015 39 Primero Proc push bp mov bp, sp sub sp, 2 push ax mov cx, [bp+número] (instrucciones) pop ax mov sp, bp pop bp ret Endp Primero Paso 1:salvar el estado de bp Paso2 :salvar sp. Uso bp para direccionar Paso 4 : salvar registros. Acá uno como ej. Pueden ser más Paso 3 : corre 2 lugares sp y esos 2 bytes pueden ser usados como “locales” para este procedimiento OPCIONAL OPCIONAL OPCIONAL Paso 5 : acceder a parámetrosPaso 6 Paso 8 En el procedimiento…….. Prof. Jorge Runco Curso 2015 40 Pasos......dentro del procedimiento ● El procedimiento comenzaría con: push BP mov BP, SP ● Esto establece a BP como puntero de referencia y es usado para acceder a los parámetros y datos locales en la pila. SP no puede ser usado para éste propósito porque no es un registro base ó índice. El valor de SP puede cambiar pero BP permanece fijo. 21 Prof. Jorge Runco Curso 2015 41 Pasos......dentro del procedimiento ● Así la primera instrucción salva BP y la segunda carga el valor de SP en BP (en el momento de entrar al procedimiento). ● BP es el puntero al área de la pila asignada al procedimiento (frame pointer). ● Para acceder a los datos se deberá sumar un desplazamiento fijo a BP. Prof. Jorge Runco Curso 2015 42 Pasos......dentro del procedimiento ● Reservar espacio para variables locales ● se decrementa SP, reservando lugar en la pila sub SP, 2 ● Este ej. reserva 2 bytes para datos locales. ● El sistema puede utilizar al SP sin escribir sobre el área de trabajo (o frame) del procedimiento. 22 Prof. Jorge Runco Curso 2015 43 Parámetro 1 Parámetro 2 Dirección de retorno 1 Parámetro 1 Parámetro 2 Dirección de retorno 1 Viejo BP Variables locales 1 SP BP SP y BP al entrar a Primero SP BP SP y BP después de paso 3 Prof. Jorge Runco Curso 2015 44 Pasos......dentro del procedimiento ● Salvar otros registros ● por ej. ax push ax ● Si el procedimiento no cambia el valor de los registros, éstos no necesitan ser salvados. Normalmente los registros son salvados después de establecer el puntero (frame pointer) y los datos locales. 23 Prof. Jorge Runco Curso 2015 45 Parámetro 1 Parámetro 2 Dirección de retorno Viejo BP Variables locales Salvar AX SP antes de pasar parámetros SP luego de pasar parámetro 1 desde programa principal SP luego de pasar parámetro 2 y antes de llamar al procedimiento SP después de llamar al proc Salvar viejo BP y hacer BP=SP en el procedeimiento Espacio para datos locales. En el procedimiento Posición de SP luego de salvar por ej. AX (En el proc.) 2 bytes 2 bytes 2 bytes 4 bytes 2 bytes 2 bytes Prof. Jorge Runco Curso 2015 46 Pasos......dentro del procedimiento acceso a los parámetros ● En general el desplazamiento de BP para acceder a un parámetro es igual a: ● 2 (es el tamaño de BP apilado) + tamaño de dirección de retorno + total de tamaño de parámetros entre el buscado y BP ● Para acceder al Parámetro 1 deberá ser: mov CX, [ BP + 8 ] 24 Prof. Jorge Runco Curso 2015 47 Parámetro 1 Parámetro 2 Dirección de retorno Viejo BP Variables locales Salvar AX BP SP 2 bytes 4 bytes 2 bytes BP + 8 Prof. Jorge Runco Curso 2015 48 Salida del procedimiento ● Los registros salvados en la pila deben ser descargados en orden inverso. ● Si se reservó espacio para variables locales, se debe reponer SP con el valor de BP que no cambió durante el procedimiento. ● Reponer BP. ● Volver al programa que llamó al procedimiento con ret. 25 Prof. Jorge Runco Curso 2015 49 Salida del procedimiento ● En nuestro ej. . . pop AX mov SP, BP pop BP ret Prof. Jorge Runco Curso 2015 50 Anidamiento de subrutinas Programa principal . . Push Parámetro1 Call Proce1 . . Proce1 Proc Push BP Push Param2 Call Proce2 Pop Param2 Pop BP Ret Proce1 Endp Proce2 Proc Push BP Instrucciones Pop BP Ret Proce2 Endp 26 Prof. Jorge Runco Curso 2015 51 Parámetro de entrada 1 Parámetro de entrada 1 Dirección de retorno 1 Viejo BP Dirección de retorno 1 Viejo BP Parámetro de entrada 2 Viejo BP1 Dirección de retorno 2 BP2=SP2 BP1=SP1 Viejo BP1 El simulador no tiene BP, hay que usar BX Prof. Jorge Runco Curso 2015 52 Para el simulador ● Declaración del procedimiento org 3000h nombre: instrucción . . ret ● En lugar de BP se usa BX 27 Prof. Jorge M. Runco 53Curso 2015 Arquitectura de Computadoras Ejemplo Suma de 2 números de 32 bits con el simulador Prof. Jorge Runco Curso 2015 54 ADD AX,CX ADC DX,BX AXDX BX CX AXDX C Suma de dos números de 32 bits 28 Prof. Jorge M. Runco 55Curso 2015 Arquitectura de Computadoras Ejemplo :Suma de 2 números de 32 bits pasados por la pila por valor (con el simulador) Prof. Jorge Runco Curso 2015 56 ORG 2000H MOV AX, NUM1 PUSH AX MOV AX, NUM1+2 PUSH AX MOV AX, NUM2 PUSH AX MOV AX, NUM2+2 PUSH AX CALL SUM32 HLT (DIR:2017) Suma de dos números de 32 bits pasados por valor en la pila 8000H 00H 7FF7H 00H 7FF6H 00H 7FF9H 00H 7FFAH 00H 7FFBH 00H 7FFCH 00H 7FFDH 00H 7FFEH 00H 7FFFH 00H 7FF8H 00H 92H 34H 11H 11H 92H 34H 22H 22H 20H 17H SP 29 Prof. Jorge Runco Curso 2015 57 8000H 00H 7FF7H 20H 7FF6H 17H 7FF9H 22H 7FFAH 34H 7FFBH 92H 7FFCH 11H 7FFDH 11H 7FFEH 34H 7FFFH 92H 7FF8H 22H 7FF5H 00H 7FF4H 00H BX BX BX BX ORG 3000H SUM32: PUSH BX MOV BX, SP ADD BX, 10 MOV AX, [BX] SUB BX, 2 MOV DX, [BX] SUB BX, 2 MOV CX, [BX] SUB BX, 2 ADD AX, CX ADC DX, [BX] POP BX RET 0000H0000H 0000H2222H 0000H0000H9234H 9234H 1111H 2468H3334H 1 SP BX SP AX CX DX Prof. Jorge M. Runco 58Curso 2015 Arquitectura de Computadoras Ejemplo :Suma de 2 números de 32 bits pasados por la pila por referencia (con el simulador) 30 Prof. Jorge Runco Curso 2015 59 ORG 2000H MOV AX,OFFSET NUM1 PUSH AX MOV AX,OFFSET NUM2 PUSH AX CALL SUM32 HLT (Dir=200BH) END 7FF8H 00H 7FF7H 00H 7FFAH 00H 7FFBH 00H 7FFCH 00H 7FFDH 00H 7FFEH 00H 7FFFH 00H 8000H 00H 7FF9H 00H 7FF6H 00H 7FF5H 00H 0000HAX 1000H 10H 00H 1004H 10H 04H 20H 0BH Suma de dos números de 32 bits pasados por referencia (dirección) en la pila SP Prof. Jorge Runco Curso 2015 60 ORG 3000H SUM32:PUSH BX MOV BX,SP ADD BX,6 MOV AX,[BX] SUB BX,2 MOV CX,[BX] MOV BX,AX MOV AX,[BX] ADD BX,2 MOV DX,[BX] MOV BX,CX MOV CX,[BX] ADD BX,2 ADD AX, CX ADC DX,[BX] POP BX RET 7FF8H 00H 7FFAH 2BH 7FFBH 20H 7FFCH 04H 7FFDH 10H 7FFEH 00H 7FFFH 10H 8000H 00H 7FF9H 00H 1000H 34H 1002H 11H 1003H 11H 1004H 34H 1005H 92H 1006H 22H 1007H 22H 1008H 00H 1001H 92H AX CX DX BX SP 0000H0000H 0000H 1004H7FFAH 7FF8H 7FF8H 7FFEH 1000H 7FFCH 1004H1000H 9234H 1002H 1111H 1004H 9234H1006H 2468H3334H 0000H 7FFAH
Compartir