Ensamblador - Sumar elementos de un vector

 
Vista:

Sumar elementos de un vector

Publicado por webkage (1 intervención) el 13/11/2005 18:22:37
Tengo el siguiente problema:

Supongamos que tengo un vector de n elementos, cada elemento es de tamaño palabra, word (16bit) y tengo que sumarlos todos, teniendo el cuenta el signo. La suma tiene que entrar en otra variable de 32bits, y n no es lo suficientemente grande para que halla overflow.

Con la instruccion cwd (covert word to double) puedo hacer que el registro AX, que supongamos que es donde voy acumulando la suma, pase a ser de 32bit, para ello concatena DX con AX, con lo que si AX era positivo, inicializa DX con todo 0, y si era negativo con todo 1. con lo que quedaria DX:AX mas o menos. Por ejemplo

AX=0111,1111
DX:AX= 0000,0000:0111,1111

AX= 1001,0000
DX:AX=1111,1111:1001,0000

Pero no consigo que funcione, es mas, hago la suma y en lugar de ir sumando en AX lo suma todo en AL, lo hace "bien" ya que el overflow y el carry funcionan bien pero claro, yo lo que quiero es que lo haga en ambos registros, y no puedo usar registros de 32bits tiene que hacerse usando esa orden forzosamente.

Alguien podria poner un trozo de codigo donde se use la orden cwd? o mejor todavia que ponga un trozo de codigo en el que se sume los elementos de un vector cualquiera de elementos de 16bits acumulandose en una variable de 32bits con esta orden, gracias
Valora esta pregunta
Me gusta: Está pregunta es útil y esta claraNo me gusta: Está pregunta no esta clara o no es útil
0
Responder