# Warum kann ich nicht wieder zur main loop zurückgehenNASM



## TheComputaNerd (4. März 2011)

```
mov ax, 0x1000
mov es, ax
mov ds, ax

mov ah, 2
mov dh, 2
int 10h

mov si, welcome
call print

loop:
mov si, prompt
call print

mov di, buffer
call keyboard

mov si, buffer
cmp byte [si], 0
jc loop

mov si, buffer
mov di, cmd_help
call strcmp
je .help

mov si, buffer
mov di, cmd_h
call strcmp
je .help

mov si, buffer
mov di, cmd_write
call strcmp
je .write

mov si, buffer
mov di, cmd_read
call strcmp
je .read

mov si, badcomm
call print

jmp loop

.help:
mov si, command1
call print
jmp loop

.write:
mov ax, 0x2000
mov es, ax
mov bx,0

mov ah, 2
mov al, 1
mov dl, 0
mov dh, 1
mov ch, 0
mov cl, 7
int 13h
jc loop

.read:
mov ax, 0x2000
mov es, ax
mov bx,0

mov ah, 2
mov al, 1
mov dl, 0
mov dh, 1
mov ch, 0
mov cl, 7
int 13h
je loop
mov si, yes
call print
jmp loop

yes db "a byte was found in the 7th sector", 13, 10, 0
cmd_read db "read", 0
cmd_write db "write", 0
command1 db "folgende kommandos stehen ihnen zur verf", 129, "gung:", 13, 10, 0
badcomm db "es wurde ein unbekannter befehl eingegeben", 13, 10, 0
cmd_help db "help", 0
cmd_h db "-h", 0
prompt db "#>", 0
welcome db "nerdix version 0.1.0", 13, 10, 0
buffer times 64 db 0

print:
lodsb
or al, al
jz .done
mov ah, 0eh
int 10h
jmp print

.done:
ret

keyboard:
xor cl, cl
keyboard1:
mov ah, 0
  int 0x16   ; wait for keypress
  cmp al, 0x0D  ; enter pressed?
  je .return

  mov ah, 0x0E
  int 0x10      ; print out character

  stosb  ; put character in buffer
  inc cl

jmp keyboard1


.return:
mov al, 0
stosb

mov ah, 0x0E
mov al, 0x0D
int 0x10
mov al, 0x0A
int 0x10		; newline

ret


strcmp:
mov al, [si]
mov bl, [di]
cmp al, bl
jne .not
cmp al, 0
je done

inc di
inc si
jmp strcmp

.not:
clc
ret

done:
stc
ret

times 512 - ($ - $$) hlt
```

wenn ich read oder write eingebe, dann gehe ich halt zurück zu der main funktion, aber die eingabe dann ist nicht ,ehr gültig. also es ignoiert es sozusagen. noch was:
wenn ich write eingebe, soll es eigentlich was in ein sektor schreiben. es sollte dann acuh eine anchricht in den terminal kommen(in linux unter qemu), dass es da rein geschrieben wurde. aber leider kommt da keine nachricht. ich bibn echt sprachlos


----------

