PDF de programación - Uso de los recursos de un equipo de computo mediante C++

Imágen de pdf Uso de los recursos de un equipo de computo mediante C++

Uso de los recursos de un equipo de computo mediante C++gráfica de visualizaciones

Actualizado el 22 de Julio del 2021 (Publicado el 5 de Marzo del 2019)
895 visualizaciones desde el 5 de Marzo del 2019
39,0 KB
7 paginas
Creado hace 20a (16/06/2003)
USO DE LOS RECURSOS DE UN EQUIPO DE CÓMPUTO

MEDIANTE C++



Bruno López Takeyas

Instituto Tecnológico de Nuevo Laredo

Reforma Sur 2007, C.P. 88250, Nuevo Laredo, Tamps. México

http://www.itnuevolaredo.edu.mx/takeyas
E-mail: [email protected]



Registros de propósito especial: Guardan el estado
de la CPU y el apuntador de instrucciones que indica
la siguiente instrucción que ejecutará la CPU.


Registros de Propósito



Resumen: En esta sección se examinarán
varias funciones especiales de Turbo C++ que
permiten que los programas accedan a los
recursos de
las
funciones BIOS o DOS.

la computadora mediante

Cada procesador, sistema operativo y
entorno tiene sus propios métodos de acceder a
los recursos del sistema. Para efectos didácticos
se asumirá el uso del sistema operativo PC-DOS
y la familia de procesadores 8086.



1. Registros de la CPU

La familia de procesadores 8086 tiene 14
registros en los que se pone la información para
procesar o el programa de control. Los registros
pueden ser de las categorías siguientes:

Registros de propósito general: Son de trabajo de
la CPU. En estos registros se colocan los valores
incluye operaciones
para su procesamiento que
aritméticas, comparaciones e
instrucciones de
bifurcación o saltos.

Registros de base de puntero e índice: Se usan
para
como
direccionamiento
relativo, apuntador de pila e
instrucciones para mover bloques.

Registros de segmento: Son usados para soportar
el esquema de memoria segmentada. El registro CS
guarda el segmento de código actual, el DS el
segmento actual de datos, el ES el segmento extra y
el SS el segmento de pila.



proporcionar

soporte

cosas

a



CH



DH



CL



DL



Ïndice fuente



Índice destino



CX


DX



SI

DI



SS



ES

General

AH



BH



AL



BL



Registros de puntero e

índice

Puntero de pila



Puntero base

Registros de segmento


AX


BX



SP


BP



CS



DS



Segmento de

código



Segmento de

datos

Registro de propòsito



especial



Registro de
indicadores

Segmento de pila



Segmento extra



IP



Puntero de
instrucciones



1

Fig. 1. Registros de la CPU



Fig. 2.- Tipo REGS incluido en el archivo de

encabezado DOS.H


Como se puede observar en la Fig. 2, REGS
es una unión de dos estructuras que contiene el
archivo de encabezado DOS.H. Usar la estructura
WORDREGS permite acceder a los registros de la
CPU como cantidades de 16 bits. El uso de
BYTEREGS da acceso a los registros de 8 bits.



4. Desapareciendo el cursor

Se puede desaparecer el cursor si se coloca
un 1 en el 5º bit del registro CH (Fig. 3). Para colocar
el 5º bit con el valor de 1, se coloca el número
hexadecimal 20 en el registro CH, lo cual equivale a
00100000 en binario, lo cual indica el valor que se
necesita.


CH=


7


6


5



3


2


1


0


4



2. Interrupciones



la

Una

interrupción es un

tipo especial de
instrucción que provoca la parada de la ejecución del
programa, guarda el estado actual del sistema en la
pila y salta a una rutina de manejo de la interrupción
que se determina por el número de la interrupción.
Después de que acabe la rutina, realiza una vuelta a
la
la
ejecución del programa anterior.

interrupción que provoca que se reanude

Hay dos tipos básicos de interrupciones: las
generales por hardware y
las provocadas por
software. La CPU permite a un programa ejecutar una
interrupción software por
INT. El
número que sigue a la instrucción determina el
número de la interrupción. Por ejemplo, INT 21h
provoca la interrupción 21h.

instrucción

Muchas de estas interrupciones son usadas
por el BIOS o el DOS como un medio de acceder a
diversas
funciones que son parte del sistema
operativo. Cada
interrupción se asocia a una
categoría de servicios a las que accede que son
determinados por el valor del registro AH. Si se
necesita
los
registros AL, BX, CX y DX.



información adicional se pasa en

3. Función int86()



La función int86() de Turbo C++ se usa para
ejecutar una interrupción de software. Se declara
como



int86(int intnum, union REGS *in, union REGS *out)



El número de la interrupción en esta función es
intnum, in es una unión que contiene los registros
que se usarán para pasar la información a los
manejadores de la interrupción y out es una unión
que guardará los valores devueltos por la interrupción
(si los hay).

struct WORDREGS {
unsigned int ax, bx, cx, dx, si, di, cflag, flags;
};

struct BYTEREGS {
unsigned char al, ah, bl, bh, cl, ch, dl, dh;
};

union REGS {
struct WORDREGS x;
struct BYTEREGS h;
};


2

Colocando un 1 a este bit, se desaparece el
cursor. Colocando un 0 aparece nuevamente

Fig. 3.- Bit del cursor



/*
Programa para desaparecer el cursor
usando la funcion int86()


Instructor: M.C. Bruno Lopez Takeyas
*/

#include <dos.h> // Encabezado con la
definicion de int86()
#include <conio.h>
#include <iostream.h>





// del cursor

// equivalente a

// los registros de la CPU



