-----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-----