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