Mailinglist Archive: opensuse-es (1097 mails)

< Previous Next >
Re: [opensuse-es] eleccion de entorno de programacion
  • From: "Carlos E. R." <robin.listas@xxxxxxxxxxxxxx>
  • Date: Thu, 13 Sep 2007 21:53:17 +0200 (CEST)
  • Message-id: <Pine.LNX.4.64.0709132111510.5954@xxxxxxxxxxxxxxxx>
-----BEGIN PGP SIGNED MESSAGE-----
Hash: SHA1


El 2007-09-13 a las 20:23 +0200, lluis escribió:

> > Mmmm... no estoy seguro yo de eso. De hecho, en los procesadores que 
> > conozco por dentro, no es cierto.
> > 
> 
> Para un PC no me atrevo a juratelo, no me he mirado codigo
> desensamblado.
> 
> Para un hitachi SH2 de 32 bits se observa que cuando carga datos mas
> cortos( p.e. 16 bits) tiene que realizar la extension de signo.
> 
> Si puedes confirmar como lo hace Intel cuentamelo, es un detalle bueno
> de saber.

¡El signo! No se me había ocurrido pensar en eso. Ya... pero eso es porque 
cargas 16 bits pero usa un registro de 32, con lo que tiene que 
extenderlo. Entiendo...

No, yo pensaba en el Motorola 68000: la duración de la instrucción de 
carga en ciclos de reloj es constante, o sea, independiente del dato. Y 
además, los registros de la cpu se pueden usar como de 8, 16 o 32 bits 
directamente (es big-endian). Pero existe la instrucción para extender el 
signo (ext). Lo que pasa es que al programar en assembler pues usas el 
registro como word y punto. No me había planteado que es lo que hace un 
compilador...

A ver, instrucción ADD, suma binaria.

  ADD.s   <ea>,Dn
  ADD.s   Dn,<ea>
... 
  where  .s= .B, .W, or .L
...
Condition codes:
  N     set if result is negative, cleared otherwise

Vale, pues la instrucción ADD puede trabajar directamente con un byte, 
independiemente del signo. Usa representación tipo "complemento a dos", 
con lo que la instrucción es la misma sea un entero con signo o sin el.

Y repasando mi notas, veo que para decimales (bcd) implementa suma y 
extensión en una única operación (ABCD). También existe ADDX, add binary 
with extend, que creo que hace falta cuando se mezclan sumas de tamaños 
distintos en los operandos.

O sea, en el caso del 68000 no se pierde tiempo por usar números de 16 
bits. Pero no tengo una CPU de esas para probar :-(


Intel... ¡Pues me pones en dudas! No lo se. A ver, wikipedia:

http://en.wikipedia.org/wiki/Sign_extension

In the x86 instruction set used by the main microprocessors of all common 
PCs, sign extension is done by the instructions cbw, cwd, cwde, and cdq 
("convert byte to word", "c. word to doubleword", "c. w. to extended dw.", 
and "c. dw. to quadword", respectively; in the x86 context, a byte has 8 
bits, a word 16 bits, a doubleword and extended doubleword 32 bits, and a 
quadword 64 bits).



- -- 
Saludos
       Carlos E.R.
-----BEGIN PGP SIGNATURE-----
Version: GnuPG v1.4.5 (GNU/Linux)
Comment: Made with pgp4pine 1.76

iD8DBQFG6ZU4tTMYHG2NR9URApwMAKCIGBr4LIn3N7Jxnlo/PO9LexX1pQCdFEI1
y4dsK9c+JdACYG0zWwkl/BI=
=e9tt
-----END PGP SIGNATURE-----
< Previous Next >
Follow Ups