有没有办法在汇编中的一行上显示一个循环?

Posted

技术标签:

【中文标题】有没有办法在汇编中的一行上显示一个循环?【英文标题】:Is there a way to display a loop all on one line in assembly? 【发布时间】:2017-03-23 04:49:32 【问题描述】:

所以我正在努力尝试让循环显示五次而不换行。具体来说,我想在一行“LoopLoopLoopLoopLoop”上显示 5 次“Loop”一词。我能够很容易地将它们显示在单独的行上,似乎它会自动自动转到新行。我对汇编语言很陌生,所以如果有人能解释这里发生了什么,那将是一个巨大的帮助。 这是我的代码:

INCLUDE Irvine32.inc
.data
myMessageOne BYTE "Loop",0dh,0ah,0
.code
main PROC
    call Clrscr
    mov edx, OFFSET myMessageOne
    mov ecx, 5
myloopOne:
    call WriteString
    loop myloopOne
    call DumpRegs
    exit

它打印出这个:

循环 循环 循环 循环 循环

但我需要:

循环循环循环循环

我尝试使用 jmp 将其移回该行,但它不起作用。我不知道太多其他命令,而我试图寻找解决方案的所有事情似乎都是人们在寻找新行的帮助,这与我需要帮助的完全相反。非常感谢任何提示和帮助,因为我想更好地了解我需要做什么。

另外,我使用的是 Microsoft Visual C++ 2010 Express。据我了解,您使用的程序在汇编中更重要。

【问题讨论】:

去掉字符串中的回车换行?将myMessageOne BYTE "Loop",0dh,0ah,0 更改为myMessageOne BYTE "Loop",0 检查 ASCII 表中是否有不可打印的字符。您可能还想检查代码的反汇编以查看 BYTE "Loop" 如何编译成内存值以及它与 ASCII 表的关系。这可能会对您了解内部发生的事情有很大帮助。 【参考方案1】:

只要 CR/LF 是字符串的一部分,它就会每次都显示出来。 删除它,并使其成为另一条消息:

INCLUDE Irvine32.inc
.data
myMessageOne BYTE "Loop",0
str_crlf     BYTE 0dh,0ah,0

.code
main PROC
    call Clrscr

; write 5 "loop"s 
    mov edx, OFFSET myMessageOne     
    mov ecx, 5
myloopOne:
    call WriteString
    loop myloopOne

; and then the newline
    mov edx, OFFSET str_crlf
    call WriteString

    call DumpRegs
    exit

【讨论】:

非常感谢!很抱歉,我花了这么长时间才回复。我昨晚发了这个,然后睡着了,忘记检查了。 其实,如果可能的话,如果你看到这个,我能再问你一件事吗? @ConorHastings 当然可以,这就是我的目的(但为什么只有我?;))...顺便说一句:“如果你看到这个”:“ping”我(与@tommylee2k)我收到你写信给我的通知 谢谢!实际上,我终于可以和我的教授谈论所有事情了。再次感谢您的帮助!

以上是关于有没有办法在汇编中的一行上显示一个循环?的主要内容,如果未能解决你的问题,请参考以下文章

有没有办法访问 SELECT 语句中的“上一行”值?

有没有办法在没有 for 循环的情况下在 numpy 中实现重复?

While 循环仅显示数据库中的第一行

汇编语言断点怎么设

为啥在 JavaScript 中显示数组元素的上限为 100,有没有办法在没有循环或 splice() 的情况下显示所有内容? [复制]

有没有办法编写一个命令来在 Google 表格中查找和显示一行的内容?