Operator+ Original. ¿Cómo?

Iniciado por ivancea96, 12 Julio 2013, 04:55 AM

0 Miembros y 1 Visitante están viendo este tema.

ivancea96

Mi pregunta es más que nada por curiosidad. El operador "+" de enteros por ejemplo, ¿cómo está definido de raiz? ¿O es una función ya a bajo nivel?
Por ejemplo, el operador * podría ser un bucle for, sumando "a" veces "b".
¿Pero el "+"?

eferion

Es una función propia del lenguaje. Tu piensa que al final el código fuente que tu escribes se acaba transformando en instrucciones máquina... y cualquier procesador de ordenador tiene instrucciones para ( por ejemplo ) sumar y restar números con signo y sin signo.

Esto quiere decir que no se requiere implementar una función para que sume dos números enteros porque es una funcionalidad que ya viene implementada a más bajo nivel.

engel lex

en realidad tambien me da curiosidad y me gustaria saber exactamente... cuando sumo 2 numeros enteros, la operacion de ensamblador se resume a una sola instruccion de suma a bajo nivel? o hace más que eso?
El problema con la sociedad actualmente radica en que todos creen que tienen el derecho de tener una opinión, y que esa opinión sea validada por todos, cuando lo correcto es que todos tengan derecho a una opinión, siempre y cuando esa opinión pueda ser ignorada, cuestionada, e incluso ser sujeta a burla, particularmente cuando no tiene sentido alguno.

eferion

pues más o menos sería así


int result = num1 + num2;


Código (asm) [Seleccionar]

mov ax, num1
mov bx, num2
add ax, bx
mov result, ax



eferion

La explicación al por qué de las 4 instrucciones es la siguiente:

Dependiendo de la arquitectura del procesador, no todas las instrucciones pueden acceder a la memoria.

un ejemplo es el caso de las instrucciones de suma, resta, ... Estas instrucciones únicamente pueden operar con los registros del procesador y con valores constantes. Es necesario, por tanto, mover las dos variables a registros del procesador para poder realizar la suma.

La instrucción de suma almacena en ax el resultado de la suma, por lo que después es necesario mover dicho resultado a la variable donde queremos almacenarlo.

Danyfirex

Puedes hacer una multiplicación la compilas y la ves en ollydbg.

saludos

ivancea96

mm Danyfirex, buena idea jaja.

Gracias Eferion. Pensaba que sería un poco a más alto nivel el operator +.

¿Y el operator *? ¿Es a bajo nivel, o un conjunto de operators +?

Danyfirex

la verdad no he mirado nunca una multiplicacion en ollydbg pero creo que usa las instrucciones MUL,IMUL entre otros.


http://es.wikipedia.org/wiki/Anexo:Listados_de_instrucciones_x86


saludos

Oblivi0n

A bajo nivel, la suma la realiza la ALU, aquí tienes el circuíto que la realizaría (lo han complicao un poco xD)


ivancea96

Mm oblivion, no me he parado mucho en el circuito jeje pero gracias por la respuesta tan detallada xD
Pero yo me refería más a nivel software, no hardware jaja
Pero gracias igual :D (Que tiempos de hacer circuitos en electronica, y luego hacerlos en el minecraft jaja)