Foro de elhacker.net

Programación => ASM => Mensaje iniciado por: huchoko en 22 Febrero 2019, 19:58 pm



Título: cmp no funciona
Publicado por: huchoko en 22 Febrero 2019, 19:58 pm
Pues tengo esta simple rutina en ensamblador (NASM):
Código
  1. isr80:
  2.    cli
  3.    push byte 0
  4.    push byte 80
  5.    cmp eax, 3
  6.    je .read_srv
  7.    cmp eax, 4
  8.    je .write_srv
  9.    jmp .end
  10.    .read_srv:
  11.    mov ecx, strinputbuff
  12.    mov eax, ebx
  13.    call k_readkb
  14.    xor eax, eax
  15.    .write_srv:
  16.    mov ecx, testmsg
  17.    push ecx
  18.    call kputs
  19.    pop ecx
  20.    jmp isr_common_stub
  21.    .end:
  22.  
Bueno, si mueves el valor 4 a eax, te imprime un texto, si mueves 3 a eax te lee el teclado, etc.
Pero no funciona, sea cual sea el valor que mueva a eax igualmente salta a la subrutina .write_srv.
Me tiene loco este error (por que no es la primera vez que me pasa, cada vez que uso cmp). Alguna idea?
PD: No estoy programando para un SO en específico (https://wiki.osdev.org/Bare_Bones).


Título: Re: cmp no funciona
Publicado por: Eternal Idol en 22 Febrero 2019, 21:58 pm
Los cmp y je estan bien pero si EAX es 3 vas a terminar en .write_srv tambien. Cualquier otro valor diferente a 3 y 4 ira a .end, pone un jmp .end entre la linea 14 y la 15.


Título: Re: cmp no funciona
Publicado por: huchoko en 22 Febrero 2019, 23:59 pm
Gracias, siempre me pregunte por que cmp nunca me funcionaba...
 :silbar:


Título: Re: cmp no funciona
Publicado por: Eternal Idol en 23 Febrero 2019, 00:45 am
De nadas  ::)