Article View: es.comp.os.linux.programacion
Article #16264Re: Retardo en juego
From: batsman
Date: Sat, 29 Apr 2000 00:00
Date: Sat, 29 Apr 2000 00:00
122 lines
5557 bytes
5557 bytes
-----BEGIN PGP SIGNED MESSAGE-----
>> El Sat, 29 Apr 2000 21:20:47 +0200, el siguiente flujo de bytes sali�
>> del ordenador de EstEl hacia es.comp.os.linux.programacion:
>A ver si puedo decir algo a batsman......
>>>Mmm...... creo que la rutina de bios 1Ah de servicios de temporizacion pilla
>>>centesimas pero no estoy seguro. Si en el lenguje no hay ninguna funcion que
>>>haga eso..... ensamblador.
>>
>>�BIOS? �Se puede usar esa guarrada en Linux? Creo que no ;-)
>>La BIOS est� dise�ada para ejecutarse en modo real, no en protegido que es lo
>>nativo en Linux.
>>
>>De todas formas tampoco hagas mucho caso a lo que digo porque hace mucho que
>>abandon� esas tonter�as de programaci�n DOS...
>
>Ante esto solo te puedo responder con un gran Aahhhhhhh jeje, no tenia ni
>idea, yo estoy empezando ahora con el ensamblador y la verdad es que me
>esta encantando.
>
>De todas formas tomo nota ;)... por cierto pregunta tonta..... hay
>interrupciones en linux?? (se nota que de programacion en linux, ni idea
>ehhhh)
Yo *jam�s* he hecho nada en ensamblador en linux, as� que tampoco tengo mucha
idea.
Desde luego no tiene nada que ver con DOS, all� llamabas a las rutinas y
funciones de la BIOS/del SO mediante interrupciones. En Linux no podr�s
usar las interrupciones tan "alegremente"; pero no hace falta, porque
lo que quieras hacer se conseguir� mediante llamadas al sistema.
En linux resulta que al final todas las llamadas al sistema funcionan as�:
el c�digo de la librer�a coloca par�metros en los registros adecuados y
salta al espacio del kernel mediante una interrupci�n (0x80 en plataformas
intel, con el n�mero de llamada va en EAX). Puedes comprobarlo compilando
est�ticamente un programilla con una llamada al sistema, haciendo un objdump y
viendo que al final hay por ah� un INT 0x80. As� que en realidad s�lo usar�s
*una* interrupci�n para todo.
Bueno, me est� apeteciendo ilustrar esto, as� que aqu� va el programa de prueba:
#include <unistd.h>
#include <stdlib.h>
#include <stdio.h>
int main(int argc, char *argv[])
{
int pid;
pid = getpid();
printf("El pid es %d\n", pid);
}
Compilamos con
gcc -o tst -static tst.c
despu�s, hacemos
objdump -disassemble
y entre toda la morralla encontramos
08048140 <main>:
8048140: 55 pushl %ebp
8048141: 89 e5 movl %esp,%ebp
8048143: 83 ec 04 subl $0x4,%esp
8048146: e8 25 49 00 00 call 804ca70 <__getpid>
804814b: 89 c0 movl %eax,%eax
804814d: 89 45 fc movl %eax,0xfffffffc(%ebp)
8048150: 8b 45 fc movl 0xfffffffc(%ebp),%eax
8048153: 50 pushl %eax
8048154: 68 7c 94 05 08 pushl $0x805947c
8048159: e8 62 04 00 00 call 80485c0 <_IO_printf>
804815e: 83 c4 08 addl $0x8,%esp
8048161: 89 ec movl %ebp,%esp
8048163: 5d popl %ebp
8048164: c3 ret
y �sto, que es lo m�s interesante:
0804ca70 <__getpid>:
804ca70: b8 14 00 00 00 movl $0x14,%eax
804ca75: cd 80 int $0x80
804ca77: 3d 01 f0 ff ff cmpl $0xfffff001,%eax
804ca7c: 0f 83 fe 01 00 jae 804cc80 <__syscall_error>
804ca81: 00
804ca82: c3 ret
Como ves, pone el valor 0x14 en eax y llama a la interrupci�n 0x80. El valor
0x14 � 20 en decimal es el c�digo de getpid, como puede verse en
/usr/include/asm/unistd.h:
#define __NR_lseek 19
#define __NR_getpid 20
#define __NR_mount 21
#define __NR_umount 22
- --
_ _
| |__ __ _| |_ ___ _ __ ___ __ _ _ __
| '_ \ / _` | __/ __| '_ ` _ \ / _` | '_ \
| |_) | (_| | |_\__ \ | | | | | (_| | | | |
|_.__/ \__,_|\__|___/_| |_| |_|\__,_|_| |_|
Real email: batsman dot geo at yahoo dot com
-----BEGIN PGP SIGNATURE-----
Version: 2.6.3ia
Charset: noconv
Comment: Public key via email: send mail with Subject: [PGPKEY]
iQEVAwUBOQtw4r0Y27yr0iefAQEJcAf/aj8Gdl6hAcvvdLSc0F/FJrtKxMZxj8xZ
/G3IMSxx/TFis0EDBPVyVpzGZnKiJ0T/dERWAJpacT6e6G7/3EoIH7wsgypJ6Abo
7IyRjdAGh77xOB2V7jIQr9hxkNVEbXniySxaMxflamSKy6sPtNnytNki4cdDwSlZ
ah/JNIxvcl69uvvnLEcCCe+j28myzS5c0Kj2msKys04ASIpOHiivD04gPxpATvri
b/qmsFuUe8brsCJ7yVI55b8tH8Hwb9pRZ8JKQAX9jGXHGEwkDeVCGD8j6EHwT3eQ
ssA1g727vGBoV3gSnbQXhsKrT9mAUDsCjL9ZDDQHwQlpeL6sr3OHDQ==
=ivmG
-----END PGP SIGNATURE-----
Technical Details
Message-ID:
<cdrfe8.gj6.ln@simpsons4ever>Path:
arc1-ca.pugleaf.net!unknown!not-for-mailReferences:
<8e4sen$4n3$1@talia.mad.ttd.net> <3906FE47.6CB90517@lcc.uma.es> <t3p9e8.dg.ln@debian> <c8ice8.b8.ln@simpsons4ever> <fmcfe8.0v.ln@debian>Show Full Headers
Complete Article Headers
X-Google-Language: SPANISH,ASCII X-Google-Thread: f86c8,38f52171fe384988 X-Google-Attributes: gidf86c8,public From: batsman@simpsons.for.ever (batsman) Subject: Re: Retardo en juego Date: 2000/04/29 Message-ID: <cdrfe8.gj6.ln@simpsons4ever> X-Deja-AN: 617299517 Content-Transfer-Encoding: 8bit References: <8e4sen$4n3$1@talia.mad.ttd.net> <3906FE47.6CB90517@lcc.uma.es> <t3p9e8.dg.ln@debian> <c8ice8.b8.ln@simpsons4ever> <fmcfe8.0v.ln@debian> Content-Type: text/plain; charset=iso-8859-1 X-Complaints-To: abuse@news.wanadoo.es X-Trace: m2newsread.uni2.es 957044243 62.36.17.20 (Sat, 29 Apr 2000 23:37:23 MET DST) Organization: Wanadoo Usenet News - Visita http://www.wanadoo.es/ Mime-Version: 1.0 User-Agent: slrn/0.9.5.3 (UNIX) Reply-To: see_signature-mira_firma NNTP-Posting-Date: Sat, 29 Apr 2000 23:37:23 MET DST Newsgroups: es.comp.os.linux.programacion