Todo lo que nunca quisiste saber sobre los ordenadores (III)

Todo lo que nunca quisiste saber sobre los ordenadores (III)

(Lo sé… NO queréis que os lo explique con pizzas aceituneras… 🙂 ).

INT 10h

(En la barra “Buscar/Find…” del navegador metí la palabra MEMORY y salieron estos seis resultados, int 10h puede llamar muchas otras
instrucciones).

Int 10/AH=12h/BL=85h – Cirrus Logic BIOS – GET INSTALLED MEMORY

En hexadecimal, la “palabra” está compuesta por 16 bits, agrupados en dos bytes, cada uno de ellos dividido en dos nibbles son cuatro
bits (medio byte).

Cada byte de registro representa un caráter alfanumérico {0,1,2,3,4,5,6,7,8,9,A,B,C,D,E,F}.
Es decir media “Word” es un byte que codifica uno de esos 16 caracteres.

Salvo Endianness (sentido en que se leen los datos, unordered, right to left, left to right) diferente…

Cada parte de los registros AX, BX, CX, DX, BP, CS, IP, CE, se divide en HIGH order byte y LOW order byte.

(En realidad de la secuencia de ceros y unos que forman un byte, con cuatro (es decir un nibble [medio byte]) se pueden codificar 16 caracteres diferentes, lo que quiere decir que con un nibble es suficiente para codificar el alfabeto en hexadecimal.

Por lo tanto en la media palabra(de dieciseis bits [dos bytes] hay un nibble que va vacío).

Si la endiannes es de izquierda a derecha, 1000 son diezmil, si es de derecha a izquierda 1000 es uno.

(Dalvik, es un tipo de máquina virtual que se usa en Android, por ejemplo, Dalvik usa registros de palabra de 16 bits, que es la mitad de uno de 32 bits, que es el de windows 32. Dalvik emula un procesador con instrucciones de palabra más corta, y como es un “procesadoroide” le da la vuelta a la palabra (los 16 bits que contienen ceros o unos, y codifican en cuatro nibbles valores del 0, 0000, al F, 1111).

Normalmente el byte de mayor orden va a la izquierda, es decir, 1000 son diezmil.

[->>*** ¡Pero Dalvik le da la vuelta y por eso hay valor “auto” en el campo, o propiedad “endianess” ! ***<<-].

[res = InputBox(“Have you understood?”)
[res = Ucase.InputBox.Text(res)
[select case res

case “No”

case “Yes”
Understood = true

[End case

[LOOP ]

Int 10/AH=12h/BL=85h – Cirrus Logic BIOS – GET INSTALLED MEMORY

Es una IRQ con la que llamar a esas funciones en el hardware (firmware dependiente de cada computador), y esa en concreto tiene

Int 10/AH=12h/BL=85h <<- esa bifurcación:

AH está en “high ax” (eax, rax…), BL está en “low bx”, y en AL el valor constante contenido por firmware es un doce hexadecimal, 12h, que en decimal es (no es un número, es sólo una dirección desde donde ese valor arranca el fragmento de código (ensamblador)) almacenado en el “cajón” 1×16 + 2 = 18.

Aunque no sea una variable numérica (no se usa para hacer cálculos), y sólo sea el nombre de algo almacenado en “AL doce-hexadecimal”, sí que hay funciones (de cadena como srtcp, tolower, toupper, ucase, strcat…) que lo pueden pasar a número y “traducirlo” de una base a otra, así que si se espera encontrar un token en hexadecimal se puede encontrar un token decimal almacenado en el almacen de claves, que a primera vista no se reconoce.

Con BL ocurre igual, “low B” llama el fragmento contenido en 85h (133d en decimal).

Esas interrupciones en ensamblador, y la que he explicado antes, llaman esas rutinas y subrutinas de control de memoria de video (GPU, tarjeta gráfica).

Int 10/AX=4F05h – VESA SuperVGA BIOS – CPU VIDEO MEMORY CONTROL

Int 10/AX=5F02h – VIDEO – Realtek RTVGA – RETURN RTVGA ON-BOARD MEMORY SIZE

Int 10/AX=5F08h – Chips & Technologies ‘64300’ BIOS – SET LINEAR MEMORY START ADDRESS

Int 10/AX=5F10h – Chips & Technologies ‘64300’/’65530′ BIOS – GET LINEAR MEMORY INFO

Int 10/AX=6F07h – VIDEO – Video7 VGA,VEGA VGA – GET VIDEO MEMORY CONFIGURATION

CE es de Code Execution, y ahí está la dirección al código ejecutable que lo que hace es:

– GET INSTALLED MEMORY

obtener la memoria instalada.

– CPU VIDEO MEMORY CONTROL

Control de memoria de video de la CPU (el procesador).

– RETURN RTVGA ON-BOARD MEMORY SIZE

Retornar el tamaño de memoria del controlador VGA de la placa base.

– SET LINEAR MEMORY START ADDRESS

Establecer la dirección de partida de la memoria secuencial (la que recorre el cursor).

– GET LINEAR MEMORY INFO

Obtener información de la memoria secuencial.

– GET VIDEO MEMORY CONFIGURATION

Obtener la configuración de memoria de video.

(Y una pequeña mención a los viejos sistemas de 48K. 12+ 6×6 = 48, o mejor dicho, matriz 6×6, con cabeceras y columnas indicadas en seis
y seis, dicho de otra forma… un tablero de ajedrez de 36 casillas y seis letras de la ‘A’ a la ‘F’, y seis números de ‘1’ al ‘6’, para
decir “peón a D4” [¡Oh cielos me acabo de cargar dos filas horizontales y dos verticales!]).

Five_in_a_row

Five_in_a_row

Acerca de María Cristina Alonso Cuervo

I am a teacher of English who started to write this blog in May 2014. In the column on the right I included some useful links and widgets Italian is another section of my blog which I called 'Cornice Italiana'. There are various tags and categories you can pick from. I also paint, compose, and play music, I always liked science, nature, arts, language... and other subjects which you can come across while reading my posts. Best regards.
Esta entrada fue publicada en Computer Science, Español, Uncategorized y etiquetada , , , , , . Guarda el enlace permanente.