• Jueves 2 de Mayo de 2024, 05:52

Autor Tema:  Numeros Negativos  (Leído 2801 veces)

xomi

  • Nuevo Miembro
  • *
  • Mensajes: 4
    • Ver Perfil
Numeros Negativos
« en: Jueves 15 de Septiembre de 2005, 02:53 »
0
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
  1.  
  2.  
  3. ;copia de areglos entre a y b
  4.  
  5. .386
  6. .model flat, stdcall
  7. option casemap: none
  8.  
  9. include \masm32\include\windows.inc
  10. include \masm32\macros\macros.asm
  11. include \masm32\include\kernel32.inc
  12. include \masm32\include\masm32.inc
  13. include \masm32\include\user32.inc
  14.  
  15. includelib \masm32\lib\masm32.lib
  16. includelib \masm32\lib\kernel32.lib
  17. includelib \masm32\lib\user32.lib
  18.  
  19. .data
  20. a  sbyte 1,2,3,4,5,6
  21. b  sbyte 0,0,0,0,0,0
  22.  
  23.  
  24. .code
  25.     inicio:
  26.  
  27.         mov eax, 0
  28.         mov ebx, 0
  29.         mov edx, 0
  30.      
  31.  
  32.     ciclo:
  33.  
  34.     push eax
  35.     mov al,a[ebx]  
  36.     mov b[ebx], al  
  37.     invoke StdOut, ustr$(eax)
  38.    print chr$(" A ",13,10)
  39.     pop eax
  40.  
  41.  
  42.    
  43.    push edx
  44.     mov dl, b[ebx]
  45.     invoke StdOut, ustr$(edx)
  46.     print chr$(" B ",13,10)
  47.          
  48.     pop edx
  49.  
  50.     .if ebx < 5  
  51.         .if a[ebx]> 0
  52.         inc ebx
  53.         jmp ciclo
  54.        
  55.         .endif
  56.        
  57.    .endif
  58.     invoke ExitProcess,0
  59.   end inicio
  60.  
  61.  

Eternal Idol

  • Moderador
  • ******
  • Mensajes: 4696
  • Nacionalidad: ar
    • Ver Perfil
Re: Numeros Negativos
« Respuesta #1 en: Jueves 15 de Septiembre de 2005, 11:43 »
0
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
  1.  
  2.   mov b[ebx], al
  3.  
  4.  

Estas llenando b
  • siempre con el valor de a
  • 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
  1.  
  2.    .if al < 128
  3.      mov b[ebx], al
  4.     ;aca imprimirias NUMERO + B
  5.    .else
  6.     ;aca imprimirias NUMERO + C
  7.      mov carray[ebx], al  
  8.    .endif
  9.  
  10.  

Como nota adicional no podes modificar ebx tan alegremente ya que es utilizado por Windows.

 :smartass:  :devil:  :comp:

Nacional y Popular En mi país la bandera de Eva es inmortal.


Queremos una Argentina socialmente justa, económicamente libre y  políticamente soberana.
¡Perón cumple, Evita dignifica!


La mano invisible del mercado me robo la billetera.

xomi

  • Nuevo Miembro
  • *
  • Mensajes: 4
    • Ver Perfil
Re: Numeros Negativos
« Respuesta #2 en: Jueves 15 de Septiembre de 2005, 18:47 »
0
Gracias eh podido resolverlo

si quisiera capturar los valores de A desde teclado que tendia que hacer
Código: Text
  1.  
  2. .386
  3. .model flat, stdcall
  4. option casemap: none
  5.  
  6. include \masm32\include\windows.inc
  7. include \masm32\macros\macros.asm
  8. include \masm32\include\kernel32.inc
  9. include \masm32\include\masm32.inc
  10. include \masm32\include\user32.inc
  11.  
  12. includelib \masm32\lib\masm32.lib
  13. includelib \masm32\lib\kernel32.lib
  14. includelib \masm32\lib\user32.lib
  15.  
  16. .data
  17. a  sbyte -1,2,-3,4,5,6&#59;[B]como podria capturar estos valores desde teclado[/B]
  18. b  sbyte 0,0,0,0,0,0
  19. t  sbyte 0,0,0,0,0,0
  20.  
  21.  
  22. .code
  23.     inicio:
  24.  
  25.         mov eax, 0
  26.         mov ebx, 0
  27.        
  28.     ciclo:  
  29.     .if ebx < 6
  30.         mov al,a[ebx]
  31.          .if a[ebx] > 0
  32.             mov b[ebx],al            
  33.           .endif
  34.           .if a[ebx] < 0
  35.             mov t[ebx],al            
  36.           .endif
  37.  
  38.         inc ebx
  39.         jmp ciclo
  40.      .endif
  41.      
  42.    mov eax,0
  43.    mov ebx,0
  44.    cpositivo:
  45.       .if ebx < 6
  46.        mov al, b[ebx]
  47.        invoke StdOut, ustr$(eax)
  48.        inc ebx
  49.        jmp cpositivo
  50.       .endif
  51.  
  52.  
  53.    mov eax,0
  54.    mov ebx,0
  55.    print chr$(10)
  56.    cnegativo:
  57.       .if ebx < 6
  58.        mov al, t[ebx]
  59.        invoke StdOut, str$(t[ebx])
  60.        inc ebx
  61.        jmp cnegativo
  62.       .endif
  63.          
  64.     invoke ExitProcess,0
  65.   end inicio
  66.  
  67.  
Gracias por ayudarnos a los que estamos empezando  :hola: