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&#59;[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

[0] Índice de Mensajes

Ir a la versión completa