Programación General > ASM (Ensamblador)
Numeros Negativos
(1/1)
xomi:
hola estoy empezando a programar en ASM, no tengo muchos conocimientos y tengo que entregar un poyecto para el lunes el cual trata de lo siguiente
se tiene un arreglo A con valores positivos y negativos de tipo byte, implemente un programa que apartir de A genere dos Arreglos
B con los valores positivos de A
C con los valores negativos de B
el arreglo A debe ser recorrido via un ciclo con JMP que analice en cada vuelta si el valor debe ir en B o en C lo estoy realizando en MASM32 :(
creo que he podido realizar lo de los positivos pero con los negativos no puedo ojala y me puedan ayudar se los agradeseria
--- Código: Text --- ;copia de areglos entre a y b .386.model flat, stdcalloption casemap: none include \masm32\include\windows.incinclude \masm32\macros\macros.asminclude \masm32\include\kernel32.incinclude \masm32\include\masm32.incinclude \masm32\include\user32.inc includelib \masm32\lib\masm32.libincludelib \masm32\lib\kernel32.libincludelib \masm32\lib\user32.lib .dataa sbyte 1,2,3,4,5,6b sbyte 0,0,0,0,0,0 .code inicio: mov eax, 0 mov ebx, 0 mov edx, 0 ciclo: push eax mov al,a[ebx] mov b[ebx], al invoke StdOut, ustr$(eax) print chr$(" A ",13,10) pop eax push edx mov dl, b[ebx] invoke StdOut, ustr$(edx) print chr$(" B ",13,10) pop edx .if ebx < 5 .if a[ebx]> 0 inc ebx jmp ciclo .endif .endif invoke ExitProcess,0 end inicio
Eternal Idol:
Un par de apuntes, estas dependiente mucho tanto de MASM (el ensamblador en si) como de MASM 32 (el paquete), no se si te lo aceptaran.
Ahora el codigo, lo que estas haciendo hasta ahora es recorrer desde 0 a 6 el array y al hacer:
--- Código: Text --- mov b[ebx], al
Estas llenando b[x] siempre con el valor de a[x] cuando deberias hacer ahi la comparacion para saber si el numero es o no negativo. Teniendo en cuenta que los bytes con signo van de -128 a 127 podes hacer una comparacion de este tipo para seguir usando operadores de MASM:
--- Código: Text --- .if al < 128 mov b[ebx], al ;aca imprimirias NUMERO + B .else ;aca imprimirias NUMERO + C mov carray[ebx], al .endif
Como nota adicional no podes modificar ebx tan alegremente ya que es utilizado por Windows.
:smartass: :devil: :comp:
xomi:
Gracias eh podido resolverlo
si quisiera capturar los valores de A desde teclado que tendia que hacer
--- Código: Text --- .386.model flat, stdcalloption casemap: none include \masm32\include\windows.incinclude \masm32\macros\macros.asminclude \masm32\include\kernel32.incinclude \masm32\include\masm32.incinclude \masm32\include\user32.inc includelib \masm32\lib\masm32.libincludelib \masm32\lib\kernel32.libincludelib \masm32\lib\user32.lib .dataa sbyte -1,2,-3,4,5,6;[B]como podria capturar estos valores desde teclado[/B]b sbyte 0,0,0,0,0,0t sbyte 0,0,0,0,0,0 .code inicio: mov eax, 0 mov ebx, 0 ciclo: .if ebx < 6 mov al,a[ebx] .if a[ebx] > 0 mov b[ebx],al .endif .if a[ebx] < 0 mov t[ebx],al .endif inc ebx jmp ciclo .endif mov eax,0 mov ebx,0 cpositivo: .if ebx < 6 mov al, b[ebx] invoke StdOut, ustr$(eax) inc ebx jmp cpositivo .endif mov eax,0 mov ebx,0 print chr$(10) cnegativo: .if ebx < 6 mov al, t[ebx] invoke StdOut, str$(t[ebx]) inc ebx jmp cnegativo .endif invoke ExitProcess,0 end inicio Gracias por ayudarnos a los que estamos empezando :hola:
Navegación
Ir a la versión completa