Assembly 使用INT16H汇编比较字符串

Assembly 使用INT16H汇编比较字符串,assembly,x86-16,bios,Assembly,X86 16,Bios,我需要将一个字符串与我在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

我需要将一个字符串与我在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仅接受字符


我如何将其存储在内存中

  • 使用
    Buf db 10 dup(0)
    定义一个缓冲区

  • 从输入循环中填充它:

        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
    
  • 比较两个ASCIIZ(以零结尾)字符串


  • 我如何将其存储在内存中

  • 使用
    Buf db 10 dup(0)
    定义一个缓冲区

  • 从输入循环中填充它:

        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
    
  • 比较两个ASCIIZ(以零结尾)字符串


  • 读入
    repe cmpsb
    的缓冲区,或在循环中每次读取一个字符时进行比较,以便在用户键入超过差异之前检测到不匹配。您写入的代码将所有字符写入屏幕,但不会将其存储到内存中。当然,您必须先将所有字符写入内存,然后才能进行比较。如何将其存储在内存中?将其读入
    repe cmpsb
    的缓冲区,或在循环中每次读取一个字符时进行比较,以便在用户键入超过差异之前检测不匹配。您所写的代码将所有字符写入屏幕,但它不会将它们存储到内存中。当然,您必须先将所有字符写入内存,然后才能进行比较。我如何将其存储在内存中?它不起作用,当我在缓冲区中写入至少一个字符时,它会给我一个奇怪的值。他不能比较。@AfonsoDolmen确保段寄存器设置正确。特别是要使此代码工作,您需要使用DS=
    ES
    。它不工作,当我在缓冲区中写入至少一个字符时,它会给我一个奇怪的值。他不能比较。@AfonsoDolmen确保段寄存器设置正确。特别是要使此代码正常工作,您需要
    DS
    =
    ES