【问题标题】:Why are all strings getting reversed?为什么所有的字符串都被颠倒了?
【发布时间】:2018-02-19 17:03:09
【问题描述】:

以下是我今天测试的问题-

编写将检查一组字符串的 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

但不是只有少数字符串被反转,而是所有字符串都被反转。请帮我调试一下。

【问题讨论】:

    标签: masm masm32 microprocessors


    【解决方案1】:

    dd 'math' 导致 'math' 被视为 32 位整数,其中 'm' 是最高有效字节,'h' 是最低有效字节(即就像您编写了 dd 6874616Dh 一样)。

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

    【讨论】:

    • 知道了。谢谢!!
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-11-21
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-09-05
    相关资源
    最近更新 更多