为什么所有字符串都会被颠倒过来?

时间:2018-02-19 17:03:09

标签: masm masm32 microprocessors

以下是我今天在测试中遇到的问题 -

编写一个将检查一组字符串的ALP。每个字符串的长度为四个字符。要检查的字符串数存储在位置“cnt1”中。计数不会超过20d。字符串从位置'dat1'开始存储。 ALP应扫描每个字符串,看它是否等于''(四个空格)。如果是,则应该反转此四个空格后面的所有字符串,直到遇到下一个四个空格的字符串。您可以假设数组中的空字符串不会超过2个。 对于例如如果字符串集是 '数学','有','','埋葬','我','用餐','','地狱','深','树' ALP应将其更改为 '数学','有','','yrub','enim','enid','','地狱','深','树' 您必须使用单个指令来反转字符串。

我写了一个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

但是,只有少数几个字符串被反转,所有这些都被颠倒了。请帮我调试一下。

1 个答案:

答案 0 :(得分:1)

dd 'math'会将'math'视为32位整数,其中'm'是最重要的字节,而'h'是最不重要的(即就像你写过dd 6874616Dh)。

如果您希望首先用最左边的字节写出字节,您只需将dd替换为db即可。另一种选择是向后写字符串(即'htam'等)。