🚀 go-pugleaf

RetroBBS NetNews Server

Inspired by RockSolid Light RIP Retro Guy

Article View: es.comp.os.linux.programacion
Article #16264

Re: Retardo en juego

#16264
From: batsman
Date: Sat, 29 Apr 2000 00:00
122 lines
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-mail
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>

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