有没有办法在汇编中的一行上显示一个循环?
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)我收到你写信给我的通知 谢谢!实际上,我终于可以和我的教授谈论所有事情了。再次感谢您的帮助!以上是关于有没有办法在汇编中的一行上显示一个循环?的主要内容,如果未能解决你的问题,请参考以下文章
有没有办法在没有 for 循环的情况下在 numpy 中实现重复?
为啥在 JavaScript 中显示数组元素的上限为 100,有没有办法在没有循环或 splice() 的情况下显示所有内容? [复制]