kostenloser Webspace werbefrei: lima-city


'CMP' Problem mit NASM - Assembler

lima-cityForumProgrammiersprachenSonstige Programmiersprachen

  1. Autor dieses Themas

    bytebit

    bytebit hat kostenlosen Webspace.

    Hallo alle zusammen,
    ich habe ein kleines Problem mit meinem Assembler Code, den ich mir aus dem Internet zusammen gesucht habe.
    use16
     org 0x7C00
     
     ;Disable interrupts
     cli
     
     ;set DS to 0
     xor  ax, ax
     push ax
     pop  ds
     
     ;The IRQ1 (keyboard) is mapped on interrupt 9 by default
     ;Now we write the address of the handler in the Interrupt descriptor table (IDT)
     mov word[ds:(9*4)  ], keyboard_handler    ;Offset
     mov word[ds:(9*4)+2], 0                   ;Segment
     
     ;Enable interrupts
     sti
     
     ;This handler gets called each time a IRQ1 is triggered by the keyboard
     keyboard_handler:
       pusha
     
       ;Apparently spinning until the byte is ready is necessary on some older machines.
     .spin:
       in  al, 0x64
       and al, 0x01
       jz  .spin
     
       ;read scancode
       in  al, 0x60
     
       ;Here you can do with the scancode whatever you like.
       ;For example converting it to another keyboard layout or test for special keys and trigger a reboot
     
       JMP al,185
       JA keyboard_handler
       JB keyboard_handler
       mov si, msgwelcome
    
       call bios.write_string
     
       ;Now we tell the first PIC that the IRQ is handled
       mov al, 0x20
       out 0x20, al
     
       popa
     iret
     
     
     ;Input: al = char
     bios.write_char:
       pusha
       mov  ah, 0x0E
       int  0x10
       popa
     ret
    
     ;Input: si = string
     bios.write_string:
      bios.write_stringD1:
      lodsb
      or al, al ; zero=end or str
      jz bios.write_stringdone   ; get out
      mov ah, 0x0E
      int 0x10
      jmp bios.write_stringD1
      bios.write_stringdone:
      ret
     
     hex_chars: db '0', '1', '2', '3', '4', '5', '6', '7', '8', '9', 'A', 'B', 'C', 'D', 'E', 'F'
     
     ;This is a small function to write a value on the screen
     ;Input: al = byte
     write_byte_as_hex:
       pusha
       and  ax, 0xFF
       push ax
       mov  bx, ax
       shr  bx, 4
       mov  al, [hex_chars+bx]
       call bios.write_char
       pop  bx
       and  bx, 0xF
       mov  al, [hex_chars+bx]
       call bios.write_char
       popa
     ret
     
     msgwelcome   db 'Welcome to ByteBitOS', 13, 10, 0
    
     times 510-($-$$) db 0
     dw 0xAA55


    Der Code soll, wenn man die Leertaste loslässt, über das Bios "Welcome to ByteBitOS" ausgeben.
    Leider wenn ich das ganze über NASM zu einer .BIN-Datei compilieren will bekomme ich immer denn selben Fehler:
    boot.asm:36: error invalid combination of opcode and operands
    Zeile 36 ist der "CMP" Befehl, welcher vergleichen soll ob al=185.

    Es währe nett, wenn ihr mir helfen könntet!

    bytebit
  2. Diskutiere mit und stelle Fragen: Jetzt kostenlos anmelden!

    lima-city: Gratis werbefreier Webspace für deine eigene Homepage

  3. Hallo bytebit,

    bei Dir steht da aber
    JMP al, 185
    von CMP ist da keine Spur.
    Du kannst ja mal
    cmp al, 185
    jnz keyboard_handler
    anstelle von
    JMP al,185
    JA keyboard_handler
    JB keyboard_handler
    probieren.

  4. Autor dieses Themas

    bytebit

    bytebit hat kostenlosen Webspace.

    darkpandemic schrieb:
    Hallo bytebit,

    bei Dir steht da aber
    JMP al, 185
    von CMP ist da keine Spur.
    Du kannst ja mal
    cmp al, 185
    jnz keyboard_handler
    anstelle von
    JMP al,185
    JA keyboard_handler
    JB keyboard_handler
    probieren.


    Du hast recht, es muss im Beitrag "CMP" heißen (Noch dazu kann man keine Vergleichung von Werten mit "JMP" durchführen).
    Ich habe mich wohl verschrieben. Hier der funktionierende Code:
    CMP al,185
    JNE keyboard_handler


    bytebit
  5. Diskutiere mit und stelle Fragen: Jetzt kostenlos anmelden!

    lima-city: Gratis werbefreier Webspace für deine eigene Homepage

Dir gefällt dieses Thema?

Über lima-city

Login zum Webhosting ohne Werbung!