void main(void)
{
union REGS regs; // Declaracion de la
union regs de tipo REGS para el uso de


clrscr();

cout << "\n\rDesapareciendo el cursor
...";

regs.h.ch=0x20; // Inicializar el
registro CH con el valor 20(hexadecimal)

00100000; es decir colocar un 1 en el

// 5o. bit del registro
CH para desaparecer el cursor

regs.h.ah=1; // Servicio 1 de la INT
10h (video) que se refiere al tama¤o


int86(0x10,&regs,&regs); // Invoca la
INT 10h (video)

cout << "\n\n\n\n\r<<< Oprima
cualquier tecla para aparecer el cursor
>>>";
getch();
cout << "\n\n\n\n\n\rApareciendo el
cursor ...";

regs.h.ch=0; // Inicializar el
registro CH con el valor 0(hexadecimal)

00000000; es decir colocar un 0 en el

// 5o. bit del registro
CH para aparecer el cursor

regs.h.ah=1; // Servicio 1 de la INT
10h (video) que se refiere al tama¤o


int86(0x10,&regs,&regs); // Invoca la
INT 10h (video)

cout << "\n\n\n\n\r<<< Oprima
cualquier tecla para aparecer el cursor
>>>";
getch();

return;
}


// equivalente a

// del cursor



Fig. 4.- Desapareciendo el cursor usando la

función int86().



5. Aplicaciones usando el

mouse



Se pueden desarrollar aplicaciones en
las que se incluya el manejo mediante el uso
del mouse a través de la INT 33h con sus
servicios correspondientes. El programa de
la Fig. 5 muestra un ejemplo de la forma de
implementar el mouse.

/*
Programa para usar el mouse

Instructor: M.C. Bruno Lopez Takeyas
*/

#include <dos.h> // Encabezado con la
definicion de int86()
#include <conio.h>
#include <iostream.h>


void main(void)
{
union REGS regs; // Declaracion de la
union regs de tipo REGS para el uso de


clrscr();
gotoxy(1,24); cout << "Oprima
cualquier tecla para salir";

regs.h.al=0x1; // Inicializar el
registro AL con el valor 1(hexadecimal)

servicio 1 de la INT 33h (mouse)


mouse

int86(0x33,&regs,&regs); // Invoca la
INT 33h (mouse)

while(!kbhit()) // Ciclo mientras NO
se oprima cualquier tecla

// es decir, invoca el

// para habilitar el

// los registros de la CPU



3

oprimió el botón izquierdo o en BX=2 si se
oprimió el botón derecho.

En

la Fig. 5 se muestra un
encabezado (LIBMOUSE.h) que contiene las
declaraciones necesarias y la mayoría de los
servicios necesarios para utilizar el mouse
en un programa. Sólo basta incluirlo como
mediante la siguiente línea de código:

#include “LIBMOUSE.h”



Las

rutinas contenidas en este

encabezado s on:

void zMouseDetect(struct mdata *Mptr);
/* INICIALIZAR SI SE ENCUENTRA */
void zMouseInit(struct mdata *Mptr);
/* INICIALIZA EL DRIVER */
void zMouseShow(struct mdata *Mptr);
/* MUESTRA EL CURSOR */
void zMouseHide(struct mdata *Mptr);
/* ESCONDE EL CURSOR */
void zMousePos(struct mdata *Mptr);
/* COLOCA LAS COORDENADAS x,y */
void zMouseInfo(struct mdata *Mptr);
/* CHECA LA POSICION Y EL BOTON */
void zMouseHLimit(struct mdata *Mptr);
/* COLOCA EL RANGO HORIZONTAL */
void zMouseVLimit(struct mdata *Mptr);
/* COLOCA EL RANGO VERTICAL */



// para detectar el

// es decir, invoca el

// oprime algun boton y

{

regs.h.al=0x3; // Inicializar el
registro AL con el valor 3(hexadecimal)

servicio 3 de la INT 33h (mouse)

status del mouse, o sea, si se

las coordenadas del cursor

int86(0x33,&regs,&regs); // Invoca
la INT 33h (mouse)

// El servicio 3 de la INT 33h devuelve
el status del mouse en el registro BX
// Si BX=1 entonces se oprimio el boton
izquierdo
// Si BX=2 entonces se oprimio el boton
derecho

if(regs.x.bx==1)
{
gotoxy(20,12); cout << "Boton
izquierdo";
gotoxy(20,12); cout << "
";
}

if(regs.x.bx==2)
{
gotoxy(40,12); cout << "Boton
derecho";
gotoxy(40,12); cout << "
";
}

}
return;
}



Fig. 5.- Manejo del mouse



El programa de la Fig. 5 inicial
  • Links de descarga
http://lwp-l.com/pdf15416

Comentarios de: Uso de los recursos de un equipo de computo mediante C++ (0)


No hay comentarios
 

Comentar...

Nombre
Correo (no se visualiza en la web)
Valoración
Comentarios...
CerrarCerrar
CerrarCerrar
Cerrar

Tienes que ser un usuario registrado para poder insertar imágenes, archivos y/o videos.

Puedes registrarte o validarte desde aquí.

Codigo
Negrita
Subrayado
Tachado
Cursiva
Insertar enlace
Imagen externa
Emoticon
Tabular
Centrar
Titulo
Linea
Disminuir
Aumentar
Vista preliminar
sonreir
dientes
lengua
guiño
enfadado
confundido
llorar
avergonzado
sorprendido
triste
sol
estrella
jarra
camara
taza de cafe
email
beso
bombilla
amor
mal
bien
Es necesario revisar y aceptar las políticas de privacidad