在 emu 8086 中检查没有 INT 21h 的回文字符串
Check string for palindrome without INT 21h in emu 8086
我正在为我的计算机体系结构做作业 class,但我不太了解汇编。我应该从键盘输入一个字符串并检查它是否是回文。我不允许使用 INT 21h
。我将程序编写为 db string value
而不是键盘输入,但我仍然无法让我的 CMP
正常工作。我很确定我做错了。希望有人能帮忙。
#make_COM#
include emu8086.inc
org 100h
jmp init
msg db "kayak",0
init:
Mov SI,5
mov di,0
start:
mov al,msg[si]
dEC si
inc di
mov ah ,0eh
int 10h
cmp si, -1
jg start
check:
mov al, msg[si]
mov ah, msg[di]
cmp al, ah
jmp notpalin
inc si
dec di
cmp si, 5
jl check
palin:
call pthis
db "This is a palindrome", 0
jmp stop
notpalin:
call pthis
db "This is not a palindrome", 0
jmp stop
stop:
mov ah, 0
int 16h ; wait for any key....
ret ; return to operating system.
DEFINE_PTHIS
您需要从 4 而不是 5 开始 SI
寄存器。使用数字 5 处理您不希望使用 BIOS 电传打字机功能显示的 NULL 字符。
您的程序开始 check 部分将包含 -1 的 SI
寄存器。这显然不是 mov al, msg[si]
.
的正确内存引用
比较2个字符时,需要使用条件跳转。你使用了一个总是跳跃的跳跃!
cmp al, ah
jNE notpalin
一旦索引 SI
和 DI
相互交叉,您可以停止检查。
解决方法:
mov si, 0
mov di, 4
check:
mov al, msg[si]
mov ah, msg[di]
cmp al, ah
jne notpalin
inc si
dec di
cmp si, di
jb check
我正在为我的计算机体系结构做作业 class,但我不太了解汇编。我应该从键盘输入一个字符串并检查它是否是回文。我不允许使用 INT 21h
。我将程序编写为 db string value
而不是键盘输入,但我仍然无法让我的 CMP
正常工作。我很确定我做错了。希望有人能帮忙。
#make_COM#
include emu8086.inc
org 100h
jmp init
msg db "kayak",0
init:
Mov SI,5
mov di,0
start:
mov al,msg[si]
dEC si
inc di
mov ah ,0eh
int 10h
cmp si, -1
jg start
check:
mov al, msg[si]
mov ah, msg[di]
cmp al, ah
jmp notpalin
inc si
dec di
cmp si, 5
jl check
palin:
call pthis
db "This is a palindrome", 0
jmp stop
notpalin:
call pthis
db "This is not a palindrome", 0
jmp stop
stop:
mov ah, 0
int 16h ; wait for any key....
ret ; return to operating system.
DEFINE_PTHIS
您需要从 4 而不是 5 开始
SI
寄存器。使用数字 5 处理您不希望使用 BIOS 电传打字机功能显示的 NULL 字符。您的程序开始 check 部分将包含 -1 的
SI
寄存器。这显然不是mov al, msg[si]
. 的正确内存引用
比较2个字符时,需要使用条件跳转。你使用了一个总是跳跃的跳跃!
cmp al, ah jNE notpalin
一旦索引
SI
和DI
相互交叉,您可以停止检查。
解决方法:
mov si, 0
mov di, 4
check:
mov al, msg[si]
mov ah, msg[di]
cmp al, ah
jne notpalin
inc si
dec di
cmp si, di
jb check