'CMP' Problem mit NASM - Assembler
lima-city → Forum → Programmiersprachen → Sonstige Programmiersprachen
assembler
boot
byte
code
first
input
internet
keyboard
kleines problem
leertaste
offset
pop
probieren
segment
set
special
spin
spur
trigger
url
-
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 -
Diskutiere mit und stelle Fragen: Jetzt kostenlos anmelden!
lima-city: Gratis werbefreier Webspace für deine eigene Homepage
-
darkpandemic schrieb:
Hallo bytebit,
bei Dir steht da aber
von CMP ist da keine Spur.JMP al, 185
Du kannst ja mal
anstelle voncmp al, 185 jnz keyboard_handler
probieren.JMP al,185 JA keyboard_handler JB keyboard_handler
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 -
Diskutiere mit und stelle Fragen: Jetzt kostenlos anmelden!
lima-city: Gratis werbefreier Webspace für deine eigene Homepage