hola a todos
soy novato con el assembler
estoy tratando de resolver este problema. un programa k lea 10 números y guarde en un dirección de memoria el numero de negativos
tengo un problema con el salto. no salta, se supone k salte si el numero es negativo ,para k no llame a la funcion, pero no salta, me pueden dar una sugerencia?
ya intente con todo, ja jb je js jl etc...
org 100h
vec db -2,1,3,-4,-5,6,-7,8,9,5
start:
lea si,vec
mov [400h],0
mov cx , 10
com:
mov ax,[si]
inc si
mov dX,0
CMP dX,aX
Js menor;<<<aki es donde no salta o salta cuando no debe
ok:
loop com
mov ax , [400h]
mov bx , [401h]
hlt
menor:
add [400h],1
jmp ok
es assembler para el emu8086
gracias
Comparar 0 con AX siempre va a dar igual a cero o negativo.
mov dX,0
CMP dX,aX
Tal vez si se usa JL:
JL menor;<<<aki es donde no salta o salta cuando no debe
Pero lo mejor sería poner el pseudocódigo, como algo tipo C, para ver si tiene sentido lo que se trata de hacer.
JL comprueba que SF != OF.
JS solo comprueba que SF = 1.
Aquí SF (bandera de signo) siempre va a ser 1 (o sea número negativo) a menos que AX sea 0 porque con cmp dx,ax, siempre se comprueba la resta de 0-AX.
Más o menos sería esto, te lo he puesto comentado para que te des cuenta de cada una de las instrucciones
xor esi,esi
xor ecx,ecx
xor eax,eax
xor edx,edx ; Inicializamos todos los valores
mov ecx,10 ; Le asignamos a ecx contador
bucle:
mov ah, byte ptr[Tabla+si] ; movemos el primer valor de la tabla a eax
inc esi ;Incrementamos el puntero a la cadena
cmp ah,0 ; el número es menor que cero?
jl negativo ; Salta si es negativo
loop bucle ;volvemos a empcezar
jmp salir
negativo:
add edx,1 ; Aquí vamos contando los números negativos que encontramos
loop bucle ; Seguimos mientras el contador no llegue a cero
salir:
gracias por sus respuestas
finalmente me di cuenta k el debia ehacer un salto antes de escrbirnir lo del vector
jmp inicio:
vectob db 1,2,3,4,5
inicio:
para evitar errores
y que debía comparar usando registros de 8 bits
es decir usar al bl cl dl aha bh ch dh
y no usar el registro completo como ax bx cx dx
gracias