Tabla Tabla de contenidos Preámbulo 1. Generalidades Generalidades 1.1. Sistemas numéricos 1.1.1. Sistema decimal 1.1.2. Sistema binario 1.1.3. Conversión entre decimal y binario 1.1.4. Oeraciones matemáticas básicas en base dos 1.1.!. Oeraciones ló"icas 1.1.#. $l sistema %e&adecimal %e&adecimal 1.1.#.1. Conversión entre %e&adecimal %e&adecimal y decimal 1.1.#.2. Conversión entre %e&adecimal y binario 1.1.'. (eresentación (eresentación de datos 1.1.'.1. )it 1.1.'.2. *ibble 1.1.'.3. )yte 1.1.'.4. Palabra 1.1.'.!. Palabra Palabra doble 1.1.'.#. Cuádrule alabra 1.1.'.'. +,ltilos del byte 1.1.'.-. *,meros con y sin si"no 1.1.'.. *,meros reales 1.1.'..1. /ne&actitudes en la reresentación de los n,meros reales en binario 1.1.'.10. ittle $ndian vs )i" $ndian 1.2. (e"istros (e"istros 1.2.1. (e"istros de roósito "eneral 1.2.2. (e"istros de se"mento 1.2.3. (e"istros unteros de ila 1.2.4. (e"istros ndices 1.2.!. Puntero de instrucciones o contador de ro"rama 1.2.#. (e"istro (e"istro de estado o de indicadores a"s5 1.2.' (esumen "rá6co del con7unto de re"istros re"istros del -0-#8 1.2.'.1. (e"istros de roósito "eneral 1.2.'.2. (e"istros Punteros de Pila 1.2.'.3. (e"istro Puntero de /nstrucciones 1.2.'.4. (e"istros (e"istros de Se"mento 1.2.'.!. (e"istros (e"istros de ndice 1.2.'.#. (e"istro de banderas 1.3. Puertos de entrada9salida 1.4. Or"ani:ación de direcciones8 Se"mentación 1.4.1. +odos de direccionamiento 1.4.2. Tios de direccionamiento direccionamiento 1.4.3. a ila 1.4.4. +emoria /nterna 1.4.!. +emoria Convencional 1.4.#. Se"mentos de $nsamblador 1.4.#.1. ;lineación 1.4.#.2. Combinación 1.4.#.3. Clase 1.4.#.4. ;cceder a datos de Se"mento 1.4.#.!. Tios de +odelos de +emoria 1.4.#.#. Smbolos Prede6nidos 1.!. Pro"ramas e7ecutables sobre +S<=OS 1.!.1. $l PSP 1.!.2. Pro"ramas CO+ 1.!.2.1. Creación de un ro"rama CO+ en ensamblador 1.!.3. Pro"ramas $>$ 1.#. =i?erencias entre las sinta&is 1.#.1. =i?erencias entre *;S+ y +;S+ 1.#.1. =i?erencias entre *;S+ y @;S+ 2. Aola +undo 2.1. BAola +undoD< CO+ 2.1.1. Sinta&is +;S+ 2.1.1.1. +undoC+1.asm 2.1.1.2. +undC+1b.asm +undC+1b.asm 2.1.1.3. +undoC+2.asm +undoC+2.asm 2.1.1.4. +undoC+3.asm +undoC+3.asm 2.1.1.!. +undoC+!.asm 2.1.2. Sinta&is *;S+ 2.1.2. Sinta&is @;S+ 2.2. Aola +undoD< $>$ 2.2.1. Sinta&is +;S+ 2.2.1.1. +undo>+1.asm 2.2.1.2. Se"Gr+1.asm 2.2.1.3. Se"tos+1.asm 2.2.2. Sinta&is *;S+ 2.2.2.1. +undo>*1.asm 2.2.2.2. Se"Gr*1.asm 2.2.2.3. Se"tos*1.asm 2.2.3. Sinta&is @;S+ 2.2.3.1. +undo>@1.asm 2.2.3.2. Se"
[email protected] 3. =atos 3.1. =atos Simles 3.1.1.Constantes 3.1.2.Caracteres 3.1.2.Caracteres 3.1.3.$nteros PeEueFos < )ytes 3.1.4.$nteros < ord 3.1.!.$nteros =obles < =ouble ord 3.1.#.$nteros ar"os H Iord 3.1.'.$nteros $&tendidos H Tord 3.1.-.(eales Simles 3.1..(eales ar"os 3.1.10.(eales $&tendidos 3.1.11.Cadenas de Caracteres 3.1.12. +atrices 3.2. =atos Comle7os 3.2.1. Tios 3.2.2. Punteros 3.2.2.1. Punteros a unteros 3.2.2.2. Punteros a matrices 3.2.2.3. Punteros a estructuras 3.2.2.4. +atrices de unteros 3.2.2.!. $structuras de unteros 3.2.3. $structuras 3.2.3.1. ;lineación 3.2.3.2. Punteros Punteros a $structuras 3.2.3.3. $structuras de Punteros 3.2.3.4. +atrices de $structuras 3.2.3.!. $structuras ;nidadas 3.2.4. Jniones 3.2.!. Camos de )its (ecords5 3.3.$7ercicios 4. Control de u7o 4.1. Saltos 4.1.1. =irecciones Corta Cercana y e7ana 4.1.2. $tiEuetas 4.1.2.1.ámbito de l as etiEuetas 4.1.2.1.$tiEuetas 4.1.2.1.$tiEuetas anónimas 4.1.2. Saltos incondicionales 4.1.3.1. Saltos Cortos 4.1.3.2. Saltos Cercanos 4.1.3.1. Saltos e7anos 4.1.4. /nstrucciones de testeo 4.1.4.1.a bandera de acarreo acarreo C@5 4.1.4.2.a bandera de aridad P@5 4.1.4.3.a bandera au&iliar ;@5 4.1.4.4.a bandera de cero K@5 4.1.4.!.a bandera de si"no S@5 4.1.4.#.a bandera de tra:ado T@5 4.1.4.'.a bandera de interruciones /@5 4.1.4.-.a bandera de dirección =@5
4.1.4..a bandera de desbordamiento O@5 4.1.!.=ecisiones 4.1.#. )ucles 4.1.'. Saltos condicionales !. Procedimientos !.1. Procedimientos !.1.1. Jtilidades de la directiva P(OC !.1.1.1. Salva"uarda de re"istros !.1.1.1. Parámetros !.1.1.3. L;(;(G !.1.1.4. /*LOM$ !.1.1.!. Lariables ocales !.1.1.#. $tiEuetas ocales !.1.2. lamadas le7anas !.2. +acros #. ;ritmética y ló"ica #.1. Oeraciones matemáticas #.1.1. as instrucciones N/*CN y N=$CN #.1.2. Suma y resta #.1.3. +ultilicación y división #.1.4. $&tensión de si"no #.1.!. (otaciones (otaciones y desla:amientos desla:amientos #.1.!.1. /nstrucciones de desla:amiento #.1.!.2. /nstrucciones de rotación #.1.#. $l n,mero ouesto *$G #.1.#. =atos )C= #.1.#.1. )C= desemaEuetado #.1.#.2. )C= emaEuetado emaEuetado #.1.-. B$&traD #.1.-.1. *,meros en antalla #.1.-.2. Oeraciones matemáticas matemáticas con n,meros "randes #.2. Corocesador Corocesador +atemático #.2.1. $l coroceso #.2.2. Constantes #.2.3. ;rEuitectura del -0-' #.2.4. a ila #.2.!. Tios de datos #.2.!.1. $nteros #.2.!.2. $maEuetados #.2.!.3. (eales #.2.!.4. @ormato de cada tio de dato #.2.#. =irectivas de de6nición de datos #.2.'. $l entorno #.2.'.1. Palabra de estado 15 #.2.'.2. Palabra Palabra de control 25 #.2.'.3. Palabra ta" 35 #.2.'.4. Palabras de direcciones 4 a '5 #.2.-. Tratamiento de e&ceciones #.2.. /nstrucciones y ?ormato de oeraciones #.2..1. @ormato de ila clásica #.2..2. @ormato de memoria #.2..3. @ormato de re"istro #.2..4. @ormato de re"istro re"istro POP #.2.10. Coordinando el acceso a memoria #.2.11. /nstrucciones del corocesador corocesador #.2.11.1. /nstrucciones de trans?erencia de datos #.2.11.2. /nstrucciones aritméticas #.2.11.3. /nstrucciones de comaración #.2.11.4./nstrucciones de cálculo de ?unciones trascendentes #.2.11.!. /nstrucciones relativas a constantes #.2.11.#. /nstrucciones de control del microrocesador microrocesador #.2.12.$7emlo ráctico #.2.13. =i?erencias =i?erencias entre +;S+ *;S+ y @;S+ #.3. $7ercicios '. =atos 25 '.1. +ane7o de matrices '.1.1. /nstrucciones comunes '.1.1.1. O=S '.1.1.2. STOS '.1.1.3. +OLS '.1.1.4. SC;S '.1.1.!. C+PS '.1.1.#. >;T '.1.1.'. ),sEueda de cadenas '.2. +étodos de ordenación y b,sEueda '.2.1. +étodos de ordenación '.2.1.1. Primer método de la la burbu7a '.2.1.2. Se"undo método de la burbu7a '.2.1.3. +étodo de la burbu7a con ndices '.2.1.4. +étodo de la ordenación ráida '.2.1.!. Ordenación or m,ltiles claves '.2.1.#. Ordenación Ordenación inde&ada or m,ltiles claves '.2.1.#. Lisuali:ación de traba7os de ordenación '.2.1. +étodos de b,sEueda '.2.2.1. ),sEueda lineal '.2.2.2. ),sEueda binaria '.2.2.3. ),sEueda binaria inde&ada '.2.2.4. ),sEueda sobre datos numéricos '.2.2.!. @onemas seme7antes '.2.2.#. /nserción /nserción y borrado de datos /5 '.3. istas '.3.1. Procedimientos Procedimientos disonibles ara listas en ;O$ '.3.1.1. Colas simlemente enla:adas '.3.1.2. Colas doblemente enla:adas '.3.1.3. Pilas simlemente enla:adas '.3.1.4. Lariables necesarias '.3.1.!. +ensa7es de error '.3.2. Colas simlemente enla:adas '.3.3.Pilas simlemente enla:adas '.3.4. Colas doblemente enla:adas '.3.!. Pilas doblemente enla:adas '.3.#. Colas simlemente enla:adas circulares '.3.'. Pilas simlemente enla:adas circulares '.3.-. Colas doblemente enla:adas circulares '.3.. Pilas doblemente enla:adas circulares '.3.10. istas multidimensionales '.4. rboles '.4.1. rbol binario '.4.1.1. (ecorrido (ecorrido de árboles binarios '.4.1.2. rboles binarios de b,sEueda -. a antalla -.1. a antalla -.1.1. Comonentes de una tar7eta de vdeo -.1.2. (etraso %ori:ontal y vertical -.1.3. Pro"ramación del C.(.T.C. -.1.4. +odos de vdeo -.1.!. Pá"inas de vdeo -.1.#. /nterruciones so?tare ara escribir en memoria de vdeo -.1.#.1. /nterruciones =OS -.1.#.2. /nterruciones )/OS -.1.'. $scritura directa en el b,?er de vdeo -.1.-. a aleta
-.1.-.1. $l color -.1.-.2. $7emlos -.1.. $7emlos comletos en modo te&to -.1..1. Coer bars -.1..2. @oco -.1..3. Caleidoscoio -.1..4. Tetris -.1..!. =euración . $l teclado .1. $l teclado .1.1. =istribución del teclado .1.2. rea de datos del teclado .1.3. $l b,?er del teclado .1.4. Códi"os scan .1.!. /nterrución 21% =OS ara el teclado .1.!.1. @unción 1 .1.!.2. @unción # .1.!.3. @unción ' .1.!.4. @unción - .1.!.!. @unción 0;% .1.!.#. @unción 0)% .1.!.'. @unción 0C% .1.#. /nterrución 1#% )/OS ara el teclado .1.#.1. @unción 0 .1.#.2. @unción 1 .1.#.3. @unción 2 .1.#.4. @unción 3% .1.#.4. @unción 10% .1.#.!. @unción 11% .1.#.#. @unción 12% 10. @ic%eros 10.1. Gestión de @ic%eros 10.1.1. $structura ?sica del disco 10.1.1.1. rea de Sistema 10.1.1.2. rea de datos 10.1.2. Oeraciones de la )/OS ara disco 10.1.2.1. )yte de estado de la )/OS 10.1.3. Oeraciones +S<=OS ara disco con @C)s 10.1.4. Oeraciones +S<=OS ara disco con %andles 10.1.4.1. +ane7adores +ane7adores de arc%ivos 10.1.4.2. ;tributos de arc%ivo 10.1.4.3. @ormato de ?ec%a y %ora de los arc%ivos 10.1.4.4. Códi"os de error en acceso a disco 10.1.4.!. @unciones Aandle de acceso a disco 10.1.!. ),sEueda de 6c%eros con +S< =OS 10.1.!.1. $structura de la =T; 10.1.!.2. @unciones de b,sEueda de 6c%eros 10.1.#. @unciones avan:adas +S<=OS ara disco 10.1.'. os buQers de arc%ivo 10.2. +étodos de acceso a los arc%ivos 10.2.1. ;cceso secuencial a arc%ivos 10.2.1.1. Creación y escritura de arc%ivos 10.2.1.2. ;ertura y cierre de arc%ivos 10.2.1.3. ectura y escritura de datos 10.2.1.4. $O@ $nd O? @ile o 6n de 6c%ero5 10.2.1.!. SeeR buscar5 10.2.2. ;cceso aleatorio a arc%ivos 10.2.2.1. $scritura de un arc%ivo aleatorio 10.2.2.2. ectura de un arc%ivo aleatorio aleatorio 10.2.3. ;cceso binario a arc%ivos 10.2.3.1. $scritura de un arc%ivo binario 10.2.3.2. ectura de un arc%ivo binario 10.2.4. Otros rocesos sobre arc%ivos 10.2.4.1. )orrar 6c%eros 10.2.4.2. )uscar 6c%eros 10.2.4.3. Lolcar el contenido de un 6c%ero a la antalla 11. /nterruciones /nterruciones 11.1. /nterruciones 11.1.1. Pollin" versus /nterruciones 11.1.1.1. Pollin" 11.1.1.2. /nterruciones /nterruciones 11.1.1.3. Conclusión 11.1.2. /nterruciones internas o e&ceciones e&ceciones 11.1.3. /nterruciones %ardare /(Is5 11.1.4. /nterruciones so?tare 11.1.4.1. ocali:ación 11.1.4.2. $7emlo 9 traceo 11.1.4.3. Proceso de la interrución 11.1.!.Tabla de interruciones del sistema 11.1.#. /S(s 11.1.#.1. Preservar Preservar contenido de re"istros re"istros 11.1.#.2. =es%abilitar e7ecución de interruciones 11.1.#.3. (eservar (eservar su6ciente esacio de ila 11.1.'. Gestión de interruciones interruciones 11.1.'.1. /nterruciones /nterruciones ara "estión de interruciones 11.1.'.2. +étodos ara la "estión de interruciones 11.1.-. $7emlos 11.1.-.1. /nt 4% 11.1.-.2. /nt 21% 11.1.-.3. /nt % 11.1.-.4. /nt -% 11.1.-.!. (elo7 en tiemo real 11.1.-.#. +uestra teclado teclado 11.1.-.'. Aora y ?ec%a actuales 11.1.-.-. $stablece rutina roia ara interrución 11.1.-.. )uscar /nterrución 11.1.. /nterrución /nterrución +ultile& 12. Gestión de la memoria 12.1. Gestión de +emoria 12.1.1. +aa de la memoria del +S<=OS 12.1.1.1. Tios de memoria 12.1.1.1.1. +emoria convencional 12.1.1.1.2. rea de +emoria Suerior Jer +emory ;rea H J+;5 12.1.1.1.2. +aa de la +emoria Suerior 12.1.1.1.3. +emoria Suerior (O+ y (;+ 12.1.1.1.4. +emoria $&andida $&anded +emory H $+S5 12.1.1.1.!. )loEues de +emoria Suerior J+)s5 12.1.1.1.#. (O+ S%adoin" 12.1.1.1.'. ;rea de +emoria ;lta Ai"% +emory ;rea H A+;5 12.1.1.1.-. +emoria $&tendida 12.1.1.1.. +emoria Cac%é 12.1.1.1.10. +emoria C+OS (;+ 12.1.2. )loEues de memoria 12.1.2.1. Tios de bloEues de memoria 12.1.2.1.1. )loEues de memoria del ro"rama ro"rama 12.1.2.1.2. )loEues de entorno 12.1.2.1.3. )loEues de control de memoria +C)s5 12.1.2.1.4. )loEues de sistema 12.1.2.1.!. )loEues de datos 12.1.2.1.#. )loEue libre 12.1.2.2. iberar el esacio de entorno en ro"ramas residentes 12.1.2.3. (edimensionamiento (edimensionamiento de un bloEue de memoria 12.1.2.4.
;si"nar esacio de memoria 12.1.3. lamada a subrocesos y recubrimientos u overlays 12.1.3.1. Car"a y e7ecución de subro"ramas 12.1.3.2. Car"a y e7ecución de overlays 12.2. TS(s 12.2.1. /nterruciones imlicadas 12.2.2. Clasi6cación de los TS(s 12.2.3. Problemas con los TS(s 12.2.3.1. $l =OS no es reentrante 12.2.3.2. ;cciones crticas en tiemo 12.2.3.3. (einstalación 12.2.3.4. ;ctivación retardada 12.2.3.!. Preservar el conte&to 12.2.3.#. ;lterar el ?uncionamiento del sistema 12.2.3.'. a )/OS tamoco es reentrante 12.2.3.-. TamaFo y velocidad 12.2.3.. (einstalación y desinstalación 12.2.4. $7emlos 12.2.4.1. (elo7 residente con reinstalación 12.2.4.2. (elo7 en tiemo real sin reinstalación 12.2.4.3. (elo7 en tiemo real sin reinstalación y con desinstalación 12.2.!. a ila y el PSP 12.2.!.1. =e6nir una ila ara la arte residente 12.2.!.2. Cambio del PSP activo 12.2.!.3. Cambio del =T; =isR Trans?er ;rea5 12.2.!.4. $7emlo 12.2.#. Problemas con la reentrada del =OS 12.2.#.1. os indicadores /n=OS y $rror+ode 12.2.#.2. /ndicador en /S( 12.2.#.3. $7emlo 12.2.'. Otros asectos a tener en cuenta 12.2.'.1. /n?ormación e&tendida de errores 12.2.'.2. /nt 13% ?unciones de acceso a disco 12.2.'.3. Gestión de errores crticos 12.2.'.4. =ivisión or cero 12.2.'.4. Control
+S 12.4.2.1. $l "estor >+S 12.4.2. +emoria e&andida $+S 12.!. ;cceso =irecto a +emoria =+;5 12.!.1. Oeración básica del =+; 12.!.2. =e6niciones básicas del =+; 12.!.3. $l controlador de =+; -23' 12.!.3.1. =e6nición de las terminales 12.!.3.2. (e"istros internos 12.!.3.3. Comandos de so?tare 12.!.3.4. Pro"ramación de los re"istros de dirección y de cuenta 12.!.3.!. Canales y uertos 12.!.3.#. +ensa7es de error 12.!.3.'. $7emlo 13. (ecursividad 13.1. (ecursividad 13.1.1. $7emlos de de6niciones recursivas 13.1.1.1. *,meros naturales 13.1.1.2. $structuras de árbol 13.1.1.3. a ?unción ?actorial ?n5 nD 13.1.2. Potencia de la recursión 13.1.3. Tios de ob7etos recursivos 13.1.3.1. (ecursividad al"ortmica 13.1.3.2. (ecursividad en datos 13.1.4. (ecursividad al"ortmica 13.1.!. $7emlos de recursividad 13.1.!.1. (ecursividad de cola sin arámetros 13.1.!.2. (ecursividad de cola con arámetros 13.1.!.3. (ecursividad interna sin arámetros 13.1.!.4. (ecursividad interna con arámetros 13.1.!.!. (ecursividad en datos 13.1.#. Cuándo no utili:ar la recursión 13.1.#.1. Cálculo del ?actorial de un n,mero con recursividad 13.1.#.2. Cálculo del ?actorial de un n,mero sin recursividad 13.1.'. Cuándo utili:ar la recursión 13.1.'.1. +étodo recursivo 13.1.'.2. +étodo no recursivo 13.1.-. ;l"oritmos de rastreo inverso 13.1.-.1. $l roblema de las oc%o reinas 14. a imresora 14.1. /mresora 14.1.1. Oeraciones básicas de interrución 14.1.2. Caracteres comunes de control de imresora 14.1.2.1. Tabulación %ori:ontal 14.1.2.2. ;vance de lnea @5 14.1.2.3. (etorno de carro 14.1.2.4. ;vance de á"ina @@5 14.1.3. $7emlos 1!. $l ratón 1!.1. $l ratón 1!.1.1. =e6niciones básicas del ratón 1!.1.2. Oeraciones comunes del ratón 1!.1.3. +étodos de control del ratón 1!.1.3.1. Control del ratón mediante sondeos sucesivos 1!.1.3.2. Control del ratón mediante mane7o de interruciones 1!.1.4. Otras ?unciones interesantes del ratón 1!.1.4.1. +odi6cación del asecto del cursor del ratón 1!.1.4.2. Constricción del movimiento del cursor del ratón 1#. $l 7oysticR
1#.1. UoysticR 1#.1.1. )reve %istoria del UoysticR 1#.1.2. $structura del UoysticR 1#.1.3. Conector del UoysticR 1#.1.4. Cómo traba7a el %ardare del uerto del 7oysticR 1#.1.4.1. $ntrada analó"ica de resistencia osición del 7oysticR5 1#.1.4.2. $ntrada de conmutadores botones del 7oysticR5 1#.1.!. Cómo ro"ramar el 7oysticR analó"ico 1#.1.!.1. @unciones )/OS 1#.1.!.2. ectura directa del uerto de 7ue"os 1'. Control del tiemo 1'.1. $l tiemo 1'.1.1. Jsando interruciones 1'.1.2. ;ccediendo a la in?ormación de la )/OS directamente 1'.1.3. /ntercetando la interrución 1C% o -% 1'.1.4. Jsando el re?resco de antalla 1'.1.!. +ultiretardo 1'.1.#. Pro"ramación del P/T 1'.1.#.1. Canales del P/T 1'.1.#.1.1. $l canal 0 1'.1.#.1.2. $l canal 1 1'.1.#.1.3. $l canal 2 1'.1.#.2. $l re"istro de modo9comando en el uerto 43% 1'.1.#.3. Cómo ro"ramar el canal 0 a una ?recuencia di?erente 1'.1.#.4. (ies"os a tener en cuenta 1'.1.#.!. Otra ?orma de usar el P/T 1-. $l sonido en el PC 1-.1. $l altavo: del PC 1-.1.1. $l sonido 1-.1.1.1. Problemas del sonido 1-.1.1.2. $7emlo 1-.1.2. $l sonido sobre el PC 1-.1.3. @uncionamiento del altavo: del PC 1-.1.3.1. Control directo del altavo: 1-.1.3.2. Control del altavo: mediante el temori:ador 1-.1.4. *otas musicales 1-.1.!. +elodas 1-.1.#. +elodas de ?ondo 1-.1.'. +,sica di"ital or el altavo: 1-.1.'.1. @ic%eros de sonido di"ital 1-.1.'.2. @ormato de 6c%ero av 1-.1.'.3. Otros ?ormatos de sonido di"ital 1-.1.'.3.1. @ormato +O= 1-.1.'.3.2. @ormato S3+ 1-.1.'.3.3. @ormato >+ 1-.1.'.3.4. @ormato +/= y +/=V;udio 1-.1.'.4. Pro"ramas ara la creación de canciones y ?ormatos musicales 1-.1.'.4.1. TracRers 1-.1.'.4.2. Secuenciadores 1-.1.'.4.3. TracRers de e7emlo 1-.2. Sound )laster 1. /nter?aces con len"ua7es de alto nivel A5 1.1. /nter?aces del ensamblador 1.1.1. $lementos Eue intervienen en la inter?a: 1.1.2. a inter?a: 1.1.2.1. $l control del u7o 1.1.2.2. $l acceso a los datos 1.1.3. Se"uridad 1.2. Subrutinas y enlace 1.2.1. inRado 1.2.1.1. PJ)/C nombre 1.2.1.2. $>T(* nombre8 tio 1.2.2. @in del módulo rincial 1.2.3. $nsamblado y linRado 1.3. /nter?a: con Pascal 1.3.1. Tios de /nter?a: con Turbo Pascal 1.3.1.1. /nter?a: interna 1.3.1.1.1. Parámetros en los rocedimientos 1.3.1.1.2. $7emlos 1.3.1.2. /nter?a: e&terna 1.3.1.2.1. $7emlos 1.3.2. Lirtual Pascal y @ree Pascal 1.4. /nter?a: con C 1.4.1. Comunicación entre C y ensamblador 1.4.2. $7emlos 1.4.3. Pelles C 1.4.3.1. $7emlos 1.4.3. Tiny C 1.4.3.1. $7emlos 1.! /nter?a: con )asic 1.!.1. $7emlos 1.!.1.1. /nter?a: interna 1.!.1.2. /nter?a: e&terna 1.!.1.3. Creación de IuicR ibraries 1.!.2. Lisual )asic y (aid I)asic 1.#. +ódulos en ensamblador 1.#. =eurar 20. Pro"ramación indos 20.1. Pro"ramación indos 20.1.1. ;ntes de eme:ar 20.1.1.1. =e6niciones básicas 20.1.1.1.1. a ila re"istro SS5 20.1.1.1.2. os re"istros de bandera 20.1.1.2. Cuentas revias 20.1.1.3. /nstalación de aEuetes 20.1.1.4. (;=s ara ensamblador 20.1.1.!. /nclusión de de6niciones y bibliotecas 20.1.1.#. os ro"ramas Eue vamos a ver 20.1.2. Pro"ramas de consola indos 20.1.3. Primer ro"rama indos con ventanas 20.1.4. Primera ventana indos 20.1.4.1. Lentana simle indos 20.1.4.2. Lentana con resource e&terno indos 20.1.4.3. Lentana con resource interno indos 20.1.!. Te&to en la ventana indos 20.1.!.1. Te&to con =raTe&t 20.1.!.2. Te&to con Createindo$& osición libre 20.1.!.3. Te&to customi:ado 20.1.!.4. Te&to con "di 20.1.!.!. Te&to con resources 20.1.!.#. Aierenlace con resources e&ternos 20.1.#.#. Aierenlace con resources internos 20.1.'. =ibu7o en la ventana indos 20.1.'.1. Caleidoscoio con "di y in+ain.ms"Wloo 20.1.'.2. Caleidoscoio con "di y ndProc.T/+$( 20.1.'.3. $7emlo de "rá6cos con "di 20.1.'.4. $7emlo de "rá6cos con "di 20.1.'.!. )+P con resource en indos 20.1.'.#. Car"ando un )+P en nuestra ventana 20.1.-. Ob7etos en nuestra
ventana 20.1.-.1. )otones en indos y mensa7e no modal 20.1.-.2. )otones en indos y mensa7e modal 20.1.-.3. )otones c%ecRbo& radiobuttons in?o en resource 20.1.. =i?erentes tios de botones con y sin imá"enes 20.1..1. Te&to customi:ado en botón 20.1..2. )otones con doble ima"en customi:ación de cursor sobre botón 20.1.10. $7emlos de men,es en indos 20.1.10.1. +en, simle 20.1.10.2. +en, con iconos 20.1.11. Jso del ratón en indos 20.1.11.1. Coordenadas del ratón 20.1.12. Common Controls ara 6c%eros en indos y toolti 20.1.12.1. Common Controls ara 6c%eros en indos y toolti 20.1.13. $7emlo de =s 20.1.13.1. $7emlo de =s 20.1.14. =euración en indos 21. Pro"ramación inu& 21.1. Pro"ramación inu& 22. Pro"ramación "rá6ca 22.1. Pro"ramación "rá6ca 22.1.1. ;l"unas de6niciones 22.1.1.1. Pi&el 22.1.1.2. Pro?undidad de color 22.1.1.3. $l b,?er de vdeo 22.1.1.4. $l color 22.1.1.!. a aleta de colores 22.1.1.#. Or"ani:ación de la memoria en modo 13% 22.1.1.'. +odos "rá6cos 22.1.1.-. (a:ón de asecto 23. neas "rá6cas 23.1. neas 23.1.1. $cuación de la endiente de la recta 23.1.2. ;l"oritmo de )resen%am 23.1.2.2. $7emlo 23.1.2.2.1. ;banico de lneas "rá6cas 23.1.2.2.2. Comletitud de recuadro con lneas 23.1.3. (ecorte Cliin"5 23.1.3.1. =ibu7o de unto con recorte 23.1.3.2. ;l"oritmo de Sut%erland 2-.1.3. @ormato )+P 2-.1.4. $&tra 2. Pantallas virtuales 2.1. Pantallas virtuales 2.1.1. Iué es una antalla virtual 2.1.1.1. Pantallas virtuales en 13% 2.1.2. $7emlos 2.1.2.1. (ebote de elota simle 2.1.2.2. (ebote de elota
eserando el comien:o del retra:o 2.1.2.3. (ebote de elota mediante antalla virtual 2.1.2.4. (ebote de varias elotas mediante antalla virtual 30. Te&to en modo "rá6co 30.1. Te&to en modo "rá6co 30.1.1. @uentes del sistema 30.1.1.2. Soorte del )/OS de vdeo 30.1.1.3. Caracteres or de?ecto en LG; y +CG; 30.1.2. Generador de caracteres so?tare 30.1.2.1. +aniulación de i&els 30.1.2.2. (ecorte 30.1.3. $7emlos 30.1.3.1. @uentes -&- de la )/OS 30.1.3.2. @uentes -&1# de la )/OS 30.1.3.3. @uentes -&1# del usuario 30.1.3.4. Otras ?uentes del usuario 30.1.!. +ás allá 31. Seno y coseno 31.1. @unciones seno y coseno 31.1.1. =e6nición 31.1.1.1. (a:ones tri"onométricas 31.1.2. +etodolo"a 31.1.2.1. (e"la de cálculo 31.1.3. $7emlo8 esiral 31.1.3.1. $7emlo con tablas re"eneradas 31.1.3.2. a base de la 6"ura 31.1.3.3. $siral con corocesador 32. Grá6cos ?ractales 32.1. Grá6cos ?ractales 32.1.1. =e6nición de ?ractal 32.1.1.1. a idea de dimensión 32.1.1.2. =e6nición de ?ractal 32.1.1.3. =imensión de AausdorQ<)esicovitc% 32.1.2. @ractales lineales 32.1.2.1. Polvo de Cantor 32.1.2.2. Trián"ulo de SierinsRi 32.1.2.3. Curva de Moc% 32.1.2.4. Curvas de Ailbert 32.1.2. @ractales no lineales o comle7os 32.1.3.1. Con7untos de Uulia 32.1.3.2. Con7unto de +andelbrot 32.1.4. Caos 32.1.4.1. =ia"rama de bi?urcación 32.1.4.2. ;tractor de oren: 32.1.!. O( 33.1.1.2. *OT 33.1.1.3. ;*= 33.1.1.4. O( 33.1.2. $l teclado 33.1.3. =oble trile y n
;. Caracteres ;SC// ). Saltos Condicionales C. =ebu" C.1. =ebu" C.1.1. $7ecución del ro"rama C.1.2. Comandos de =ebu" C.1.2.1. ; C.1.2.2. = C.1.2.3. $ C.1.2.4. G C.1.2.!. * C.1.2.#. P C.1.2.'. I C.1.2.-. ( C.1.2.. T C.1.2.10. J C.1.2.11. =. rea de datos de la )/OS =.1. rea de datos de la )/OS =.1.1. =atos del sistema =.1.2. =atos del adatador de antalla $. Puertos de entrada y salida @. Códi"os scan del teclado @.1. Códi"os scan del teclado @.1.1. Teclas de ?unciones @.1.2. Teclado numérico @.1.3. Teclado al?abético @.1.4. Teclado numérico sobre el teclado al?abético5 @.1.!. +iscelánea G. Otimi:aciones G.1. Otimi:aciones G.1.1. imiar re"istros G.1.2. (e"istro )P G.1.2. *os arovec%amos del códi"o G.1.3. /ncrementos G.1.4. +ultilicación y división or otencias de dos G.1.!. $sacio de memoria reservado ero no iniciali:ado G.1.#. +over y almacenar alabras en lu"ar de bytes G.1.'. $vitar saltos G.1.-. TamaFo de las variables G.1.. $7emlo A. +S<=OS A.1. +S<=OS A.1.1. Iué es A.1.2. =ónde encontrarlo A.1.3. $l indicador de comandos P(O+PT5 A.1.4. Cambiar de directorio A.1.!. imiar la antalla A.1.#. =irectorio A.1.'. Crear un directorio A.1.-. Creación de un arc%ivo A.1.. Lisuali:ación de un arc%ivo A.1.10. ;rc%ivos );TCA A.1.10.1. Comentarios A.1.10.2. /mresión A.1.10.3. $tiEuetas A.1.10.4. Saltos A.1.10.!. @lu7o A.1.10.#. )ucles A.1.10.'. Pausas A.1.10.-. Parámetros A.1.10.11. $7emlos A.1.11. )orrar 6c%eros A.1.12. )orrar directorios /. /nstrucciones -0-' or orden al?abético5 U. Grandes royectos en ensamblador U.1. Grandes royectos en ensamblador U.1.1. @lat assembler U.1.2. +enuetOS M. =ecálo"o de buenas rácticas Otros
Preámbulo Qué es Abre los Ojos al Ensamblador
(ealmente no es un libro. Son las notas bien or"ani:adas y estructuradas en mi camino de arendi:a7e del len"ua7e ensamblador. Cómo he aprendido a programar en Ensamblador
$l ?ormato %a sido absolutamente autodidacta. =ecenas de %oras buscando in?ormación en internet. $studiándome ro"ramas escritos en otros len"ua7es. ibros en ensamblador y otros len"ua7es. Cientos de %oras ersi"uiendo al dic%oso ro"rama Eue no acaba de ?uncionar. $secialmente di?cil %a sido encontrar in?ormación en ensamblador resecto a las listas y árboles de %ec%o no encontré nin"una. Por qué tres compiladores: MAM! "AM! #AM
B)uena re"untaD. Xo mismo me la %e %ec%o muc%as veces sobre todo cuando tena Eue traducir un ro"rama correcto a los otros y tena Eue erse"uir los errores durante %oras. $n rinciio comencé con +;S+ Ycómo noZ. $s el Eue tiene más anti"[edad y or tanto más recorrido as como abundante biblio"ra?a y recursos or internet. ;demás su uso se
me anto7a más sencillo Eue el de otros muc%os. O?rece cantidad de sinta&is destinada a ?acilitar la vida al ro"ramador se me vienen a la cabe:a or e7emlo las estructuras las matrices la creación de variables locales dentro de rocedimientos etc. Cono:co "ente y %e ledo en muc%os ?oros desotricando contra +icroso?t y sus %erramientas\ yo no lo comarto en absoluto. $l nivel de usabilidad de Eue las dota no es ?ácil de ro"ramar y son tan %ábiles como cualEuier otra. X además se uede obtener de ?orma "ratuita aunEue si"a siendo de códi"o roietario. *;S+. Xa cuando emecé con mis notas me iba interesando. Aaba comunidades con bastante activad de usuarios y se vean libros dedicados a él. $s "ratuito oen source y multilata?orma nos lo odemos encontrar resente en muc%as distribuciones de linu&. $n resumen areca bastante atractivo. X sinceramente no me %a de?raudado el uso Eue %ace de las estructuras es bastante bueno ?acilita bastante la vida. @;S+. Por éste me emecé a interesar bastante más tarde Eue or *;S+. =e %ec%o tuve Eue revisarme muc%o de lo escrito ya ara adatarlo a él. $n muc%as de mis incursiones or internet buscando in?ormación ?ue cuando me toé con in?ormación sobre este comilador y su comunidad de usuarios areca bastante activa. a ro"ramación con él también areca muy interesante además su sinta&is es ero Eue muy arecida a la de *;S+ as Eue no %aba un "ran salto. ;demás de esto me arece un royecto imresionante ues se o?rece en un 6c%ero comrimido donde viene todo un aEuete con códi"o ?uente incluido ara ro"ramar en una "ran variedad de sistemas Eue incluyen +S<=OS indos de 32 y #4 bits inu& etc. ;demás viene con su roio editor de te&tos adatado al comilador @;S+ con coloreado de sinta&is y también acomaFado del códi"o ?uente. Todo viene con códi"o ?uente comilable con el roio comilador @;S+ del aEuete. /mresionante. Sin embar"o en mi oinión adolece un oco en su de6nición de las estructuras me "ustara Eue al menos ?uesen como las de *;S+. YPor cuál me decantaraZ. Sinceramente creo Eue cualEuiera de los tres es er?ectamente válido. ;%ora bien debo con?esar Eue la mayor arte de los ro"ramas los %e desarrollado rimero en +;S+ y lue"o los %e traducido a *;S+9@;S+. Por qué otro libro en ensamblador
Sur"e como mi necesidad ersonal de instruirme en este len"ua7e. Su ori"en son las notas Eue tomaba en mi ?ormación. Posteriormente ensé Eue Eui:ás odra resultar interesante ara al"uien y es cuando emie:o a documentarlo en ?ormato libro. $n al",n sitio le Eue un libro nace cuando no se %a encontrado nada arecido también odra servir como e&licación. Por qué el nombre $Abre los Ojos al Ensamblador$
$n mi intención no está ser retencioso. ; veces es di?cil esco"er un nombre ero ensé Eue éste es bonito y ree7a mi roia e&eriencia ersonal con el len"ua7e ensamblador y esero Eue también sea la tuya. Qué puedes esperar de este libro
/ntento ale7arme del estilo clásico de los libros en ensamblador Eue están en?ocados básicamente a la ro"ramación de sistemas. Creo Eue aEu se uede arender a ro"ramar en ensamblador como si de cualEuier otro len"ua7e se tratase. Qué no se debe esperar de este libro
*o se debe eserar Eue te lo resuelva todo. *o es un libro al uso uesto Eue abarca el erodo de conocimiento rácticamente a cero con el Eue actualmente ten"o. Con todo lo Eue ello imlica ara bien y ara mal. ; lo lar"o de todo el libro %ay comentarios Eue le ueden venir muy bien a un neó6to o métodos de deuración marca de la casa ero
también %abrá códi"o escrito %ace tiemo Eue a%ora mismo en?ocara de ?orma di?erente o Eue abreviara de ?orma más ele"ante. Sé Eue %ay ?allos como en todo or e7emlo en los comentarios de los re"istros Eue se modi6can dentro de una rutina están dentro de los temas endientes. Se esera Eue te lo leas bien lo asimiles modi6Eues los untos Eue necesites y 6namente tomes tu roia decisión. Cosas que modi%car&as del libro
Probablemente %aya muc%as ero reito Eue es mi e&eriencia ersonal en él %e incluido lo Eue me areca interesante como me areca adecuado. $s osible Eue en al"unos untos consideres el te&to e&cesivo y en otros escasos ero es ?ruto de mi "usto. Por qué deber&as aprender ensamblador
YPor Eué noZ. Pensaba de7arlo aEu ero aFadiré una cosa más8 si te "usta ro"ramar te "ustará el ensamblador. Por qué Abre los Ojos al Ensamblador no es gratuito
$sta a6rmación no es cierta lo ,nico Eue no es "ratuito son las bibliotecas Eue se utili:an ara comilar muc%os ro"ramas del libro ero tanto el te&to como amlias artes de él como son la ro"ramación en indos o las inter?aces con len"ua7es de alto nivel s Eue lo son en la medida en Eue están accesibles nte"ramente. =e %ec%o tamoco %e uesto muc%o én?asis en esto or e7emlo también está comleto el ro"rama Tetris. =ic%o esto y resondiendo a la re"unta es evidente Eue no esero %acerme rico con el len"ua7e ensamblador a estas alturas ero s me "ustara Eue cubriese los "astos y si me diese también ara al"una entrada de cine ues estuendo. $l libro no está comleto y me "ustara %acerlo lo más articiativo osible ero el ensamblador no es la ,nica ocuación Eue ten"o de %ec%o sólo es una a6ción y le dedicaré tanta atención como la desierte entre la "ente. Cabe reseFar Eue el costo del re"istro se considera como un donati'o y or lo tanto no tiene nin"una clase de imlicaciones ara mi ersona. ;bre los O7os al $nsamblador no lleva aare7ado el soorte ni la devolución del coste del re"istro además se uede considerar Eue tienes todo el tiemo del mundo ara robarlo antes de re"istrarte y te e&%orto a Eue as lo %a"as tómate tu tiemo revsatelo bien y cuando estés convencido reali:a el a"o del re"istro. a novedad es Eue ya no %ay re"istro de7o como e7ercicio las libreras. +uy imortante también. =ebes considerar Eue nin"una obra está libre de ?allos y ésta no es una e&ceción. (e ning)n modo me puedo considerar responsable de las consecuencias debidas o indebidas que se puedan suceder del uso que le des a la in*ormación! programas! código! etc que aqu& +en el libro Abre los Ojos al Ensamblador, e-isten! sólo t) eres el responsable . Por qué cuesta ./ euros el registro
$s un n,mero redondo y lo su6cientemente ba7o como ara Eue sea accesible or cualEuier ersona. Pues eso las libreras ya no se venden. Qué es el *oro
$s un unto de encuentro entre todos aEuellos a los Eue nos "usta el ensamblador ara intercambiar oiniones y arender unos de otros yo también. Qué no es el *oro
*o es un unto de soorte ara ;bre los O7os al $nsamblador ni ara cualEuier duda Eue te ueda sur"ir. Tamoco estoy obli"ado a crearlo ni a mantenerlo. 0Puedo usar la in*ormación o códigos aqu& descritos en mi propio pro1ecto2
Claro sólo tienes Eue darme crédito donde corresonda. o Eue no es admisible es Eue tu royecto consista en %acer otro ;bre los O7os al $nsamblador cambiando el autor or tu nombre. Jn má&imo de un 20]<30] de ;O$ en tu royecto odra ser acetable aunEue es deseable Eue intentes innovar no coiar. 3e 'isto que quedan cosas pendientes! 0tendré que 'ol'er a pagar el registro cuando estén terminadas2
*o el re"istro es ara todo el libro ;bre los O7os al $nsamblador esté todo terminado o no. ólo t) eres el responsable
Para Eue Euede bien claro le on"o un ttulo. =ebes entender Eue este libro uede contener in?ormación códi"o etc. Eue sean incorrectos. También uede ocurrir Eue siendo correctos t, %a"as un mal uso de ellos. =a i"ual en cualEuier caso el resonsable del uso Eue %a"as de la in?ormación datos códi"o ro"ramas etc. de este libro sólo eres t,. Por ?avor no te olvides de mirar los términos le"ales de uso del libro.
1.1. Sistemas numéricos 1.1.1. Sistema decimal El sistema decimal es el sistema numérico natural humano, en el que todos pensamos naturalmente. Pero, ¿qué es?. Es un sistema numérico en el que la base es el número 10 (bastante redondo). Vemoslo con un e!emplo. "upon#amos que tenemos el número $01%. Vamos a &er cul es su estructura en base 10' 5013 = 5 * 103 + 0 * 102 + 1 * 10 1 + 3 * 100 = 5000 + 0 + 10 + 3.
Puedes &er que hemos empleado el 10 como base en todas las eponenciaciones, por eso se le llama de base 10.
1.1.2. Sistema binario ualquier número en cualquier base puede ser representado eactamente por otro número en cualquier otra base numérica. Esto implica que da eactamente i#ual pensar en base 10 (como hacemos los humanos) o en base binaria (como hacen las computadoras). *a base binaria es la base +. *as computadoras piensan en este sistema porque uncionan con ener#-a eléctrica. e esta manera le asi#nan $ &oltios al número 1, / nin#ún &oltio al 0, con lo que pueden representar cualquier número ormado por ceros / unos (sistema binario). esto es todo lo que una computadora necesita para poder traba!ar. Pues, como &eremos ms adelante, cualquier tipo de operacin / de dato est representado por un número.
1.1.3. Conversión entre decimal y binario Vamos a &er cmo se pasa un número binario a decimal. "upon#amos el 1101 binario' 1101 = 1 * 2 3 + 1 * 22 + 0 * 21 + 1 * 20
=
8 + 4 + 0 + 1
=
13
2i#. 01301 3 4ma del ociente Para pasar un número de decimal a binario utili5aremos el teorema del cociente en el anillo 6, &éase 2i#. 01301. on lo cul, 1%d 7 01101b Esta es una notacin mu/ común en pro#ramacin, 1%d si#niica 1% decimal / 1101b, 1101 binario. e la misma orma que los humanos solemos representar un número decimal separando cada tres ciras para un &isionado ms cmodo, en computacin, se representar el número binario separando cada cuatro d-#itos (cada cuatro, porque 8 es potencia de +, que es la base del entendimiento de la computadora).
1.1.4. Operaciones matemáticas básicas en base dos 9ctualmente en casi cualquier calculadora se puede traba!ar en base binaria, decimal, headecimal e incluso ms, con lo cul, no merece la pena entrar en proundidades. *o ms aconse!able es, por tanto, echar las cuentas con una calculadora / hacer las equi&alencias entre las distintas bases también con ésta, pues de esta orma nos ahorraremos allos innecesarios. :o obstante, he ele#ido a modo de e!emplo una suma / una resta en base binaria' "uma en base dos' 1101 = 23 + 22 + 01 + 20 = 8 + 4 + 1 = 13d 1011 = 23 + 02 + 21 + 20 = 8 + 2 + 1 = 11d --------4 3 11000 = 2 + 2 = 16 + 8 = 24d
+
Eplicacin' omo en base decimal, siempre empe5amos por la derecha / decimos' •
•
•
•
1 ms 1 son + (en decimal), que en binario se representa con un 10, por lo tanto, ponemos un cero / nos lle&amos una. 0 ms 1 es 1, ms 1 que nos lle&bamos de antes, son + (en decimal), que de nue&o, en binario se representa por un 10, por lo que ponemos un cero / nos lle&amos una. 1 ms 0 es 1, ms 1 que nos lle&bamos de antes, son + (en decimal), que en binario es 10, con lo que ponemos un cero / nos lle&amos 1. 1 ms 1 son +, ms 1 que nos lle&bamos antes son % (en decimal), que en binario se representa por un 11, que es lo que ponemos, et voilà.
;esta en base dos 1101 = 23 + 22 + 20 1011 = 23 + 21 + 20 -----0010 = 21
= 8 + 4 + 1 = 13d = 8 + 2 + 1 = 11d --= 2 = 2d
-
Eplicacin' e nue&o, al i#ual que en base 10 empe5amos por la derecha / decimos' •
e 1 a 1 van 0 / nos lle&amos 0.
•
e 1 a 10b (+d) va 1 / nos lle&amos 1.
•
0, ms la que nos lle&bamos de antes, es 1, que hasta 1 van 0, / nos lle&amos 0.
•
e 1 a 1 van 0 / nos lle&amos 0, c'est fini.
1.1.5. Operaciones lóicas 9dems de las conocidas operaciones matemticas, en el sistema binario se pueden deinir otra serie de unciones especiales conocidas como operaciones l#icas que sur#en de la idea de asi#nar el &alor <also< al d-#ito 0 / el &alor <&erdadero< al 1. Estas operaciones se deinen en principio para cantidades de un único d-#ito. *as ms importantes de ellas las &emos en la si#uiente tabla' = 0 0 1 1
0 1 0 1
•
= and 0 0 0 1
= or = or 0 0 1 1 1 1 1 0 4abla 01301 3 >peraciones *#icas
= and &ale 1 slo cuando = e &alen 1 los dos, / 0 en caso contrario
not = 1 1 0 0
•
= or &ale 1 cuando al menos uno de los dos &ale 1, / 0 en caso contrario
•
= or &ale 1 cuando = e son distintos / 0 cuando son i#uales
•
not = es el opuesto de =
1.1.!. "l sistema #e$adecimal no de los ma/ores problemas del sistema binario es la cantidad in#ente de ciras que requiere la representacin de un número de orma temprana, intenta por e!emplo representar en binario el número decimal 1000. >tro de sus #randes problemas es que la con&ersin de binario a decimal / &ice&ersa no es tri&ial. Estos dos problemas se sol&entan con el sistema headecimal que es realmente compacto / cu/a con&ersin a binario / &ice&ersa es mu/ sencilla, por lo que esta notacin es comúnmente utili5ada en computacin, /a que, como /a hemos dicho, el sistema binario es con el que piensa el ordenador. omo su nombre indica el sistema headecimal tiene por base al número 1@. 9qu- tenemos un problema, pues los números que nosotros conocemos &an del 0 al A, que son 10, ¿cmo lle#ar al 1@?B cil, le aCadimos las letras 9 (10), D (11), (1+), (1%), E (18), 2 (1$) a partir del 10, con lo cul /a tenemos 1@ d-#itos para representar números. 1.1.!.1. Conversión entre #e$adecimal y decimal
Vamos a &er cmo se pasa un número headecimal a decimal. "upon#amos el 1+D% headecimal' 12B3
= 1 * 163 + 2 * 162 + 11 * 161 + 3 * 160
=
4096 + 512 + 176 + 3
=
4787
Para pasar un número de decimal a headecimal utili5aremos el teorema del cociente en el anillo 6'
2i#. 0130+ 3 4ma del ociente on lo cul, 8Fd 7 1+D%h. Esta es una notacin mu/ común en pro#ramacin, 8Fd si#niica 8F decimal / 1+D%h, 1+D% headecimal. *a primera cira de un número headecimal es siempre un número, poniéndose un cero a la i5quierda si uera necesario. El F0F@ es un procesador de 1@ bits, lo cul quiere decir que internamente es capa5 de traba!ar con ciras binarias de 1@ d-#itos de lon#itud. *as direcciones de memoria con las que traba!a tienen una lon#itud de +0 bits, lo que le permite direccionar un total de 1 Ge#ab/te de memoria. 1.1.!.2. Conversión entre #e$adecimal y binario
Veamos una tabla con la con&ersin inmediata de los primeros 1@ números headecimales'
Dinario 0000 0001 0010 0011 0100 0101 0110 0111
Headecimal 0 1 + % 8 $ @
Dinario 1000 1001 1010 1011 1100 1101 1110 1111
Headecimal F A 9 D E 2
4abla 0130+ 3 on&ersin Dinario3Headecimal Para con&ertir un número headecimal en binario tan slo tenemos que utili5ar esta tabla, / a cada d-#ito headecimal sustituirlo por sus cuatro d-#itos decimales. "upon#amos que tenemos el número 09Dh / lo queremos pasar a binario' 0 A B C D 0000 1010 1011 1100 1101
Es as- de sencillo. Vamos a con&ertir ahora un número binario en headecimal. Para hacer esto, tan slo tenemos que ase#urarnos que el número de ciras que tiene nuestro número es múltiplo de 8, porque &amos a &ol&er a utili5ar la tabla anterior. "upon#amos, por e!emplo, el número 1011001010b. *o primero que tenemos que hacer es aCadirle dos ceros a la i5quierda para que ten#a un número de d-#itos múltiplo de cuatro, / lue#o, la operacin es !usto la in&ersa de la anterior. 0010 1100 1010 2 C A
1.1.%. &epresentación de datos Gatemticamente se puede traba!ar con cualquier tipo de número, sin embar#o, las computadoras estn diseCadas para traba!ar internamente con números de base binaria, que son, como /a sabemos, slo ceros / unos. Vamos a &er cmo estn estructurados' 1.1.%.1. 'it
Es la unidad ms pequeCa de inormacin, puede contener slo un 0 un 1. 1.1.%.2. (ibble
Es una coleccin de cuatro bits. :o es una estructura de especial interés sal&o para dos ob!etos' 1. El D, que es una orma de representar números en ormato 9"II en 8 bits +. *os d-#itos headecimales, cada uno de ellos tiene una representacin de 8 bits. on un nibble se pueden representar hasta + 8 7 1@ &alores dierentes.
1.1.%.3. 'yte
Es la ms importante estructura de datos, pues es el tamaCo de dato ms pequeCo accesible por un F0F@ / est compuesta por F bits, o sea, + nibbles, / por tanto son representados por + d-#itos en headecimal.
@
$
8
%
+
1
0
4abla 0130% 3 Estructura de un D/te n b/te puede representar hasta + F 7 +$@ &alores dierentes, por e!emplo, representa cada uno de los +$@ caracteres que ha/ en el cdi#o 9"II. 1.1.%.4. )alabra
Es un #rupo de 1@ bits, o equi&alentemente, + b/tes 8 nibblesB por lo que puede ser representado por un número headecimal de 8 d-#itos. Es también una estructura mu/ importante porque todos los re#istros del F0F@ son de 1@ bits, que es con la unidad con la que ue diseCada para traba!ar. Esto quiere decir que el microprocesador F0F@ es de 1@ bits. 1$
18
1%
1+
11
10
0A
0F
0
0@
0$
08
0%
0+
01
00
4abla 01308 3 Estructura de una Palabra na palabra puede representar hasta + 1@ 7 @$.$%@ &alores dierentes. "i deinimos una &ariable como palabra, debemos saber que puede representar un número entero de 0 hasta @$.$%$ o bien un entero con si#no desde 3%+.@F hasta %+.@. El microprocesador F0F@ traba!a con re#istros de 1@ bits. 1.1.%.5. )alabra doble
Es un #rupo de dos palabras, es decir, de %+ bits, 8 b/tes u F nibbles, por lo que puede ser representado por un número headecimal de F d-#itos. 31
30
2*
2+
2%
2!
25
24
23
22
21
20
1*
1+
1%
1!
15
14
13
12
11
10
0*
0+
0%
0!
05
04
03
02
01
00
4abla 0130$ 3 Estructura de una Palabra oble na de sus unciones ms importantes en entornos de 1@ bits es la de contener un se#mento'direccin. En entornos de %+ bits contiene una direccin, puesto que se traba!a con modelos de memoria planos. na palabra doble puede representar hasta + %+ 7 8.+A8.A@.+A$ &alores dierentes. Por lo que una &ariable declarada como tal puede tomar &alores desde 0 hasta 8.+A8.A@.+A$ sin si#no o bien desde 3+.18.8F%.@8F hasta +.18.8F%.@8 con si#no. Eisten procesadores de %+ bits, como el %F@, porque se diseC para que traba!ase internamente con re#istros de %+ bits. 1.1.%.!. Cuádruple palabra
Es un #rupo de cuatro palabras, es decir, @8 bits, F b/tes 1@ nibbles, por lo que puede ser representado por un número headecimal de 1@ d-#itos.
na cudruple palabra puede representar hasta + @8 7 1F.88@.88.0%.0A.$$1.@1@ &alores dierentes. 9ctualmente también eisten microprocesadores de @8 bits prousamente etendidos entre los Ps. 1.1.%.%. ,-ltiplos del byte
"i para medir la capacidad de los re#istros internos del procesador se usan las unidades indicadas anteriormente, cuando se trata de indicar la capacidad de un bloque de memoria o de ciertos dispositi&os como los 3;>G, discos duros / similares, se emplean siempre múltiplos del b/te. 4odos ellos, al operarse con la base + en lu#ar de la decimal, usan como multiplicador no el millar, sino el 10+8, que es el resultado de ele&ar + a 10. •
1 Jb (Kilo b/te) 7 + 10 b/tes 7 1.0+8 b/tes
•
1 Gb (me#a b/te) 7 + +0 b/tes 7 1.0+8 Jb 7 1.08F.$@ b/tes
•
1 Lb (#i#a b/te) 7 + %0 b/tes 7 1.0+8 Gb 7 1.0%.81.F+8 b/tes
•
1 4b (tera b/te) 7 + 80 b/tes 7 1.0+8 Lb 7 1.0AA.$11.@+.@ b/tes
1.1.%.+. (-meros con y sin sino
Hasta ahora hemos tratado slo los números binarios positi&os, pero ¿qué pasa con los ne#ati&os?. En el sistema decimal, el si#no de un número se epresa anteponiendo a la cantidad un #uin para indicar que se trata de un número ne#ati&o o nada en caso de que sea positi&o. "in embar#o, los ordenadores slo son capaces de almacenar d-#itos binarios, no si#nos, por lo que ha/ que recurrir a al#ún sistema alternati&o para indicar el si#no de un número. 9dems, matemticamente podemos conse#uir cualquier número, de cualquier lon#itud, pero las mquinas tienen una capacidad inita, por lo que debemos restrin#ir el tipo de número que podemos tomar. Ha/ que encontrar al#ún método para conse#uir las mismas propiedades que tiene (6,M), el #rupo de los números enteros. / es un rupo conmutativo
"ean a, b, c elementos de (6,M) •
Propiedad asociati&a' a M (b M c) 7 (a M b) M c
•
Eiste el elemento neutro (0)' 0 M a 7 a M 0 7 a
•
Eiste el elemento simétrico (3a)' a M (3a) 7 (3a) M a 7 0
•
Propiedad conmutati&a ' a M b 7 b M a
Puesto que la capacidad de los ordenadores es limitada, establecemos unas ma#nitudes de dimensiones' •
D/te, que tiene una capacidad de F bits.
•
Palabra, con una capacidad de 1@ bits.
•
oble palabra, con capacidad para %+ bits.
•
uadruple palabra, de @8 bits.
Eisten ms, pero estos son los ms usados. 4odos ellos estn pensados naturalmente para alber#ar números enteros positi&os hasta su l-mite, pero ¿cmo podemos almacenar números ne#ati&os?. ;ealmente tenemos que usar un truco que es establecer la mitad de su capacidad para los números positi&os / la otra mitad para los ne#ati&os. El sistema ms comúnmente utili5ado se denomina
•
n número positi&o tiene su bit ms si#niicati&o (el de la i5quierda) siempre a cero, / a uno si es ne#ati&o. Para con&ertir un número positi&o en ne#ati&o (o &ice&ersa) se in&ierten todos los bits del número, / lue#o se le suma uno al resultado. Por e!emplo' 35d = 00100011b -> (invert) -> 11011100b -> +1 -> 11011101b = -35d -35d = 11011101b -> (invert) -> 00100010b -> +1 -> 00100011b = 35d
"upon#amos que co#emos un número de ma#nitud b/te, esto si#niica que slo puede contener F d-#itos, ceros o unos. Lricamente el sistema
2i#. 0130% 3 ompl a + Enteros con si#no 31+F 31+ 31+@ N...O 3% 3+ 31 0 1 + % N...O
ompl a + 1000 0000 1000 0001 1000 0010 N...O 1111 1101 1111 1110 1111 1111 0000 0000 0000 0001 0000 0010 0000 0011 N...O
Enteros sin si#no 1+F 1+A 1%0 N...O +$% +$8 +$$ 0 1 + % N...O
Headecimal F0 F1 F+ N...O 2 2E 22 0 1 + % N...O
1+$ 1+@ 1+
0111 1101 1+$ 0111 1110 1+@ 0111 1111 1+ 4abla 0130@ 3 omplemento a +
E 2
Vemos en este #rico que esta disposicin que hemos ele#ido para nuestro sistema numérico es como el pe5 que se muerde la cola. "upon#amos que tenemos el número 1111 1111b. ¿qué ocurrir-a si le sumamos 1?' 1111 1111 1 -------------- + 1 0000 0000
*a cira que obtenemos ecede de tamaCo b/te, puesto que tiene A d-#itos, por lo tanto el d-#ito de la etrema i5quierda se pierde, es como si intentaras llenar una botella con &asos de a#ua / el último no cupiese, simplemente se desbordar-a / se perder-a. e esta orma ¿qué es lo que obtenemos?, el número 0b, con lo que obtenemos este c-rculo &icioso del que hablbamos antes. Esto ocurre por la /a mencionada limitacin de contencin de cualquier número de las computadoras / a este suceso se le llama desbordamiento. *a única solucin para que no ocurran desbordamientos (puesto que obtenemos resultados impre&isibles) es ele#ir una botella lo suicientemente #rande como para que quepan todos los &asos de a#ua que le &amos a echar. "ean los números' •
•
•
a 7 1000 0001b 7 3(0111 1110b M 1d) 7 3(1+@d M 1d) 7 31+d b 7 0000 0010b 7 +d c 7 0101 0101b 7 F$d
En el caso de que tratemos con enteros con si#no se obser&a inmediatamente que el número a es ne#ati&o, puesto que su d-#ito de etrema i5quierda (el de ma/or peso) es 1. Para &er su representacin decimal ha/ que in&ertir sus bits / sumarle un 1 decimal. Este subcon!unto de , en el caso de los b/tes de 31+F a 1+, con esta operacin suma en complemento a + que hemos deinido es un sub#rupo' •
Es cerrado respecto de la suma. "i notamos al subcon!unto como D, b / bQ dos elementos su/os, bMbQ también es de D por la propiedad del desbordamiento. 1000 0001b 0111 1111b ------------ + 1 0000 0000b
•
•
ontiene al elemento neutro. laramente es el cero. ada elemento tiene su simétrico. ado # en L, su simétrico ser' :>4(#) M 1. :>4 cambiar cada bit a su contrario, / lue#o le sumamos 1. Rnicamente el 1+F se escapa de esta propiedad
porque 31+F es un b/te, pero 1+F /a es un Sord. 9s- (N31+,1+O, suma complemento a +) ser-a un sub#rupo de (,M), pero el 31+F también cabe dentro de un b/te.
•
-128d = 10000000b -> nt(10000000b) -128d. !er"# 128d en $rd -127d = 10000001b -> nt(10000001b) -126d = 10000010b -> nt(10000010b) ... -2d = 11111110b -> nt(11111110b) -1d = 11111111b -> nt(11111111b) 0d = 00000000b -> nt(00000000b) 0d. De%brd# &n 1 1d = 00000001b -> nt(00000001b) 2d = 00000010b -> nt(00000010b) ... 126d = 01111110b -> nt(01111110b) 127d = 01111111b -> nt(01111111b)
•
Propiedad conmutati&a.
•
• • • • • •
• • • •
• • • • •
+ 1b = 01111111b + 1b = 10000000b = + 1b = 01111110b + 1b = 01111111b = + 1b = 01111101b + 1b = 01111110b =
127d 126d
+ 1b = 00000001b + 1b = 00000010b = + 1b = 00000000b + 1b = 00000001b = + 1b = 11111111b + 1b = 00000000b =
2d 1d
+ 1b = 11111110b + 1b = 11111111b = + 1b = 11111101b + 1b = 11111110b =
-1d -2d
+ 1b = 10000001b + 1b = 10000010b = -126d + 1b = 10000000b + 1b = 10000001b = -127d
1000 0001b 0000 0010b 0000 0010b 1000 0001b ----------- + ---------- + 1000 0011b 1000 0011b 1000 0011b = -(0111 1100b + 1d) = -(124d + 1d) = -125d = -127d + 2d.
Importante 9ntes de reali5ar operaciones con números con si#no es preciso cerciorarse de que todos ten#an el mismo número de bits. "i esto no es as- ha/ que alar#ar el tamaCo de los ms cortos al tamaCo del ma/or. Para ello se repite la cira a la i5quierda tantas &eces como sea necesario, es decir, a los números ne#ati&os se les aCade 1 repetidas &eces a la i5quierda / 0 a los positi&os. Esto /a se consi#ue con los operadores DT, T, por e!emplo. >tra cosa son los enteros sin si#no. Por e!emplo, de tipo b/te, que son F bits ser-an + F7+$@ elementos, que &an desde el 0 hasta el +$$. 9qu- /a no tenemos la suma en complemento a +, sino la suma normal, pues no eisten los ne#ati&os, pero el desbordamiento si#ue eistiendo, lo cul pro&oca que el número resultante de la suma si#a siendo de tipo b/te, pero el resultado ser-a distinto al esperado. Por e!emplo' 244d = '4 = 11110100b 128d = 80 = 10000000b ------------------------- + 372d = 174 = 101110100b
Vemos que el número binario resultante de la suma tiene A d-#itos, se pierde entonces el de la etrema i5quierda, quedando' 116d =
74 =
01110100b
>bsér&ese que un b/te slo puede tener dos d-#itos headecimales, pues 22h 7 +$$d. 1.1.%.*. (-meros reales
En computacin son llamados también números
9l i#ual que ocurr-a con los números ne#ati&os, el ordenador no trata directamente con este tipo de números, sino que se &ale de un artiicio para ello. 4ampoco eiste una capacidad ininita para ellos, l#icamente. :osotros &amos a &er slamente tres tipos de números en coma lotante, descritos en la si#uiente tabla' 4ipo de dato ;eal orto ;eal *ar#o ;eal Etendido
Dits %+ @8 F0
D/tes -#itos si#niicati&os ;an#o aproimado 8 @3 1.1FU103%F hasta %.80U10 %F F 1$31@ +.+%U10 3%0F hasta 1.AU10 %0F 10 1A %.%U10 38A%+ hasta 1.1FU10 8A%+ 4abla 0130 3 :úmeros en oma 2lotante
El ran#o de los eponentes para los números reales es' 2ormato ;eal orto ;eal *ar#o ;eal Etendido
;an#o de eponente 31+ a M1+F 310+% a M10+8 31@%F% a 1@%F8 4abla 0130F 3 ;an#o de Eponentes
¿mo pasamos un número real decimal a binario? Es bien sencillo, tan slo ha/ que i!arse que estar en base + si#niica que todos los números son combinaciones lineales de potencias de + (i#ual que si estamos en base decimal ser-an combinaciones lineales de potencias de 10). Por e!emplo, co!amos el número decimal %A.$@+$ (es con&eniente habituarse a la notacin in#lesa del punto para desi#nar los decimales porque los len#ua!es de pro#ramacin estn diseCados en in#lés / esta es la notacin que utili5an). En base decimal tenemos' 39.5625 = 3101+9100+510-1+610-2+210-3+510-4
En binario tenemos' 39.5625 = 32+4+2+1+0.5+0.0625 = 125+024+023+122+121+120+12-1+02-2+02-3+12-4
on lo que /a tenemos la representacin binaria del número' %A.$@+$d 7 100111.1001b Vamos a &er un al#oritmo para hacer esto' *a primera parte consiste en con&ertir la parte entera a binario. Esto /a se hace como hemos &isto anteriormente, utili5ando el 4eorema del ;esto' %Ad 7 100111b
*a se#unda parte consiste en con&ertir la parte decimal a binario. Para ello utili5amos un procedimiento seme!ante al anterior, slo que ahora en lu#ar de di&idir por +, multiplicamos por + / &amos co#iendo la parte entera que nos &a saliendo hasta que nos quedemos sin decimales' Parte decimal 0,$@+$ 0,1+$0 0,+$00 0,$000
U+ Parte entera 1,1+$0 1 0,+$00 0 0,$000 0 1,0000 1 4abla 0130A 3 on&ersin parte decimal a binario
4omando de arriba a aba!o tenemos que 0.$@+$b 7 1001d >bsér&ese, asimismo que este al#oritmo es &lido para cualquier base a la que queramos con&ertir, utili5ando su base para multiplicar. ¿mo #uardamos en memoria un número binario decimal? Vamos a se#uir las especiicaciones dadas por el IEEE3$8. Para #uardar al#o tendremos que reser&ar espacio / esto inluir decisi&amente en nuestra orma de #uardar el número binario decimal, si bien el método estructural es el mismo. El ormato con el que &amos a #uardar un número real binario es este' 9+D onde 9 es un número binario decimal con 1 como parte entera / cualquier combinacin de unos / ceros para la parte decimal. Por e!emplo' 1.0101001 D es el eponente del número binario decimal, para aceptar ne#ati&os / positi&os, éste se &a a #uardar de orma discriminada. Es interesante recordar que la notacin cient-ica que se utili5a mu/ a menudo para un número decimal real es la si#uiente' #b
onde a es un número real cualquiera, Eb si#niica por 10 ele&ado a b. Entonces a es la mantisa / b es el eponente. Veamos ahora cul es la estructura para cada uno de los tipos de números reales' •
•
El bit ms si#niicati&o tanto de los %+ de real corto, como de los @8 del real lar#o, como de los F0 del ;eal etendido est reser&ado para almacenar el si#no del número' 0 para positi&o, 1 para ne#ati&o. *os si#uientes F bits del real corto, 11 para el real lar#o / 1$ para el ;eal etendido, estn reser&ados para #uardar el eponente del número, / para traba!ar con eponentes positi&os / ne#ati&os, éste est discriminado por una suma de 1+ (+ 31) en el caso de reales cortos, 10+% (+ 103 1) para los reales lar#os / 1@%F% (+ 1831) para los ;eales etendidos.
•
El resto de los bits se reser&an para la mantisa del número eponencial. Es importante decir que el 1 de la parte real de la mantisa no se #uarda puesto que se asume que siempre es as-. En caso del número real 0, toda la estructura que comentamos tendr todos sus bits a cero.
Veamos esto mismo #ricamente' " %1
E=P %0
G9:4I"9 +% ++ 4abla 01310 3 ;eal corto
0
" @%
E=P @+
G9:4I"9 $+ $1 4abla 01310 3 ;eal lar#o
0
" A
E=P F
G9:4I"9 @8 @% 4abla 01310 3 ;eal etendido
0
Eaminamos, como e!emplo, cmo se #uardar-a el número anterior en un real corto' Hemos dicho que 39.5625d = 100111.1001b = 1.00111100125b
El si#no es positi&o El eponente $dM1+d 7 1%+d 7 10000100b *a mantisa 001111001 on lo cul, se #uardar-a en un espacio de memoria de %+ bits as-' 0 10000100 00111100100000000000000b = 4214000
"i estamos traba!ando en un entorno de 1@ bits, esto se reco#er-a en ='9= as-' = 7 8+1E, 9= 7 8000 / se #uardar-a en ormato *ittle Endian as-' 00 80 1E 8+. 9l#unos e!emplos' 0 1 0 1
00000000 00000000 11111111 11111111
00000000000000000000000b 00000000000000000000000b 00000000000000000000000b 00000000000000000000000b
= = = =
Cer %itiv Cer ,e#tiv n/init %itiv n/init ne#tiv
1 10000111 00110001101000000000000b = C3 98 D0 00 -1 * 2(135-127) * 1.00110001101 = -100110001.101 = -305.625 0 10000000 00000000000000000000000b = 40 00 00 00 +1 * 2(128-127) * 1.0 = 10.0 = 2 0 10000101 01101101101001110000000b = 42 B6 D3 80 +1 * 2(133-127) * 1.0110110110100111 = 1011011.0110100111 = 91.4130859375
0 10000001 01011000000000000000000b = 40 AC 00 00 +1 * 2(129-127) * 1.01011 = 101.011 = 5.375 0 10000000 11000000000000000000000b = 40 60 00 00 +1 * 2(128-127) * 1.11 = 11.1 = 3 + 0.5 = 3.5
>bsér&ese que multiplicar un número = en binario por + n equi&ale a correr la coma decimal de = n &eces a la derecha si n es positi&o, / a la i5quierda si n uera ne#ati&o Por e!emplo, &eamos cmo calculamos la representacin decimal del binario 101.011' *a parte entera' 101b=5d.
*a parte decimal' 0*2-1+1*2-2+1*2-3 = 14d+18d=38d=0375d
;ealG01 di#o NbinO ;esultado en pantalla
;eal01 di#o NbinO
;eal:01 di#o NbinO
;eal201 di#o NbinO
>e#C'01 .0004998
"ource 01301 3 Imprimir números reales en pantalla *o que hacemos en este e!emplo es ir desmenu5ando cada parte del número real #uardado se#ún las especiicaciones anteriormente comentadas. na &e5 que tenemos la parte entera / la decimal, ha/ que con&ertirlas a 9"II para imprimirlas. 1.1.%.*.1. ne$actitudes en la representación de los n-meros reales en binario
E!ercicio' on&ertir el número decimal 0,1d a binario. Pronto comprobaremos que este proceso se repite indeinidamente / nunca lle#aremos al &alor eacto de 0,1d en binario. *o único que podremos hacer ser aproimarlo tanto como podamos, para lo cul traba!aremos con las cotas superior e inerior binarias de éste número correspondientes a su truncamiento (+% bits en caso de los reales simples) / su inmediato superior. Esto implica que cada &e5 que operemos con este número, estaremos perdiendo ms / ms precisin. Parte decimal 0,1 0,+ 0,8 0,F 0,@ 0,+
U+ Parte entera 0,+ 0 0,8 0 0,F 0 1,@ 1 1,+ 1 0,8 0 4abla 01311 3 ;epresentacin 1.0 en binario
a hemos encontrado el ciclo (0011). Por tanto, la representacin binaria es' 01 =
000011 = 110011001100110011001100 * 2-4
cu/a representacin en IEEE3$8 es' = 0 01111011 10011001100110011001100... = 0 01111011 10011001100110011001100 = 0 01111011 10011001100110011001101 = 3DCCCCCD
QQ est ms primo a que Q, por lo que la representacin de ser QQ. Vamos a &er ahora mediante un e!emplo cmo la representacin de un número en coma lotante pierde precisin rente a los números enteros' Para empe5ar, el espacio utili5ado para representar un número en coma lotante ha/ que di&idirlo para #uardar el eponente / la mantisa, mientras que el número entero usa todo el espacio para la mantisa. Esto si#niica que el ormato para representar números en coma lotante tendr menos precisin que el ormato entero. "upon#amos que tenemos el si#uiente ormato en F bits para representar números en coma lotante' 3 5
El eponente no &a a estar biselado, con lo que podr representar eponentes desde el 0 hasta el / la mantisa usa el bit 1 por deecto de la parte entera numérica. "i el eponente es 0 / la mantisa es 0, el número ms pequeCo que podremos representar ser 1,0+ 0 7 1. "i el eponente / la mantisa tienen todos sus bits a 1, el número ms #rande que podremos representar ser 1,11111+ 7 11111100b 7 +$+d. Por otra parte usando el ormato de F bits para #uardar un entero, tenemos que el número ms pequeCo que puede representar es 0 / el ma/or es + F31 7 +$$. Para empe5ar, /a estamos &iendo que el número de enteros que abarca es ma/or que el de coma lotante, si bien éste puede representar números decimales que el otro no puede, claro. Vamos a &er ahora una curiosa pérdida de datos mediante este método de representar números en coma lotante. "i el ma/or número representable es +$+, ¿cul es su inmediato anterior?. "er-a 1,11110 + 7 11111000b 7 +8Fd. Es decir que antes del +$+ &a el +8F, Wnos hemos comido el +8A, +$0, +$1X, que la representacin entera s posee. 9s-mismo, el si#uiente en la lista ser-a 1,11101 + 7 11110100b 7 +88d. :os hemos &uelto a saltar 8 &alores. El montante del error es ma/or para los &alores ms altos, puesto que la pérdida de precisin en la mantisa es ampliicada por el eponente. uanto ms pequeCo es el &alor, menor es el error en la precisin.
Por e!emplo, si el &alor ms pequeCo representable es el 1, ¿cul es el si#uiente? "er-a 1,00001 +0 7 1.0%1+$d "in pérdida de precisin comparado con un entero. podemos representar eactamente el número +' 1,00000 +1 7 +d En deiniti&a, la representacin de los números en coma lotante suren pérdida de precisin tanto ms cuanto ma/or sea el &alor, mientras que para los &alores pequeCos es bastante aproimado. 9s- que cuidado cuando ha#amos con&ersiones entre números. 1.1.%.10. ittle "ndian vs 'i "ndian
ependiendo de la computadora que estemos usando, los b/tes de una estructura multib/te se pueden almacenar de dos ormas dierentes, que son llamados
Direin+0 Direin+1 Direin+2 Direin+3
Bte0 Bte1 Bte2 Bte3
Di# Endian actúa !usto al re&és, es decir, el b/te ms alto de la estructura multib/te se almacena en la direccin de memoria ms pequeCa / el b/te ms ba!o en la direccin ms #rande. *a estructura multib/te anterior, se almacenar-a as-' B#%e B#%e B#%e B#%e
Direin+0 Direin+1 Direin+2 Direin+3
Bte3 Bte2 Bte1 Bte0
omentario *a distribucin *ittle Endian la utili5an microprocesadores tales como el de Intel, / la del Di# Endian microprocesadores como los de Gotorola, como los que usan los ordenadores <9pple<. >bsér&ese que con la primera estructura, que &a a ser la que nosotros utili5amos, &amos a &er que los pares de d-#itos headecimales que orman un b/te se #uardan en
---------------------------------------------------------------------------;;< ? @e de itte ndi#n --------A<; ? A/n% "tr C#b#er &rt#d --------!, ? 1.0 ----------------------------------------------------------------------------
di %eent de : Abre e %eent de di #%%&e %?di d%?di e%?di %%?di r 100 : C -> ien# en 100 nii? @ entr#d# : Cien de # e@e&in : %te e% e e%#i re%erv#d #r# % d#t% innt dd 0ABCD'01 : De/ini% e nnt : AE&" de% de/inir F% rdeiient% entr#d# r : Abre e rediient de entr#d# : AE&" ndre% E&e E&er#% E&e ## e rr## v # $rd tr innt v d $rd tr innt + 2 : Cn de #E&" #b#@ terin#% e rr## eiti% &n# %eG# : de E&e td # id bien v # 400 : !ervii 4C en%#@e 0 int 21 : vve% # D! entr#d# end : ierr# e rediient di end% : H t#biIn #r% end nii : e dei% # en%#b#dr E&e #E&" terin# e rr##
Hemos deinido una &ariable de tipo *on#Int de 8 b/tes llamada V 9=, N010+O. :os despla5amos entonces a la parte de aba!o correspondiente al se#mento de datos " mediante la tecla <2F< / a&an5amos con la tecla <9&. Pa#.< hasta que lle#amos a este lu#ar de memoria. 4ras e!ecutar las instrucciones hasta lle#ar a mo& a, 8c00h para meter en = / 9= el &alor alto / ba!o de mi*on#Int respecti&amente, que podemos &er en 2i#. 01308.
2i#. 01308 3 epurando *E:I9:.>G con 92 Vemos, pues, que el &alor que toman los re#istros ='9= 7 9D ' E2 01, que es !ustamente el &alor de la &ariable mi*on#Int, adems, &emos que su &alor almacenado en memoria es 01 E2 9D, si#uiendo el método *ittle Endian, por tanto.
1.2. &eistros
entro del procesador F0F@ eisten 18 re#istros de 1@ bits, su misin es almacenar datos o direcciones de memoria de orma temporal a lo lar#o del pro#rama. Ha/ que utili5arlos siempre que se pueda porque los accesos a memoria son mucho ms lentos que los accesos a los re#istros. 9dems, ha/ ciertas operaciones que slo se pueden reali5ar sobre los re#istros. Ha/ re#istros que tienen caracter-sticas especiales, los ha/ que estn especiali5ados en una determinada accin / no todos sir&en para reali5ar al#ún proceso en concreto. Por e!emplo' 9=, D=, =, = pueden utili5arse como re#istros de 1@ bits o el b/te superior e inerior por separado como sendos re#istros de F bits. :o ha/ nin#ún otro re#istro con esta caracter-stica.
1.2.1. &eistros de propósito eneral "on los re#istros ms utili5ados durante el pro#rama. •
&eistro 6. Es el
acumulador principal, utili5ado para operaciones que implican entradaYsalida / la ma/or parte de la aritmética.
•
&eistro '6. Es el re#istro base. Es el único de proposito #eneral que puede ser un -ndice para
direccionamiento indeado, as- como empleado para clculos. •
&eistro C6. Es el re#istro contador. Es mu/ utili5ado con la orden loop para repetir un ciclo.
4ambién es usado para el corrimiento de bits / para muchos clculos. •
&eistro 76. Es el re#istro de datos. Es utili5ado en operaciones de entradaYsalida, as- como en la
multiplicacin / di&isin con ciras #randes traba!ando con el 9=.
1.2.2. &eistros de semento einen reas de @8 Jb dentro del espacio de direcciones de 1 Gb del F0F@. Estas reas pueden solaparse total o parcialmente. :o es posible acceder a una posicin de memoria no deinida por al#ún se#mento' si es preciso, habr de mo&erse al#uno. •
&eistro CS CO7" S"8,"(9 . El >" almacena la direccin inicial del se#mento de cdi#o
de un pro#rama en el re#istro ". Esta direccin de se#mento, ms un &alor de despla5amiento en el re#istro de apuntador de instruccin (IP), indica la direccin de una instruccin que es buscada para su e!ecucin. Para propsitos de pro#ramacin normal, no se necesita reerenciar el re#istro ". •
&eistro 7S 79 S"8,"(9 . *a direccin inicial de un se#mento de datos de pro#rama es
almacenada en el re#istro ". En términos sencillos, esta direccin, ms un &alor de despla5amiento en una instruccin, #enera una reerencia a la localidad de un b/te espec-ico en el se#mento de datos. "uele ser necesario iniciali5arlo. •
&eistro SS S9C: S"8,"(9 . Permite la colocacin en memoria de una pila, para
almacenamiento temporal de direcciones / datos. El >" almacena la direccin de inicio del se#mento de pila de un pro#rama en el re#istro "". Esta direccin de se#mento, ms un &alor de despla5amiento en el re#istro del apuntador de la pila ("P), indica la palabra actual en la pila que est siendo direccionada. Para propsitos de pro#ramacin normal, no se necesita reerenciar el re#istro "".
•
&eistro "S "69& S"8,"(9 . 9l#unas operaciones con cadenas de caracteres (datos de
caracteres) utili5an el re#istro etra de se#mento para mane!ar el direccionamiento de memoria. En este conteto, el re#istro E" est asociado con el re#istro I (-ndice). n pro#rama que requiere el uso del re#istro E" puede iniciali5arlo con una direccin de se#mento apropiada.
1.2.3. &eistros punteros de pila •
•
&eistro S) S9C: )O(9"& . 9punta a la cabe5a de la
pila. tili5ado en las instrucciones de mane!o de la pila. El G"3>" suele colocar la pila al inal del espacio de memoria ocupada por el pro#rama. El "P lo coloca !usto en la cima de la pila. 4odos los datos que se almacenan en la pila son de lon#itud palabra / cada &e5 que se introduce al#o en ella por medio de mane!o de pila (P"H / P>P), el puntero se decrementa en dos (puesto que es una palabra' + b/tes). &eistro ') 'S" )O(9"& . 9punta a una 5ona de la pila
dedicada al almacenamiento de datos (&ariables locales / parmetros de las unciones en los pro#ramas compilados).
1.2.4. &eistros ;ndices •
&eistro S SO<&C" (7"6 . tili5ado como re#istro de -ndice en ciertos modos de
direccionamiento indirecto, también se emplea para traba!ar con operaciones de cadenas. •
&eistro 7 7"S9(9O( (7"6. tili5ado en
determinados modos de direccionamiento
indirecto / para traba!ar con operaciones de cadenas.
1.2.5. )untero de instrucciones o contador de prorama •
&eistro ) (S9&
instruccin en curso dentro del se#mento de cdi#o. Es automticamente modiicado con la lectura de una instruccin.
1.2.!. &eistro de estado o de indicadores =las Es un re#istro de 1@ bits de los cules A son utili5ados para indicar di&ersas situaciones durante la e!ecucin de un pro#rama. *os bits 0, +, 8, @, / 11 son indicadores de condicin, que rele!an los resultados de operaciones del pro#ramaB los bits del F al 10 son indicadores de control / el resto no se utili5an. Estos indicadores pueden ser comprobados por las instrucciones de salto condicional, lo que permite &ariar el lu!o secuencial del pro#rama se#ún el resultado de las operaciones. 1$
18
1%
1+
11 10 0A 0F 0 0@ 0$ 08 0% >2 2 I2 42 "2 2 92 4abla 0131+ 3 Estructura de la Palabra de Danderas
0+ P2
01
00 2
*a descripcin de las banderas es la si#uiente' •
•
2 (arr/ 2la#). Indicador de acarreo. "u &alor ms habitual es lo que nos lle&amos en una suma o resta. >2 (>&erloS 2la#). Indicador de desbordamiento. Indica que el resultado de una operacin no cabe en el tamaCo del operando destino.
•
2 (ero 2la#). Indicador de resultado 0 o comparacin i#ual.
•
"2 ("i#n 2la#). Indicador de resultado o comparacin ne#ati&a.
•
•
•
P2 (Parit/ 2la#). Indicador de paridad. "e acti&a tras al#unas operaciones aritmeticol#icas para indicar que el número de bits a uno resultante es par. 92 (9uiliar/ 2la#). Para a!uste con operaciones D. 2 (irection 2la#). Indicador de direccin. Ganipulando bloques de memoria, indica el sentido de a&ance (ascendente Ydescendente).
•
I2 (Interrupt 2la#). Indicador de interrupciones' puesto a 1 estn permitidas.
•
42 (4rap 2la#). Indicador de atrape (e!ecucin paso a paso).
1.2.% &esumen rá=ico del con>unto de reistros del +0+!? 1.2.%.1. &eistros de propósito eneral
1$
18
1%
1+
:ibble % 9H 1$
18
18
1%
1+
18
11
10
:ibble +
1%
1+
:ibble % H 1$
10
:ibble +
:ibble % DH 1$
11
11
10
:ibble +
1%
1+
:ibble % H
11
10
:ibble +
0A
0F
0
0@
0$
:ibble 1 9* 4abla 0131% 3 ;e#istro 9= 0A 0F 0 0@ 0$ :ibble 1 D* 4abla 01318 3 ;e#istro D= 0A 0F 0 0@ 0$ :ibble 1 * 4abla 0131$ 3 ;e#istro = 0A 0F 0 0@ 0$
08
0%
0+
01
00
01
00
01
00
01
00
01
00
:ibble 0
08
0%
0+
:ibble 0
08
0%
0+
:ibble 0
08
:ibble 1 * 4abla 0131@ 3 ;e#istro =
0%
0+
:ibble 0
1.2.%.2. &eistros )unteros de )ila
1$
18
1%
1+
11
10
0A
0F
0
0@
0$
08
0%
0+
1$
18
1%
1+
11
10
4abla 0131 3 ;e#istro "P 0A 0F 0 0@ 0$
08
0%
0+
01
00
0$
08
0%
0+
01
00
4abla 0131F 3 ;e#istro DP 1.2.%.3. &eistro )untero de nstrucciones
1$
18
1%
1+
11
10
0A
0F
0
0@
4abla 0131A 3 ;e#istro IP 1.2.%.4. &eistros de Semento
1$
1$
1$
1$
18
18
18
18
1%
1%
1%
1%
1+
1+
1+
1+
11
11
11
11
10
0A
0F
0
0@
0$
08
0%
0+
01
00
10
4abla 013+0 3 ;e#istro " 0A 0F 0 0@ 0$
08
0%
0+
01
00
10
4abla 013+1 3 ;e#istro " 0A 0F 0 0@ 0$
08
0%
0+
01
00
10
4abla 013++ 3 ;e#istro E" 0A 0F 0 0@ 0$
08
0%
0+
01
00
4abla 013+% 3 ;e#istro "" 1.2.%.5. &eistros de ;ndice
1$
1$
18
18
1%
1%
1+
1+
11
11
10
0A
0F
0
0@
0$
08
0%
0+
01
00
10
4abla 013+8 3 ;e#istro "I 0A 0F 0 0@ 0$
08
0%
0+
01
00
0A 0F 0 0@ 0$ 08 I2 42 "2 2 92 4abla 013+@ 3 ;e#istro de banderas
0%
0+ P2
01
00 2
4abla 013+$ 3 ;e#istro I 1.2.%.!. &eistro de banderas
1$
18
1%
1+
11 >2
10 2
1.3. )uertos de entrada@salida ada la limitacin de memoria del F0F@, se le aCadi un sistema de acceso a periéricos denominado 4 para mane!ar EY" directamente a ni&el de puerto. I: transiere inormacin desde un puerto de entrada al 9* si es un b/te / al 9= si es una palabra. El ormato #eneral es' , re-#& &ert
>4 transiere inormacin desde un re#istro a un puerto, si es un b/te / desde 9= si es una palabra. El ormato #eneral es' <; &ert re-#&
Podemos especiicar una direccin de puerto esttica o dinmicamente' Estticamente' Podemos utili5ar un operando desde 0 hasta +$$ directamente como' n&t &t&t
, A &ert <; &ert AJ
: ntr#d# de &n bte : !#id# de &n# ##br#
inmicamente' Podemos utili5ar el contenido del re#istro = de 0 a @$.$%$ indirectamente, puede ser adecuado para ir incrementando = a la &e5 que se &an procesando las direcciones de los puertos. Veamos el si#uiente e!emplo' DJ 60 , A DJ
: &ert 60 (te#d) : btiene &n bte
Podemos &er al#unos de los principales puertos en el apéndice E. 9unque la prctica recomendada es utili5ar las interrupciones del >" / del DI>", se pueden pasar por alto con se#uridad para acceder directamente a los puertos +1h, 8038+h, @0h, @1h / +01h. Por e!emplo, para mandar un carcter a la impresora mediante la interrupcin 1h de la DI>", debemos insertar el número de puerto de la impresora en el re#istro =' ,;
A 00 A #r DJ 0 21
: : : :
etiin #r# iriir C#rFter E&e %e v# # iriir &ert de # ire%r# 0 = ;1 ## # D!
1.4. OraniAación de direcciones? Sementación El diseCo del F0F@ es de +0 bits para el bus de direcciones / 1@ para el de datos. on +0 bits para el bus de direcciones el número mimo de posiciones de memoria es de + +0 b/tes 7 1.08F.$@ b/tes 7 1 Gb (+0 es el eponente del +)B sin embar#o nuestros re#istros son de 1@ bits que pueden direccionar a un mimo de
@8 Jb (@8 Jb es +1@ b/tes 7 @$.$%@ b/tes). ¿mo acceder entonces al me#ab/te de memoria?. na posible solucin consist-a en utili5ar dos de nuestros re#istros de 1@ bits, lo cul equi&aldr-a a utili5ar un re#istro de %+ bits, pero por aquél entonces probablemente pensaron que nadie habr-a de necesitar nunca tanto, por lo cul idearon un sistema denominado se#mentacin que consiste en di&idir la memoria en #rupos de @8 Jb. ada #rupo se asocia con un re#istro de se#mento de 1@ bitsB el despla5amiento dentro de cada se#mento lo proporciona otro re#istro de 1@ bits. Para alcan5ar los +0 bits multiplicamos por 1@ el &alor del re#istro de se#mento / sumamos el despla5amiento. >bsér&ese que multiplicar por + 871@ equi&ale a correr el número cuatro posiciones a la i5quierda / los cuatro d-#itos de la derecha se rellenan con ceros, mientras que di&idir por 1@ equi&aldr-a a correr el número 8 d-#itos de la derecha / los cuatro de la i5quierda se rellenan con cero. >22"E4 7 "ELGE:4 U 1@ "ELGE:4 7 >22"E4 Y 1@ (perdemos los 8 bits ineriores) direccin 7 se#mento U 1@ M despla5amiento !K,; 0010010000010000---''!; ----0100100000100010 Direin de 20 bit% 00101000100100100010 r e@e n D!?! ====== D! ====== ====== ! ======
Esta es la orma "'"I con la que accedemos a +0 bits con dos re#istros de 1@ bits. El se#mento en " / el despla5amiento en "I. >bsér&ese que " / "I se solapan, esto implica que eiste ms de una orma de acceder a la misma direccin de memoria, por e!emplo, %00h'0%00h es equi&alente a %%0'0000h. Veamos por qué' 4én#ase en cuenta que 1@ decimal equi&ale a 10 headecimal. como sabemos, multiplicar por 10 equi&ale a aCadir un cero a la derecha. Pues bien, &amos a encontrar la direccin de memoria accedida por estas se#mentaciones' 3D00?0300 => direin = 3D00 * 10 + 0300 = 3D000 + 0300 = 3D300 3D30?0000 => direin = 3D30 * 10 + 0000 = = 3D300
1.4.1. ,odos de direccionamiento "on los distintos modos de acceder a los datos en memoria por parte del procesador. 9ntes de nada, la sintais #eneral de las instrucciones suele ser la si#uiente' instruccin E"4I:>, 2E:4E Zue indica que el contenido de uente se de!a en destino. •
• • • • •
7ireccionamiento inmediato. El operando es una
constante situada detrs del cdi#o de la instruccin. "in embar#o, como re#istro destino no se puede indicar uno de se#mento (habr que utili5ar uno de datos como paso intermedio). ADD d#t DA;
AJ L< AJ d$ AJ
0''' 0''' d#t 0''' ''!; d#t
: 0''' e% &n# n%t#nte n&Iri# : De#r#% &n %"b n%t#nte : D#t e% &n# v#ri#be : AJ = direin de eri# de d#t
•
7ireccionamiento de reistro. *os operandos, necesariamente de i#ual
tamaCo, estn contenidos
en los re#istros indicados en la instruccin. •
AJ M57D1N AJ !?M429CN
•
7ireccionamiento directo o absoluto. El operando est situado en la direccin indicada en la
•
instruccin, relati&a al se#mento que se trate. •
AJ M57D1N AJ !?M429CN
•
7ireccionamiento indirecto. El operando se encuentra en
•
una direccin seCalada por un re#istro de se#mentoU1@ ms un re#istro base (D=YDP) o -ndice ("IYI) (:ota' DP actúa por deecto con "").
•
AJ MBN !?MDN AJ
•
ndirecto con ;ndice o inde$ado . El operando se encuentra en
•
: AJ = M!!*16+BN : M!*16+DN = AJ
una direccin determinada por la suma de un re#istro de se#mentoU1@, un re#istro de -ndice "i o I / un despla5amiento de F 1@ bits.
•
AJ MD+de%N M!+de%N BJ
•
ndirecto con base e ;ndice o inde$ado a base. El operando se
•
• •
: AJ = de%MDN : de%M!N = BJ
encuentra en una direccin especiicada por la suma de un re#istro de se#mentoU1@, uno de base, uno de -ndice / opcionalmente un despla5amiento de F 1@ bits. AJ !?MBJ+D+de%N C!?MBJ+!+de%N CJ
: AJ = !?de%MBJNMDN : C!?de%MBJNM!N = CJ
1.4.2. 9ipos de direccionamiento •
Corto. "i es alcan5ada por medio de un despla5amiento / est limitada a una distancia de 31+F a
1+ b/tes.(F bits) •
Cercano. "i es
alcan5ada por medio de un despla5amiento / est limitada a una distancia de 3%+.@F a %+.@ b/tes dentro del mismo se#mento.
•
e>ano. "i est en otro se#mento / es alcan5ada por medio de una direccin de se#mento / un
despla5amiento.
1.4.3. a pila Es un bloque de memoria de estructura *I2> (<*ast Input 2irst >utput<' último en entrar, primero en salir), #ricamente podr-a decirse que tiene una estructura de una pila de platos' el primero se coloca sobre la mesa, el se#undo sobre el primero, el tercero sobre el se#undo / as- sucesi&amenteB / cuando &amos a co#er un plato, el primero que co#emos es el último que pusimos, el de ms arriba.
El tamaCo de la pila ha/ que deinirlo en un archi&o E=E, si es un archi&o >G el >" establece la pila al inal del se#mento de @8J / car#a el re#istro "P con 222Eh, la parte superior de la pila (el tope de la pila) si el se#mento de @8J es suicientemente #rande. "e incrementa en direccin a los datos. *a pila se direcciona mediante despla5amientos desde el re#istro "" (stacK se#ment). *as posiciones indi&iduales dentro de la pila se calculan sumando al contenido del se#mento de pia "" un despla5amiento contenido en el re#istro puntero de pila "P. 4odos los datos que se almacenan en la pila son de lon#itud palabra, / cada &e5 que se introduce al#o en ella por medio de las instrucciones de mane!o de pila (P"H / P>P), el puntero se decrementa en dosB es decir, la pila a&an5a hacia direccines decrecientes. El re#istro DP suele utili5arse normalmente para apuntar a una cierta posicin de la pila / acceder indeadamente a sus elementos, #eneralmente en el caso de &ariables, sin necesidad de desapilarlos para consultarlos. *a pila es utili5ada para preser&ar el &alor de un re#istro o de una &ariable de 1@ bits (1 palabra) metiéndola en la pila con la orden P"H que sal&amos para recuperarla posteriormente con la orden P>P que co#emos. *as rdenes P>P deben hacerse !usto en orden in&erso a las P"H puesto que la pila tiene estructura *I2>. "u empleo es la única orma de deinir &ariables locales. 4ambién es utili5ada internamente para car#ar el IP cuando llamamos a una subrutina / lue#o se reco#e éste. 4ambién se puede emplear para pasar parmetros a los procedimientos. Puesto que la pila &a a ser mu/ utili5ada, tanto por el pro#ramador como por operaciones internas, es mu/ necesario ir desapilando todo lo apilado para e&itar una pérdida de control sobre el ordenador por desbordamiento de ésta.
2i#. 0130$ 3 2uncionamiento de la Pila
1.4.4. ,emoria nterna *a microcomputadora posee dos tipos de memoria interna' •
;9G. Gemoria de acceso aleatorio.
•
;>G. Gemoria de slo lectura.
*os b/tes en memoria se numeran en orma consecuti&a, iniciando con 00, de modo que cada localidad tiene un número de direccin único. 9qu- aba!o &emos un mapa -sico de la memoria del P tipo F0F@. el primer me#ab/te de memoria, los primeros @80J los ocupa la ;9G, la ma/or parte de la cul est disponible para su uso.
Inicio ec A@0J @FJ @80J 0J
•
•
ireccin He 20000 0000 90000 0
so @8J sistema base de ;>G 1A+J rea de epansin de memoria (;>G) 1+FJ rea de desplie#ue de &-deo (;9G) @80J memoria (;9G) 4abla 013+F 3 Gapa de la Gemoria 2-sica
Gemoria "uperior Gemoria on&encional
;>G. Es un chip especial de memoria que slo puede ser le-da. ebido a que las instrucciones / los datos estn <#rabados< permanentemente en un chip de ;>G, no pueden ser alterados. El "istema Dsico de EntradaY"alida (DI>") de ;>G inicia en la direccin @FJ / mane!a los dispositi&os de entradaYsalida, como un controlador de disco duro. *a ;>G que inicia en A@0J controla las unciones bsicas de la computadora, como la autoprueba al encender, patrones de puntos para los #ricos / autocar#ador de disco. uando se enciende la computadora, la ;>G reali5a ciertas &eriicaciones. ;9G. n pro#ramador est preocupado principalmente con la ;9G, que ser-a me!or llamada memoria de lectura3escritura. *a ;9G se dispone como una
1.4.5. ,emoria Convencional
2i#. 0130@ 3 Gapa de la Gemoria on&encional Encender la computadora pro&oca una " en ;>G. *a rutina de DI>" que se inicia en 22220h &eriica los dierentes puertos para identiicarlos e iniciali5a los dispositi&os que estn conectados a la computadora. espués el DI>" establece dos reas de datos. En la 2i#. 0130@ &emos un mapa de la memoria con&encional.
•
a tabla de servicios de interrupciones se inicia en memoria ba!a en la localidad 0 /
contiene las
direcciones de las interrupciones que ocurren. •
área de datos de 'OS. "e inicia
en la localidad 0080'0000, que est estrechamente relacionada con los dispositi&os conectados. 9 continuacin el DI>" determina si est presente un disco que conten#a los archi&os de sistema del >" /, en caso de que as- sea, accede al car#ador de arranque desde ese disco, car#ando los archi&os de sistema I>."" / G">"."" desde el disco hacia la memoria / transiere el control al punto de entrada del I>."".
1.4.!. Sementos de "nsamblador 4anto el cdi#o como los datos se a#rupan en bloques conocidos como se#mentos. 9 pesar de que tienen el mismo nombre, los se#mentos de un pro#rama ensamblador no son equi&alentes a los se#mentos en que di&ide la memoria el procesador F0F@. na dierencia notable es el hecho de que un se#mento ensamblador puede comen5ar en cualquier posicin de memoria mientras que, como /a se &io, los se#mentos de memoria comien5an siempre en posiciones múltiplos de 1@. "i bien también tienen similitudes' n se#mento no puede ocupar, entre cdi#o / datos, ms de @8 Kilob/tes de memoria. El nombre de un se#mento puede utili5arse como &alor simblico del se#mento de memoria en que se encuentra éste. Cdi !K,; AJ Cdi Cdi ,D!
: C# en AJ e v#r de %eent : dnde %e en&entr# e di
"in embar#o, esta orma de utili5ar el nombre del se#mento de cdi#o slo es posible en pro#ramas de tipo .E=E, en pro#ramas de tipo .>G ni si quiera es necesario, puesto que slo cuenta con un se#mento. *a orma de deinir un se#mento mediante la sintais clsica de G9"G es mediante una pare!a de directi&as que marcan su comien5o / inal. Estas directi&as son "ELGE:4 para el comien5o / E:" para el inal. 9mbas &an precedidas por el nombre que se le da al se#mento /, en el caso de la primera, &a se#uida de una serie de palabras que indican al#unas caracter-sticas del se#mento. >bsér&ese que con la sintais de :9"G no es necesario deinir el inal del se#mento, pues se considera impl-cito al inicio del si#uiente. *as caracter-sticas o atributos que se aplican a la directi&a "ELGE:4 son la alineacin, la combinacin / la clase, las cuales pueden darse en cualquier orden. En caso de que se omitan al#unos de estos cuatro tipos de atributos, el ensamblador tomar para ellos sus &alores por deecto. 1.4.!.1. lineación
"e utili5a para que el se#mento comience en una direccin de memoria que sea múltiplo de un &alor determinado. "us posibles &alores son los si#uientes' 9lineacin D4E T>; T>; P9;9
Gúltiplo de 1 + 8 1@
P9LE GEGP9LE
+$@ 80A@ 4abla 013+A 3 9lineacin
El &alor por deecto es P9;9, P9;9, el cul es utili5ado en la ma/or-a de las ocasiones, puesto que, al utili5ar una direccin múltiplo de 1@ como comien5o hace que el se#mento ensamblador coincida eactamente sobre un se#mento de memoria, ormndose as- una equi&alencia entre ambos. >bsér&ese que el F0F@ / F0+F@ tienen un bus de datos de 1@ bits (una palabra), por lo que traba!an ms rpido si acceden a datos con tamaCo de palabra. "upon#amos el &alor F9ADh que se encuentra en la direccin de memoria A1+3A1%, el procesador los podr recuperar r ecuperar en una sola pasada metiéndolos, por e!emplo en el re#istro 9=B sin embar#o, si este mismo &alor se encontrase en A113A1+ tendr-a que recuperarlo en dos pasos' primero leer-a A103A11, metiendo AD en 9* / lue#o leer-a A1+3A1% metiendo F9 en 9H. Vemoslo #ricamente' A1+ AD 9* A10 ??
A11 F9 9H 9H
A1% F9 9H 4abla 013%0 3 Primer caso A1+ AD 9* 4abla 013%1 3 "e#undo caso
A1% ??
ontamos con la directi&a 9*IL: para inormar al ensamblador que nos alinee elementos en l-mites. Por e!emplo <9*IL: +< alinea en un l-mite de palabra. e orma que en un pro#rama con muchos datos resulta interesante su uso para acelerar el proceso de car#a. "e emplea inmediatamente antes del dato que queramos alinear. 4enemos el cdi#o de e!emplo en <9li#n?1.asm<. E&identemente con esta directi&a se ocupa ms espacio, compruébese eliminndolo eliminndolo del cdi#o / &ol&iendo a compilarloB sin embar#o, para una coleccin de &arias palabras, slo necesitamos usarlo para la primera. 29"G G9" G9"G :9 :9" "G ;esul esulta tado do en pantal ntalla la di#o di#o di#o : !#id# n DB
NbinO
NbinO
NbinO
: !in OAK, 2O : C?P;r#b#@PAPCdi%PC#01>deb& AK,C,1. : -d 100 10' : 0CC8?0100 B8 09 01 B8 00 4C CD 21-3' 9B 8A 61 20 70 61 72 ......QR..# ......QR.. # #r : : Cn OAK, 2O : C?P;r#b#@PAPCdi%PC#01>deb& AK,C,1. : -d 100 10' : 0CC8?0100 B8 0A 01 B8 00 4C CD 21-3' 90 9B 8A 20 70 61 72 ......QR... ......QR.. . #r : !in OAK, 2O 8A9B e%tF en 109-10A n OAK, 2O e%tF en 10A-10B
"ource 01301 3 9li#n?1.asm 1.4.!.2. Combinación
Especiica cmo debe combinarse el se#mento con otros que ten#an el mismo nombre / que se encuentren en otros mdulos del pro#rama. ombin ombinaci acin n P;IV P;IV9 94E PD* PD*I I "49 "49J >GG>: >GG>: 94 GEG>; VI;4 VI;49*
2orma 2orma de combin combinaci acin n :o se comb combin inaa con con otro otross se# se#me ment ntos os del del mism mismoo nom nombre bre "e comb combin inaa con con los los se# se#me ment ntos os del del mis mismo mo nomb nombre re en un únic únicoo se# se#me ment ntoo El se#m se#men ento to se comb combin inaa con con otro otross del del mism mismoo nom nombr bree par paraa or orma marr la pila pila del del pro pro#r #ram amaa oloca oloca el se#mento se#mento en la mismas mismas posicion posiciones es de de memoria memoria que otros con el mismo mismo nombre nombre El se#mento hace reerencia al se#mento -sico indicado por el &alor numérico . Ese tipo de se#mentos se utili5an para acceder a memoria uera del pro#rama, como &ectores de interrupcin o datos de la DI>" El se#mento se colocar al inal del pro#rama, permitiendo utili5ar la memoria que ha/ ms all del mismo. "lo puede haber un se#mento de este tipo /, si ha/ &arios, el resto se tratan como >GG>: eine eine un un tipo tipo de se#me se#mento nto comú comúnn a &arios &arios mdu mdulos los,, pero pero que se se deine deine den dentro tro de de otro 4abla 013%1 3 ombinacin
El &alor que se toma por deecto es P;IV94E. 1.4.!.3. Clase
Especiica un nombre de clase entre comillas para el se#mento que el enla5ador utili5ar a la hora de ordenar los se#mentos. Esta ordenacin pro&ocar que se#mentos con el mismo atributo de clase se coloquen a#rupados unos tras otros. Esta caracter-stica se utili5a para conse#uir que todos los se#mentos de un mismo tipo (datos, cdi#o, pila) se coloquen !untos en memoria cuando se car#ue el pro#rama. E!emplos' • • • • • • •
d#t% !K,; AA
• • • • • • • • • •
d#t%1 !K,; AA
: Abre e %eent de d#t% # iriir : Abre e %eent de d#t% iriir
•
*os dos cdi#os uente completos se pueden &er en el directorio ap+ en los archi&os Gundo=G1.asm Gundo=G1.asm / / "e#tosG1.asm.. 9mbos e!emplos tienen, a eectos prcticos, el mismo resultado, lo &eremos en el si#uiente "e#tosG1.asm cap-tulo.
• • •
i# !K,; AA !;ACU %t#V DW 30 D< (R) i# ,D!
: De/ine # i# de rr## : 30 ##br#% de i#
vide !K,; A; 0B800 vide ,D!
: De/ine &n %eent #r# direin#r : # eri# de v"de en d tet
• • • •
1.4.!.4. cceder a datos de Semento
Para acceder a los datos de se#mento es preciso meter su direccin dentro de un re#istro de se#mento. "i por e!emplo hemos hemos deinido un re#istro de se#mento llamado llamado
Es mu/ con&eniente recordar que no se le puede dar un &alor directamente a un re#istro de se#mento, sino que ha/ que utili5ar un re#istro de intermediario, como 9= en este caso. on la sintais :9"G / 29"G 29"G no podremos usar 9""GE, puesto que no nos permite
: Abre e %eent de d#t% : en%#@e # iriir
Para acceder a una direccin de memoria, se puede poner epl-citamente el &alor del se#mento donde est aunque /a lo ten#a el se#mento ". Por e!emplo' AJ D!?%
*a directi&a 9""GE puede ir se#uida de uno o &arios nombres de re#istros de se#mento se#uidos de dos puntos / el nombre nombre del se#mento se#mento hacia el que estn estn apuntando. apuntando. n e!emplo ser-a' ser-a' A!!< C!?Cdi D!?D#t% !!?i#
En caso de que se desee anular la asociacin entre un re#istro de se#mento / un se#mento, se puede utili5ar el nombre de se#mento :>4HI:L para indicar este hecho. A!!< D!?D#t% A!!< D!?,;,K
: n/r# E&e D! #&nt# # %eent D#t% : n/r# E&e D! # n # &nt# # D#t%
n detalle importante es que 9""GE es una directi&a /, como tal, no #enera cdi#o que car#ue en los re#istros de se#mento el &alor que indica. Es, por tanto, labor del pro#ramador el iniciar los re#istros de se#mento de orma adecuada. Es adems imprescindible colocar al principio de todos los se#mentos del cdi#o la directi&a 9""GE, asociando asociando el re#istro " al se#mento actual. Cdi !K,; A!!< C!?Cdi
En el caso de pro#ramas E=E se aCadir otra directi&a opcional 9""GE asociando el re#istro "" al se#mento de pila, puesto que el propio G">" se encar#a de iniciali5ar los re#istros "" / "P al se#mento de pila deinido por el pro#rama, por lo que no habr que preocuparse por cambiarlos. *os se#mentos, adems, se pueden a#rupar entre s- para ormar se#mentos ma/ores mediante la directi&a L;>P que &a precedida por el nombre del nue&o se#mento ormado por la combinacin de los se#mentos cu/os nombres se indican separados por comas a continuacin de la directi&a L;>P. El tamaCo con!unto de los se#mentos de un #rupo no debe superar los @8Jb. El nombre de este #rupo puede utili5arse como si uese un nombre de se#mento. a hemos &isto un e!emplo anteriormente. ;ecuérdese que muchas de estas acciones se pueden ob&iar utili5ando directi&as simpliicadas de se#mento, que son' .,O7", .CO7", .CO(S9, .79, .79B, .&79, .&79B , .S9C: , .S9&9<) , / ."69. *a estructura de un pro#rama en ensamblador con estas directi&as &ienen ms adelante. 1.4.!.5. 9ipos de ,odelos de ,emoria
*a sintais de G9"G soporta modelos de memoria estndar usados por len#ua!es de alto ni&el. Godelo de Gemoria 4in/
di#o por eecto ercano
"mall
ercano
Gedium
*e!ano
ompact
ercano
*ar#e
*e!ano
Hu#e
*e!ano
2lat
ercano
atos por eecto ercano
"istema >perati&o
G"3>" G"3>", ercano TindoSs G"3>", ercano TindoSs G"3>", *e!ano TindoSs G"3>", *e!ano TindoSs G"3>", *e!ano TindoSs ercano TindoSs :4 4abla 013%+ 3 Godelos de Gemoria
atos / di#o combinados " :o :o :o :o :o "-
*os modelos "mall, Gedium, ompact, *ar#e / Hu#e son los modelos de memoria tradicionalmente reconocidos por la ma/or-a de len#ua!es. •
•
El modelo S, soporta un se#mento de datos / un se#mento de cdi#o. 4odos los datos / cdi#os son cercanos por deecto. El modelo &8" soporta múltiples se#mentos de datos / múltiples se#mentos de cdi#o. 4odos los datos / cdi#os son le!anos por deecto.
•
El modelo ,"7<, soporta múltiples se#mentos de cdi#o / un solo se#mento de datos.
•
El modelo CO,)C9 soporta un solo se#mento de cdi#o / múltiples se#mentos de datos.
•
•
•
El modelo D<8" soporta ob!etos de datos ma/ores que un solo se#mento, pero la implementacin de este modelo debe ser cosa del pro#ramador. Puesto que el ensamblador no porporciona soporte directo para esta caracter-stica, este modelo es equi&alente al *9;LE. El modelo 9(E slo es admitido por el G"3>". 9lo!a todos los datos / cdi#o en el mismo se#mento que no puede sobrepasar los @8Jb de lon#itud, al i#ual que el tamaCo del pro#rama completo. El modelo 9 unciona eactamente i#ual que el modelo 4I:, slo que en %+ bits, alo!ndose cdi#o / datos en el mismo / único se#mento de + %+ 7 8 #i#as de tamaCo. Para poder utili5arlo, ha/ que anteponerle al menos la directi&a .%F@. *as direcciones / punteros son todos cercanos de %+ bits.
1.4.!.!. S;mbolos )rede=inidos
*a sintais G9"G inclu/e al#unos s-mbolos predeinidos (también llamados equi&alencias predeinidas). Podemos usar estos s-mbolos en cualquier punto de nuestro cdi#o para reco#er su &alor. "lo ha/ que tener en cuenta las ma/úsculas / minúsculas en caso de que se especiique la opcin Yp. "-mbolos predeinidos con inormacin de se#mentos' "-mbolo [code [ode"i5e [ur"e# [data [ata"i5e [ardata [ardata? [Godel [stacK [Tord"i5e
escripcin e&uel&e el nombre del se#mento de cdi#o e&uel&e un entero que representa la distancia por deecto al cdi#o e&uel&e el nombre del se#mento actual Epande hasta el L;>P e&uel&e un entero que representa la distancia por deecto a los datos e&uel&e el nombre del se#mento deinido por .29;949 e&uel&e el nombre del se#mento deinido por .29;949? e&uel&e el modelo de memoria seleccionado Epande al L;>P para pilas cercanas o al "49J para pilas le!anas Proporciona el atributo de tamaCo del se#mento actual 4abla 013%% 3 "-mbolos de "e#mento
"-mbolos predeinidos con inormacin de mbito' "-mbolo [pu [En&iron [Interace [Version
escripcin ontiene una mscara de bits especiicando el modo de procesador e&uel&e &alores de las &ariables de entorno durante el ensambla!e ontiene inormacin acerca de los parmetros del len#ua!e ;epresenta el teto equi&alente del número de &ersin del G9"G. P.e. para G9"G @.1., lo epande a @10. 4abla 013%8 3 "-mbolos de mbito
"-mbolos predeinidos con inormacin de echa / hora'
"-mbolo [ate [4ime
escripcin Proporciona la echa actual del sistema durante el ensambla!e Proporciona la hora actual del sistema durante el ensambla!e 4abla 013%$ 3 "-mbolos de mbito
"-mbolos predeinidos con inormacin del ichero' "-mbolo [2ileur [2ile:ame [*ine
escripcin :ombre / etensin del ichero actual a el nombre del ichero principal que est siendo ensamblado a el n\ de l-nea del cdi#o uente del ichero actual 4abla 013%@ 3 "-mbolos de Inormacin de 2ichero
"-mbolos de Ganipulacin de Gacros' "-mbolo [at"tr [In"tr ["i5e"tr ["ub"tr
escripcin e&uel&e la concatenacin de dos cadenas e&uel&e la posicin inicial de una cadena dentro de otra e&uel&e la lon#itud de una cadena e&uel&e una subcadena dentro de otra 4abla 013% 3 "-mbolos de Ganipulacin de Gacros
1.5. )roramas e>ecutables sobre ,SF7OS
2i#. 0130 3 Estructura en Gemoria de los pro#ramas >G 9parte de los icheros batch, slo son los archi&os .>G / .E=E, llamados as- porque esta es su etensin. *a dierencia bsica entre los dos es que los .>G son una ima#en eacta del pro#rama car#ado en memoria mientras que los E=E, su estructura inal en memoria se la da el >", / que los >G no pueden superar los @8J de tamaCo, mientras que los E=E no tienen esta restriccin. *os pro#ramas >G son ms rpidamente car#ados en memoria porque no necesitan que el >" les de su estructura / son ms pequeCos, pero esto es inapreciable en los ordenadores actuales. *os icheros >G son una reliquia del pasado, cuando la memoria era escasa / los pro#ramas no pasaban de los @8 Jb / se han ido manteniendo por compatibilidadB si bien, para crear pro#ramas residentes en memoria son mu/ adecuados / su modelo de memoria es parecido al lat de SindoSs.
2i#. 0130F 3 Estructura en Gemoria de los Pro#ramas E=E En los @8 Jb que pueden tener los pro#ramas >G como mimo, se han de incluir el cdi#o de pro#rama, los datos / el stacK. Esto tiene como consecuencia que los re#istros de se#mento durante el inicio del pro#rama / durante la e!ecucin del mismo apunten al inicio del sem#neto de memoria de @8J que el >" ha reser&ado antes de car#ar el pro#rama. En los pro#ramas E=E, el cdi#o, datos / stacK se #uardan en se#mentos dierentes que pueden estar repartidos en dierentes se#mentos dependiendo de su tamaCo. Independientemente de si se e!ecuta un pro#rama >G o E=E, el >" crea antes de la e!ecucin del pro#rama una estructura de datos en la memoria, con el nombre de P"P (Pro#ram "e#ment Prei), que se compone de +$@ b/tes. "e antepone inmediatamente al pro#rama en la memoria, como muestran las 2i#. 0130 / 2i#. 0130F'
1.5.1. "l )S) ;ealmente es una reliquia del >", mantenido por compatibilidad. ontiene numerosos datos que el >" necesita para la #estin de un pro#rama NbinO, aunque para un pro#ramador, la ma/or-a de esta inormacin, carece de interés, aunque s- ha/ al#o de mucha utilidad con la que podremos #estionar los parmetros de entrada en la l-nea de comandos. Veamos esquemticamente la estructura del P"P' ireccin ontenido 00h301h *lamada de la interrupcin +0h ireccin inal de la memoria ocupada por el pro#rama. Por e!emplo 90000 se pone como 0+h30%h 0090h 08h ;eser&ado 0$h30Ah 29;39** a la interrupcin +1h 09h30h ireccin de terminacin (direccin del se#mento para I:4 ++h) 0Eh311h ireccin de salida de trlMDreaK (direccin de se#mento para I:4 +%h) 1+h31$h ireccin de salida de error cr-tico (direccin de se#mento para I:4 +8h) 1@h31h "e#mento del P"P del proceso padre 1F3+Dh 4abla de mane!adores de archi&o por omisin +h3+h ireccin de se#mento de las &ariables de entorno +Eh3%1h ;eser&ado %+h3%%h *on#itud de la tabla de mane!adores de archi&o %8h3%h 9puntador le!ano a la tabla de mane!adores %Fh382h ;eser&ado $0h3$1h *lama a la uncin >" (I:4 +1h / ;E42)
$+h3$Dh $h3@Dh @h32h F0h F1h322h
;eser&ado 2D ]1 2D ]+ :úmero de caracteres en la l-nea de comandos *-nea de comandos 4abla 013%F 3 Esquema del P"P
El contenido
•
•
•
•
En la direccin de 00h se encuentra un comando de len#ua!e mquina que llama a una uncin del >" para terminar el pro#rama. Vuel&e a liberar la memoria del pro#rama / transiere el control mediante la e!ecucin del pro#rama al procesador de comandos o al pro#rama que ha iniciado la e!ecucin del pro#rama a terminar. 9ntes se necesitaba este comando al inal de un pro#rama >G o E=E para terminar su e!ecucin, pero actualmente se utili5a la uncin 8h de la interrupcin +1h del >". En la direccin 0+h se encuentra un Sord que marca la direccin inal de la memoria ;9G reser&ada para el pro#rama. "i un pro#rama necesita ms memoria ;9G adicional, puede determinar con la a/uda de este &alor, si aún queda espacio entre su inal / el in de la memoria ;9G reser&ada. "i este es el caso, puede utili5ar esta memoria para sus propios ines, de lo contrario ha de pedir memoria ;9G mediante una uncin >". En +h tenemos el se#mento donde se encuentran las &ariables de entorno, tales como >G"PE, P94H, P;>GP4, etc. *a direccin F0h re#istra en un b/te el número de caracteres que introdu!imos en la l-nea de comandos ecepto el carcter 1% de retorno de carro, con lo que se deduce que slo pueden ser entre 0 / +$$ caracteres. *a direccin F1h reco#e todos los caracteres que se indicaron después del nombre del archi&o durante la llamada desde la l-nea de comandos.
*a direccin del P"P en los pro#ramas >G &iene determinada por la de cualquier re#istro de se#mento ("7"7E"7"") nada ms comen5ar la e!ecucin del mismo. "in embar#o, en los pro#ramas de tipo E=E slo &iene determinada por " / E". En cualquir caso, eiste una uncin del >" para obtener la direccin del P"P, cu/o uso recomienda el abricante del sistema en aras de una ma/or compatibilidad con uturas &ersiones del sistema operati&o. *a uncin es la @+h / est disponible a partir del >" %.0.
1.5.2. )roramas CO, uando se crea un pro#rama >G, ha/ que de!arle un hueco al inicio de 100h para que quepa aqu- el P"P, por esto se utili5a la orden >;L 100h, inmediatamente después es necesario encontrar una sentencia e!ecutable, aunque sea una de salto al inicio del pro#rama, para que éste pueda actuar, por eso solemos poner un GP Inicio, por e!emplo.
omo /a hemos dicho, un pro#rama >G puede tener una lon#itud mima de @8 Jb (@$.$%@ b/tes), de los que se ha de descontar la lon#itud del P"P (+$@ b/tes) / al menos 1 Sord (+ b/tes) para la pila, aunque es recomendable un m-nimo de +$@ b/tes. 9unque la lon#itud de un pro#rama >G nunca puede pasar los @8 Jb, el >" siempre reser&a la memoria ;9G completa para ellos, con lo que no se podr-a llamar a otro pro#rama con G la memoria que no necesita, con a/uda de una uncin del >", para su utili5acin. uando se pasa el control a un pro#rama >G, todos los re#istros de se#mento apuntan al principio del se#mento >G en la memoria, con ello, el inicio del pro#rama >G se encuentra en la direccin de oset 100h. El puntero de stacK, "P contiene el &alor 222Eh, / se encuentra al inal del se#mento >G de @8 Jb / &a creciendo G se puede terminar con un ;E4 (" coloc un cero antes de iniciar el pro#rama >G, por tanto saltamos a la direccin de memoria "'0000B pero aqu- se encuentra el inicio del P"P donde est la interrrupcin +0h, que termina la e!ecucin de un pro#rama. "in embar#o, lo ms recomendable es terminar mediante la uncin 8h de la interrupcin +1h, mediante la cul podemos pasar adems un mensa!e a su in&ocador en el re#istro 9*, estableciendo el &alor 0 como terminacin de pro#rama normal. 1.5.2.1. Creación de un prorama CO, en ensamblador
a hemos dicho que un pro#rama >G se #uarda en disco como una ima#en directa del cdi#o mquina / adems, el >" no lo car#a en ;9G en una direccin i!a, sino en una di&isible por 1@, con lo que los se#mentos del pro#rama son desconocidos hasta la propia e!ecucin del pro#rama. ebido a todo ello este tipo de pro#ramas no puede tener direcciones de se#mento epl-citas, es decir, comandos 29;. "lo se permiten los comandos :E9;, que slo contienen una direccin de oset, no de se#mento. e esta orma, estos comandos siempre se reieren al se#mento actual en el re#istro ", ", E" o "", / no a una direccin de se#mento determinada. Esto implica que no estn permitidos los saltos le!anos ni las llamdas le!anas, as- como instrucciones *" o *E". "i se usa al#o de esto, se podr compilar, pero no se podr pasar a archi&o >G. "in embar#o no est prohibido car#ar &alores de se#mentos constantes, como por e!emplo, la direccin de se#mento de la ;9G de &-deo en un re#istro de se#mento. 4ambién sabemos que el >" asi#na toda la memoria a cualquier pro#rama que car#a en ;9G, lo cul pro&oca problemas a un 4"; (<4erminate but "ta/ ;esident<), pro#rama que permanece e!ecutndose mientras se puede car#ar otro en ;9G, pues el >" supone que no ha/ ms espacio para car#ar un pro#rama estando /a uno e!ecutndose. El mismo problema tenemos cuando pretendemos e!ecutar un pro#rama desde otro. Esto se puede solucionar de dos ormas' •
•
Podemos liberar la memoria ms all del se#mento >G de @8J. > bien liberamos la memoria completa que el pro#rama no necesita, donde también se inclu/e la memoria no necesitada dentro del se#mento >G, obteniendo as- ms espacio para otros pro#ramas, pero con el incon&eniente de que la pila queda uera del espacio de memoria prote#ido para el pro#rama, pues el >" lo coloca al inal del se#mento de @8J del >G. Pero entonces la pila se ha de despla5ar antes de liberar la memoria al inal de la memoria reser&adaB siendo preciso asi#narle un tamaCo determinado, en la ma/or-a de los casos basta con +$@ o $1+ b/tes.
9tacaremos este asunto en su momento. Veremos ahora cmo se puede crear un archi&o de tipo >G usando la sintais del G9"G, :9"G / 29"G' 9rchi&o >G usando sintais G9"G Eisten &arios tipos de estructura de archi&o >G, &eamos una' 29"G di#o NbinO
•
G9"G di#o NbinO
:9"G ;esultado en pantalla di#o NbinO "ource 0130+ 3 Esqom?1.asm
Gersión ,S,
En las primeras l-neas ponemos un comentario eplicando li#eramente de qué trata el pro#rama, quién es su autor / cul es su actual &ersin. >bsér&ese que los comentarios en ensamblador comien5an con un punto / coma. En la l-nea A deinimos un se#mento de cdi#o que llamaremos ". En la l-nea +1 con la instruccin ", en este caso inali5acin del pro#rama, limpie5a de memoria / re#reso al >" / en 9* seCalamos con qué tipo de error ha inali5ado el pro#rama, siendo un cero por deecto que indica sin nin#ún error. En la l-nea ++ tenemos la instruccin ".
En estas dos l-neas tenemos la interrupcin que de&uel&e la e!ecucin al >". *a interrupcin +1h del >" tiene muchas unciones, la que aqu- utili5amos la indicamos en el re#istro 9H, es la número 8h, que de&uel&e la e!ecucin al >". El &alor que se mete en 9* es opcional / sir&e para indicar si el pro#rama ha tenido al#una maluncin o no, el &alor cero indica que todo ha ido bien. En la l-nea +8 indicamos el in del se#mento codi#o con G. 9hora &amos a compilarlo. Para ello abrimos una &entana del emulador del G"3>", a no ser que /a traba!es directamente desde el G"3>" puro / duro. En el primer caso est en E`odi#os`ap01<. na buena idea ser-a indicarle al s-mbolo del sistema que se abra siempre en nuestro directorio. Para ello sitúate con el cursor del ratn donde /a te he dicho que est / pulsa el botn derecho, se te abrir una &entana, donde puedes ele#ir sus propiedades en la parte inerior.
2i#. 0130A 3 ;uta de 9cceso al "-mbolo del "istema En la pestaCa de acceso directo en
2i#. 01310 3 Propiedades del "-mbolo del "istema e esta orma, cada &e5 que abras el s-mbolo del sistema se abrir en tu carpeta. 9 parte de esto, es necesario que ten#as en el P94H la ruta de los compiladores / enla5adores que &as a utili5ar. Vamos a compilar el pro#rama con G9"G' > A; %EC1.#% M,;N
ml es el nombre del compilador de Gicrosot de la &ersin @.1%, que adems se encar#a de llamar al linKador. G, pero WcuidadoX, tiene que ir en ma/úsculas. bien, si tienes el ensamblador de Dorland 4urbo 9ssembler, lo puedes compilar as-' >t#% %EC1 M,;N >tinV t %EC1 M,;N
on tasm se ensambla a un archi&o ob!eto. 4linK es el linKador de Dorland / G. 9hora /a puedes e!ecutar el pro#rama
>%EC1 M,;N
Vers que no produce nin#ún resultado porque el pro#rama no hace nada sal&o salir al >". Pero nos sir&e para saber que lo hemos hecho todo bien, pues el compilador no ha dado nin#ún mensa!e de error. Esta es la pantalla de lo que me sale a m-'
2i#. 01311 3 E!emplo de compilacin con G* / EsqomG1.asm •
Gersión (S,
En la l-nea 1 tenemos or# 100h , que ser-a equi&alente a resb 100h , que /a sabemos que de!a espacio para el P"P. na dierencia importante con la sintais de Gicrosot es que :9"G no permite
El resto es bien conocido. Para ensamblar dicho cdi#o hacemos' >n#%$ -/bin %EC,1.#% - %EC,1. •
Gersión S,
on use1@ le decimos al compilador que #enere cdi#o de 1@ bits.
or# 100h reser&a espacio para el P"P. :o necesita nin#ún tipo de etiqueta, a continuacin &a el cdi#o. Para ensamblar dicho cdi#o usaremos uno de estos dos métodos, el ms sencillo es el primero' ompilarlo directamente desde el editor que trae el paquete 29"G.
>/#% %EC'1.#% %EC'1.
En el si#uiente cap-tulo haremos el amoso
2i#. 0131+ 3 E"Z>GG1.>G en headecimal El primer bloque de números es la direccin en memoria / el se#undo es el cdi#o de intrucciones de len#ua!e mquina en headecimal de nuestro pro#rama. Gientras que el de la derecha es éste traducido a cdi#o 9"II. Es di-cil, no obstante entender el sentido de estas instrucciones. na orma ms sencilla de entenderlo es utili5ando la utilidad EDL que &iene en todas las &ersiones de G"3>" / TindoSs. *an5amos una &entana del <"-mbolo del sistema< como /a sabemos / ponemos lo si#uiente' C?P;r#b#@PAPCdi%PC#01>deb& !LC1.C -& 0D85?0100 B00 Y 0102 0D85?0102 B8004C AJ4C00 0D85?0105 CD21 ,; 21 0D85?0107 7365 Y,B 016 0D85?0109 61 DB 61 0D85?010A 206361 A,D MB+D+61NA 0D85?010D 6D DB 6D 0D85?010 62 DB 62 0D85?010' 69 DB 69 0D85?0110 61 DB 61 0D85?0111 7220 YB 0133 0D85?0113 61 DB 61 0D85?0114 6C DB 6C 0D85?0115 206469 A,D M!+69NA 0D85?0118 7265 YB 017' 0D85?011A 63 DB 63 0D85?011B 746' YZ 018C 0D85?011D 7269 YB 0188 0D85?011' 6' DB 6' -E C?P;r#b#@PAPCdi%PC#01>
"e puede obser&ar en el bloque headecimal del cdi#o desensamblado cmo coincide con lo que nos indicaba el editor headecimal.
*a utilidad EDL &iene eplicada en el apéndice . Podemos decir que el comando GG1.>G. e todas estas l-neas las que nos interesan son las tres primeras, las si#uientes son desensamblado de las si#uientes posiciones de memoria al pro#rama. Podemos obser&ar que el desensamblado ha sido ecelente. El cdi#o mquina en headecimal ED00 equi&ale a GP 010+, que si#niica saltar a la posicin de memoria 010+, que es la l-nea si#uiente. DF008 equi&ale a G>V 9=, 800 / +1 a I:4 +1. 9qu- est todo nuestro pro#rama. *o único que hace es de&ol&er la e!ecucin al sistema operati&o. Vamos a dar a continuacin los otros dos esqueletos posibles para construir un archi&o >G con G9"G' EsqmG1b di#o NbinO
•
EsqomG+ di#o NbinO
EsqomG% ;esultado en pantalla di#o NbinO "ource 0130% 3 EsqmG??.asm
"sHCm,1b.asm
a hemos dicho que los archi&os >G no usan dierentes se#mentos puesto que todo est dentro del mismo / que tampoco se deine una pila puesto que es el propio >" el que se encar#a de deinirsela al inal del pro#rama. "in embar#o &emos en esta estructura que se deinen dierentes se#mentos / adems una pila. Pero todo esto es &irtual porque al inal todo ello se en#loba dentro del mismo se#mento llamado #rupo mediante la directi&a de la l-nea 8' r& r& di d#t% i#
*e indicamos al ensamblador que a#rupe todos estos se#mentos en uno solo' #rupo. lue#o, en la si#uiente l-nea le decimos que asuma que todos los re#istros de se#mento apunten a nuestro se#mento #rupo. 4ambién &emos como dierencia que el t-tulo del pro#rama lo especiicamos con la etiqueta <4I4*E<, esto es eactamente i#ual a utili5ar punto / coma, pero es ms &istoso / le#ible. •
"sHCom,2.asm
Esta estructura es seme!ante a la primera pero con unas directi&as simpliicadas llamadas
el ms pequeCo
de todos, apropiado para archi&os >G. .code indica que aqu-
empie5a el se#mento de cdi#o / termina donde empie5a el si#uiente.
.S9&9<) es una directi&a
que sir&e para iniciali5ar los se#mentos.
."69 es equi&alente a hacer un mo& a, 800hB int +1h.
El resto de las sentencias /a las hemos estudiado. Estas estructuras no son r-#idas, se pueden usar una me5cla de ellas. Por e!emplo'
•
"sHCom,3.asm
Podemos &er la me5cla de sintais clsica con simpliicada.
1.5.3. )roramas "6" *os pro#ramas E=E, al i#ual que los >G no se car#an en una direccin de memoria i!a, sino en al#una di&isible por 1@ /, al contrario que los >G, no tienen la limitacin de @8 Jb para el cdi#o / poseen se#mentos separados para cdi#o, datos / pila que se pueden alinear en orden cualquiera. ado que los archi&os E=E pueden contener &arios se#mentos, el empleo de instrucciones 29; es ine&itable si se quiere llamar a un subpro#rama en el se#mento de cdi#o = desde el se#mento de cdi#o . Esto nos crea un problema puesto que a parte de la direccin del subpro#rama también necesita la direccin de se#mento (esto no es sencillo puesto que no se puede pre&er esta direccin de se#mento durante el desarrollo del pro#rama / en cada e!ecucin del pro#rama resulta dierente). En los pro#ramas E=E este problema se resuel&e de la si#uiente manera' el linKador coloca al inicio de cada archi&o E=E una estructura de datos que contiene las direcciones de todas las reerencias de se#mento, es decir, la direccin de todos aquellos comandos 29;, en los que se hace reerencia a la direccin de se#mento de uno de los dierentes se#mentos de cdi#o a datos. El cdi#o mquina de un "9*4> *E9:> se compone de cinco b/tes' •
El primero contiene el cdi#o del comando.
•
*a si#uiente palabra (dos b/tes) la direccin de se#mento.
•
*a si#uiente palabra (dos b/tes) la direccin de se#mento a la que ha de saltarse.
:o se indica la direccin del cdi#o de nuestro comando, sino la direccin del se#mento si#uiente. E&identemente esto no se hace en un archi&o >G puesto que como todo est dentro de un ran#o de @8J (el mismo se#mento), no es necesario. Veamos la estructura de una cabecera de un archi&o E=E' ireccin ontenido esi#nacin de un pro#rama E=E consistente en las letras 9"II " de Gicrosot. 0+h30%h ;esto de la di&isin de la lon#itud del archi&o por $1+ 08h30$h ociente de la di&isin de la lon#itud del archi&o por $1+ 0@h30h :úmero de direcciones de se#mento a adaptar 0Fh30Ah 4amaCo de la cabecera en prraos 09h30Dh :úmero m-nimo de prraos necesitados adicionalmente 0h30h :úmero mimo de prraos necesitados adicionalmente 0Eh302h espla5amiento en prraos del se#mento de pila dentro del mdulo car#ado. 10h311h ontenido del re#istro "P durante el inicio del pro#rama. 1+h31%h "uma de control de la cabecera del archi&o E=E 18h31$h ontenido del re#istro IP durante el inicio del pro#rama 1@h31h Inicio del se#mento de cdi#o en el archi&o E=E
4ipo 1 Tord 1 Tord 1 Tord 1 Tord 1 Tord 1 Tord 1 Tord 1 Tord 1 Tord 1 Tord 1 Tord 1 Tord
1Fh31Ah 19h31Dh 1h3 M?? M??
ireccin de la ;elocation34able en el archi&o E=E :úmero de o&erla/ Gemoria de buer irecciones de las direcciones de se#mento a adaptar "e#mentos de cdi#o de pro#rama, datos / pila 4abla 013%A 3 Estructura de la abecera de un 9rchi&o E=E
1 Tord 1 Tord Variable Variable Variable
En un archi&o E=E, el P"P se coloca al inicio, al i#ual que en un >G, / los re#istros de se#mento " / E" apuntan al inicio de éste. *a direccin de la pila / el contenido del puntero de la pila se #uardan en la cabecera del archi&o E=E. *a uncin E=E que car#a los pro#ramas en memoria intenta reser&ar el número mimo de prraos. "i esto no es posible, se conorma con el resto de la memoria, que en nin#ún caso puede ser inerior al número m-nimo de prraos necesitados adicionalmente, que &iene en la estructura de cabecera del archi&o E=E. Por tanto, si queremos e!ecutar otro pro#rama, tenemos el mismo problema que con los archi&os >G, debiendo liberar la memoria reser&ada adicionalmente. Gs adelante ser cuando &eamos cmo se hace esto. Veremos ahora cmo se puede crear un archi&o de tipo E=E con G9"G, :9"G / 29"G. EsqEeG1 di#o NbinO
•
EsqEeG+ di#o NbinO
EsqEeG% EsqEe:1 EsqEe21 di#o di#o di#o NbinO NbinO NbinO "ource 01308 3 EsqEe??.asm
;esultado en pantalla
"sH"$e,1.asm
En las primeras l-neas tenemos una eplicacin somera de lo que trata el pro#rama, del autor / de la &ersin. En la l-nea A deinimos el se#mento de pila. Es necesario poner QstacKQ para compilarlo con el 49"G. einimos una pila de %0h palabras de lon#itud. Esto se hace con la instruccin ". 4anto después como antes de este procedimiento podemos deinir otros procedimientos / macros. En las l-neas +A / %0 terminamos con el se#mento de cdi#o / con el pro#rama, respecti&amente. Para compilar este archi&o utili5ando G9"G'
> %Ee1.#%
Para compilarlo utili5ando 49"G' > t#% %Ee1 > tinV %Ee1 •
"sH"$e,2.asm
Es la &ersin con directi&as de se#mento •
"sH"$e,3.asm
Ge5clamos directi&as de se#mento con clsicas. En esta ocasin hemos utili5ado la directi&a <omment< para comentar &arias l-neas de cdi#o. *a sintais es omment / un carcter 9"II tras un espacio en blanco, es con&eniente que este carcter sea lo ms raro posible para que las l-neas que queramos comentar no lo inclu/an. *as l-neas comentadas terminan donde &uel&e a aparecer este carcterB es un buen hbito de pro#ramacin poner Endomment antes de él porque es ms &isible e indica mu/ claramente cul es el cometido del se#undo carcter, si bien en s- mismo no produce nin#ún eecto / adems est comentado también. *o dems est suicientemente claro. •
"sH"$e(1.asm
*a única dierencia eistente aqu- con los otros esqueletos &istos es que se indica dnde empie5an los se#mentos pero no donde terminan, pues esto ocurre donde empie5a el si#uiente se#mento. En la l-nea 11 tenemos resb +$@ que equi&ale al cdi#o G9"G n#%$ -/b@ %Ee,1.#% >#inV -J %Ee,1.b@
9linK es un linKador #ratuito / necesitamos que esté también dentro del P94H. •
"sH"$e1.asm
Empe5amos con 2>;G94 G, que indica al compilador que &a a #enerar un .E=E. Para ensamblar dicho cdi#o usaremos uno de estos dos métodos, el ms sencillo es el primero' ompilarlo directamente desde el editor que trae el paquete 29"G.
>/#% %Ee'1.#% %Ee'1.ee
Vamos a des#ranar la estructura de uno de estos esqueletos E=E, para lo cul &amos a utili5ar el compilador :9"G, por e!emplo, / cambiaremos li#eramente nuestra deinicin de la pila, para que lue#o podamos &er ms claramente dnde est situada. Para ello hemos creado el archi&o E!Pila:1.ee. *o compilamos como /a sabemos hacer / &emos la estructura headecimal del ichero NbinO resultante.
2i#. 01318 3 Visuali5acin de la Pila de un ichero E=E en memoria >bser&amos que los primeros b/tes del archi&o son <8d< / <$a< headecimales, que se corresponden con las letras G, con lo que tenemos identiicado el archi&o como tipo E=E. En el tercer b/te tenemos A1h headecimal 7 18$ b/tes de la lon#itud del pro#rama EsqE:1b.ee, pues se#ún hemos dicho' 145 = 0*512 + 145
4ambién podemos &er claramente las etiquetas con las que deinimos la pila / que ahora nos muestran ésta mu/ &isualmente. Veamos cmo queda en modo de e!ecucin con la herramienta debu#' C?P;r#b#@PAPCdi%PC#01>deb& @i#,1.ee -d 100 0D18?0100 3C 2D 20 41 71 75 69 20-65 6D 70 69 65 0D18?0110 6C 61 20 70 69 6C 61 20-79 20 20 61 71 0D18?0120 74 65 72 6D 69 6 61 20-00 00 00 00 00 0D18?0130 B8 28 0D 8 D0 BC 2A 00-B8 28 0D 8 D8 0D18?0140 21 C4 12 '3 A4 1' 03 2-5' 5 5A 59 5B 0D18?0150 12 2 8 16 40 05 8B 0-A1 04 15 C3 59 0D18?0160 14 8B D1 C1 1 04 C1 A-0C 8 61 1' 73 0D18?0170 14 C1 9 04 8A C2 C0 0-04 0A 8 C1 A -E
7A 75 00 B4 89 8B 20 04
61 69 00 4C 26 0 A3 74
20 20 00 CD C2 D4 03
[- AE&i eie# # i# #E&i terin# ........ .(....*..(..... Q.......\]ZHM.^. ....X.......H... ..........#.% .. ..............t.
Vamos a utili5ar aqu- el editor headecimal #ratu-to
2i#. 0131$ 3 abecera de 9rchi&o E=E omo &emos en el recuadro de ondo a5ul, tras pulsar la tecla <2@<, nos da inormacin de todo el contenido de la cabecera del pro#rama E=E. Vamos a &er la estructura del P"P que le ha correspondido a este pro#rama. Para ello utili5amos la utilidad odeVieS de microsot' >v @i#,1.ee
2i#. 0131@ 3 P"P de un archi&o E=E *os primeros 100h b/tes son los correspondientes al P"P. Estamos en el se#mento 0D99h, que corresponde con el &alor del re#istro E" / ", que /a hemos dicho que contienen al inicio de un pro#rama E=E la direccin de su P"P.
En <;un3^ "et ;untime 9r#uments...< del odeVieS podemos establecer cul &a a ser el a#umento de l-nea de comandos para nuestro pro#rama, /o he ele#ido ". En el b/te F0h nos indica el número de b/tes que hemos in#resado por l-nea de comandos sin contar el retorno de carro' <0<, es decir, 1+ en decimal.
1.!. 7i=erencias entre las sinta$is 1.!.1. 7i=erencias entre (S, y ,S, Veamos al#unas dierencias' •
•
•
•
•
•
•
•
• • •
:9"G es sensible a las letras en ma/úsculas / minúsculas, mientras que G9"G slo lo es usando la opcin Yp. Esto quiere decir que las &ariables miVar / GiV9; no son la misma en :9"G, pero s- en G9"G sin la opcin correspondiente. "eccin sin iniciali5ar. :asm permite #enerar una seccin de &ariables sin iniciali5ar con la etiqueta .bss, eso si#niica que reser&a ese espacio de memoria, pero no lo ocupa, con lo que el NbinO resultante es de tamaCo inerior. *as &ariables sin iniciali5ar en G9"G s- ocupan espacio. Gientras G9"G usa
eE& 1 d$ 2
• •
v # &n v # d%
• •
•
•
• •
•
v # ''!; d% A! AJ Md%N
: : : :
AJ AJ AJ AJ
= = = =
1 t#nt en ,A! en A! 2 en A! # direin de # v#ri#be Od%O en ,A! # direin de # v#ri#be Od%O % #ditid en
: AJ = 2 t#nt en ,A! en A!
En consecuencia, la uncin >22"E4 no eiste en :9"G, slo en G9"G, de&uel&e la posicin de memoria de una etiqueta. Es decir, si
: AJ = # direin de # v#ri#be Od%O en ,A! : AJ = # direin de # v#ri#be Od%O en A!
El parmetro P4; slo eiste en G9"G, por e!emplo, las si#uientes sentencias son equi&alentes en G9"G / :9"G'
•
d%
•
*os se#mentos de memoria deben estar dentro del corchete, por e!emplo'
• •
• •
•
d$ 2 AJ WD ; Md%N AJ WD Md%N
AJ !?MBJN AJ M!?BJN
: AJ = 2 en A! : AJ = 2 en ,A!
: Crret en A! : Crret en ,A!
:asm tiene su propio len#ua!e de macros
1.!.1. 7i=erencias entre (S, y S, Estos dos compiladores son, bsicamente, mu/ parecidos, por lo que la ma/or-a de las dierencias entre :9"G / G9"G también aplican a 29"G. Veamos al#unas dierencias entre 29"G / :9"G •
•
•
•
•
:asm reser&a espacio con la directi&a ;E"D, 2asm lo hace con ;D o también con ?, por e!emplo' #r1 #r2
DB R B 1
En el coprocesador matemtico, :9"G deine el primer re#istro con "40, mientras que 29"G lo hace con "4 2asm no deine espacios especiales con etiquetas como <.bss<. En el caso de &ariables sin iniciali5ar lo hace como /a hemos indicado anteriormente. 2asm tiene su propio len#ua!e de macros