比較字符串我寫設計成4字母串對前4個字母在緩衝區比較的功能:在8086實模式
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
這裏是所有的變量:
REBOOT_CMD:
db "rset",0
BUFFER_INDEX:
dw BUFFER
BUFFER:
times 80 db 0
BUFFER_END:
但是當字符串不等於它會導致仿真器(B OCHS)掛起。爲什麼?
看看你的推動和砰砰聲。比較之後,你推動但沒有彈出。 (無關)'inc bx'不會使它指向下一組2個字符。你需要在這裏添加bx,2。 – usr2564301
沒有必要使用[buffer_index],爲什麼不簡單地用[buffer + 2]與[Buffer]和[bx + 2]進行比較[bx]? – Tommylee2k