为什么所有的字符串都反转了?
Why are all strings getting reversed?
以下是我今天考试的题目-
编写一个 ALP 来检查一组字符串。每个字符串的长度为四个字符。要检查的字符串数存储在位置“cnt1”中。计数不会超过 20d。字符串从位置“dat1”开始存储。 ALP 应扫描每个字符串并查看它是否等于“”(四个空格)。如果是,则应将此四个空格字符串之后的所有字符串反转,直到遇到下一个四个空格字符串。您可以假设数组中的空白字符串不会超过 2 个。
例如如果字符串集是
‘math’, ‘have’, ‘ ‘, ‘bury’, ‘mine’, ‘dine’, ‘ ‘ , ‘hell’, ‘deep’, ‘tree’
工党应该改成
‘math’, ‘have’, ‘ ‘, ‘yrub’, ‘enim’, ‘enid’, ‘ ‘, ‘hell’, ‘deep’, ‘tree’
您必须使用一条指令来反转字符串。
我写了一个 ALP 代码并 运行 它使用 MASM 但所有的字符串都被颠倒了而不是少数。
以下是我的代码-
.
model tiny
.486
.data
dat1 dd 'math','have',' ','bury','mine','dine',' ','hell','deep','tree'
cnt1 db 10
.code
.startup
lea si,dat1
mov di,si
mov cl,cnt1
mov ch,0
cld
x1: lodsd
mov ebx,20202020h
cmp eax,ebx
jnz x2
inc ch
x5: cmp ch,2h
jz x3
cmp ebx,dword ptr[si]
jz x3
bswap eax
add si,4
add di,4
dec cl
jnz x5
jmp x3
x2: add si,4
add di,4
dec cl
jnz x1
x3:
.exit
end
但不是只有少数字符串被反转,而是所有字符串都被反转。请帮我调试一下。
dd 'math'
导致 'math'
被视为 32 位整数,其中 'm'
是最重要的字节,而 'h'
是最不重要的字节(即只是就好像你写了 dd 6874616Dh
).
如果你想先用left-most写出字节,你可以用db
替换dd
。另一种选择是向后写字符串(即 'htam'
,等等)。
以下是我今天考试的题目-
编写一个 ALP 来检查一组字符串。每个字符串的长度为四个字符。要检查的字符串数存储在位置“cnt1”中。计数不会超过 20d。字符串从位置“dat1”开始存储。 ALP 应扫描每个字符串并查看它是否等于“”(四个空格)。如果是,则应将此四个空格字符串之后的所有字符串反转,直到遇到下一个四个空格字符串。您可以假设数组中的空白字符串不会超过 2 个。 例如如果字符串集是 ‘math’, ‘have’, ‘ ‘, ‘bury’, ‘mine’, ‘dine’, ‘ ‘ , ‘hell’, ‘deep’, ‘tree’ 工党应该改成 ‘math’, ‘have’, ‘ ‘, ‘yrub’, ‘enim’, ‘enid’, ‘ ‘, ‘hell’, ‘deep’, ‘tree’ 您必须使用一条指令来反转字符串。
我写了一个 ALP 代码并 运行 它使用 MASM 但所有的字符串都被颠倒了而不是少数。 以下是我的代码-
.
model tiny
.486
.data
dat1 dd 'math','have',' ','bury','mine','dine',' ','hell','deep','tree'
cnt1 db 10
.code
.startup
lea si,dat1
mov di,si
mov cl,cnt1
mov ch,0
cld
x1: lodsd
mov ebx,20202020h
cmp eax,ebx
jnz x2
inc ch
x5: cmp ch,2h
jz x3
cmp ebx,dword ptr[si]
jz x3
bswap eax
add si,4
add di,4
dec cl
jnz x5
jmp x3
x2: add si,4
add di,4
dec cl
jnz x1
x3:
.exit
end
但不是只有少数字符串被反转,而是所有字符串都被反转。请帮我调试一下。
dd 'math'
导致 'math'
被视为 32 位整数,其中 'm'
是最重要的字节,而 'h'
是最不重要的字节(即只是就好像你写了 dd 6874616Dh
).
如果你想先用left-most写出字节,你可以用db
替换dd
。另一种选择是向后写字符串(即 'htam'
,等等)。