如何逐个字母地反转字符串,并使用SI将其与第一个字母串逐字母进行比较?我最初考虑过为循环添加SI到Cl,但发现它不会让我将SI添加到Cl。任何建议将不胜感激。这是我使用的代码,只是使用相同的字符串来测试比较。
.model small
.stack 100h
.data
input db 'Input string: $'
display db 10,10,13,'String is $'
length db 10,10,13,'String length is $'
character db 10,10,13,'Characters are:$'
equaldata db 'Equal$'
notequaldata db 'Not Equal$'
string db 20 dup('$')
.code
mov ax, @data
mov ds, ax
lea si, string
mov ah, 09h
mov dx, offset input
int 21h
mov ah, 0Ah ;request to input string
lea dx, string
int 21h
mov ah, 09h
mov dx, offset display
int 21h
lea dx, string + 2
int 21h
mov ah, 09h
mov dx, offset length
int 21h
mov bl, string + 1 ;length of string
mov ax, 0
mov al, bl ;length in hexadecimal
aam ;length in decimal
mov ch, ah ;tens digit of length
mov cl, al ;ones digit of length
mov ah, 02h
add ch, 30h
mov dl, ch ;display tens digit of length
int 21h
add cl, 30h
mov dl, cl ;display ones digit of length
int 21h
mov ah, 09h
mov dx, offset character
int 21h
mov cx, 0
mov cl, bl ;counter for loop
mov dh, cl
print_character:
mov bh, si + 2
mov ah, 02h
mov dl, 0Ah ;newline
int 21h
mov dl, 0Dh ;carriage return
int 21h
mov dl, bh ;character of string
int 21h
mov dl, 20h ;spaces
int 21h
int 21h
int 21h
int 21h
;----------------------second letter--------------
mov bl, si + 2
mov dl, bl
int 21h
mov dl, 20h
int 21h
int 21h
int 21h
int 21h
;---------------------equal or not equal-----------
cmp bh, bl
je equal
jne notequal
equal:
mov ah, 09h
mov dx, offset equaldata ;display equal data
int 21h
jmp lineend
notequal:
mov ah, 09h
mov dx, offset notequaldata ;display not equal
int 21h
jmp lineend
lineend:
inc si
dec dh
loop print_character
int 20h
end
答案 0 :(得分:1)
逐个字母地反转一个字符串,并将其与第一个字母逐个字母进行比较
这是非常无用的,因为只有在回文的情况下,比较才会导致平等。对回文的测试根本不需要反转!使用2个指针,一个在字符串的开头,一个在字符串的末尾。停在第一个不平等。如果你到达中间,你知道这个字符串是回文。
由于您在BL中获得了字符串长度,因此将为循环设置此代码:
app.use(require('./routes/user'));
在您当前的代码中,由于您比较相同的内存内容,因此不可避免地会获得相等性。
mov bh, 0
dec bx
lea di, [si+2]
Again:
mov al, [di] ;Character from the front of the string
mov ah, [di+bx] ;Character from the rear of the string
cmp al, ah
...
inc di
sub bx, 2
jnbe Again
IsPalindrome: