:ここ比較文字列
is_cmd:
; bx is the string address argument
push bx ; Push bx to stack
mov cx, [bx] ; and also move into cx
mov bx, BUFFER ; Reset BUFFER_INDEX
mov [BUFFER_INDEX], bx ; so it points to first 2 characters
mov bx, [BUFFER_INDEX]
cmp cx, [bx] ; Compare
jne is_cmd_no ; Jump if not equal
pop bx ; Retrive bx from stack
inc bx ; Move pointer to next 2 characters
mov cx, [bx] ; Move to cx
mov bx, [BUFFER_INDEX] ; Move BUFFER_INDEX into bx
inc bx ; and move to next 2 characters
cmp cx, [bx] ; Compare
jne is_cmd_no ; Jump if not equal
jmp is_cmd_yes ; Jump if equal both times
is_cmd_no:
mov ax, 1 ; Set ax to 1 so jz will not jump
ret
is_cmd_yes:
mov ax, 0 ; Set ax to 0 so jz will jump
ret
をその一例である使い方です:
mov bx, REBOOT_CMD
call is_cmd
or ax, ax
jz reboot_cmd
文字列は、それはエミュレータ(Bの原因と等しくない場合しかし、
REBOOT_CMD:
db "rset",0
BUFFER_INDEX:
dw BUFFER
BUFFER:
times 80 db 0
BUFFER_END:
:
そして、ここではすべての変数ですOCHS)をハングアップします。どうして?
あなたのプッシュとポップを見てください。比較の後、あなたはプッシュしたがポップしなかった。 (無関係) 'inc bx'は次の2文字セットを指しません。ここで 'add bx、2'が必要です。 – usr2564301
[buffer_index]を使う必要はありません。単に[bx]と[buffer]と[bx + 2]を[buffer + 2]と比較するのはなぜですか? – Tommylee2k