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


0