组装无限循环[家庭作业]
Posted
技术标签:
【中文标题】组装无限循环[家庭作业]【英文标题】:Assembly endless loop [HOMEWORK] 【发布时间】:2016-10-18 17:01:56 【问题描述】:我正在做一项家庭作业,我需要在屏幕上随机打印 20 行 20 个 RANDOM 字符。我对汇编语言非常陌生,不明白为什么我的循环不会结束,即使我将 ecx 设置为 20 并且每次都在递减。
目前屏幕可以正确打印随机字母,但不会停止打印。
我的代码如下:
INCLUDE Irvine32.inc
.data
buffer byte 20 dup(?) ;buffer of size 20 initialized ?
L dword 20 ;length of size 20
.code
main proc
l1:
mov ecx,L ;ecx = 20
call RandomString ;call Random String
dec ecx ;ecx --
cmp ecx,0 ;compare ecx to zero
jne l1 ;jump if not equal back to l1
call WaitMsg ;press any button to continue
exit
main endp
RandomString PROC USES eax ecx edx
mov eax,26 ;eax = 26
call RandomRange ;call RandomRange
add eax, 'A' ;eax = random number between 0 and 25 + 'A'
mov buffer,al ;buffer = random letter
mov edx, OFFSET buffer ;edx = address of buffer
call WriteString ;write string to console
ret
RandomString ENDP
end main
【问题讨论】:
【参考方案1】:你一直在重置 ecx:
l1:
mov ecx,L ;ecx = 20 <--set ecx to 20
call RandomString
dec ecx ;ecx -- <--ecx is now 19
cmp ecx,0 ;compare ecx to zero
jne l1 <-- jump to l1, and ecx becomes 20 again
您应该将mov
移到l1
标签之前:
mov ecx,L ;ecx = 20
l1:
call RandomString ;call Random String
dec ecx ;ecx --
cmp ecx,0 ;compare ecx to zero
jne l1
【讨论】:
完美!就是这样!非常感谢! @GreenFerret95 当有人提供了有意义的答案时,您应该将其标记为这样,这样当其他读者查看问题列表时,他们可以轻松识别出有答案的问题。如果还有多个答案,您选择的答案将立即显示在您的问题下方。以上是关于组装无限循环[家庭作业]的主要内容,如果未能解决你的问题,请参考以下文章
是否有可能在Java中拥有无限循环的Thread和JFrame?