Сравните строку используя сборку int 16h - PullRequest
1 голос
/ 11 апреля 2020

Мне нужно сравнить строку с чем-то, что я набираю на клавиатуре с перерывом в 16 часов. Как я могу сравнить?

keyboard:
  mov ah, 00h
  int 16h

  mov ah, 0Eh
  int 10h

  cmp al, 13
  je compare

  jmp keyboard

compare: 
  mov [si], al
  mov di, s1
  mov cx, s1_len
  cld
  repe cmpsb
  jecxz command_version

  call command_not_found

  jmp keyboard

command_version:
  ...

command_not_found:
  ...

s1 db 'version', 0
s1_len equ $- s1

16h 00h принимает только символы.

1 Ответ

0 голосов
/ 13 апреля 2020

Как я могу сохранить его в памяти?

  1. Определить буфер с помощью Buf db 10 dup (0).

  2. Заполнить это из вашего ввода l oop:

        cld
        mov  di, Buf
    keyboard:
        mov  ah, 00h
        int  16h
        stosb
        mov  ah, 0Eh
        int  10h
        cmp  al, 13
        jne  keyboard
        mov  byte [di-1], 0  ; Replace the unsuitable 13
    
  3. Сравните обе строки ASCIIZ (с нулевым окончанием)

    compare: 
        mov  di, Buf
        mov  si, s1
        mov  cx, s1_len
        repe cmpsb
        je   command_version
    
...