Assembler

Páginas: 226 (56461 palabras) Publicado: 5 de julio de 2011
Curso de Assembler
By: Gerardo Richarte
[pic]
Hola Gente!

Por fin me mande a escribir algo sobre esto, quiero agradecerles especialmente a
|Ariel Nardelli |Federico Joselevich |
|Mauricio Taslik |Diego Paz|
|Gastón Sanchez |Nicolai Kuzminski |
|Eduardo Arias |Fernando Bardelli |
|Luis Mamud |Juan Esteva |
|PabloRotzyld |Fabián Benavidez |

Por haberse prendido de entrada en esta idea, y por haber hecho sugerencias, y por haberme hecho decidirme. !!!

Bueno, Mmmm...

Vamos a empezar por algo que quizás muchos ya sepan, pero como es indispensable, igual se lo tengo que contar:

La Memoria de Las PC:

Comoya sabrán, de haber escuchado por ahí, hay varios tipos de memoria, la Memoria Base, la Memoria Expandida (EMS), Memoria Extendida (XMS), Upper Memory Blocks (UMB), High Memory Area (HMA) y un montón mas de referencias a distintos tipos de memoria, lo que les voy a contar es que dirección de memoria le corresponde a un Byte dentro del primer MegaByte, es decir, dentro de la memoria base (0-640K) yen la zona donde están las plaquetas de expansión, Monitor, BIOS ROM, área de la controladora de Disco, etc...

Tratemos de acostumbrarnos a ver los números en Hexadecimal (base 16). Los dígitos que pueden formar un numero en esta base, son: 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, A, B, C, D, E y F, tomando valores en ese mismo orden, el 0 vale 0 y la F vale 15. De esta forma un numero, por ejemplo 0FA3h(la 'h' final indica que esta en 'Hexa'), expresado en decimal valdría (3)+(Ah*16)+(Fh*16*16)+(0*16*16*16), o lo que es lo mismo 3+160+3840+0=4003, pongámonos de acuerdo que cuando un número lo escribimos en Haxa le ponemos la 'h' al final, y si comienza con una letra, le agregamos un '0' adelante para no confundirnos con un nombre de variable. Esto fue una breve pero necesaria introducción alsistema Hexadecimal de numeración.

Ahora si, veamos como se direcciona la memoria de una PC.

Tengamos en cuenta que si queremos direccionar 1 Mb nos hacen falta 5 dígitos hexadecimales, es decir, poder escribir, de alguna forma 0FFFFFh o 100000h-1 que es 1*16^5=1 Mb (1 que se resta, corresponde al byte #0). Como los 80x86 tienen registros de 16 bits (8 bits = 1 Byte, 16 bits=1 Word) o 4dígitos hexa, solo podríamos llegar a direccionar 0FFFFh bytes, lo que significan 64 Kb solamente (de aquí la limitación de los .COMs). Lo que se hace es utilizar dos registros a la vez para apuntar a un solo byte, lo que nos amplia el campo a poder diferenciar 0FFFFh:0FFFFh bytes o 1 Mg de Mb muchísimo! Entonces, ¿Que pasa que no se puede tener tanta memoria sin hacer cosas extrañas? Claro, lo que pasaes que para direccionar se usan dos registros, pero no ubicados uno al lado del otro, sino desplazados un dígito. ¿Que? Si, ya se que esta confuso, ahora te cuento:

En un Registro, digamos que se llama DS, esta 0040h, y en otro, digamos BS, hay 006Ch. La dirección a la que apunta DS:BS (así se escribe) es 0040:006C, pero esta dirección, en números de 5 cifras se escribe 0046C, la conversión essimplísima, lo que hay que hacer es sumar los registros de la siguiente forma:

BS ->    006C
DS ->  + 0040
---------------
DS:BS -> 0046Ch

De esta suma, uno se puede dar cuenta que para referirse a una misma posición de memoria puede haber muchas formas distintas.

Por ejemplo, para referirse a 0046C, se puede hacer:

 000C      046C
+0046     +0000
------- --------
0046C =...
Leer documento completo

Regístrate para leer el documento completo.

Estos documentos también te pueden resultar útiles

  • Assembler
  • Assembler
  • assembler
  • Pwm Assembler
  • Intrupciones Assembler
  • Calculadora Assembler
  • Leds
  • Sumatoria Assembler

Conviértase en miembro formal de Buenas Tareas

INSCRÍBETE - ES GRATIS