我正在尝试在程序集(masm)中编写一个接受用户输入的程序,程序将输出从0开始到该输入的计数(介于0到99之间)。我遇到的错误是,无论我输入什么数字,程序循环到似乎是一个随机数,然后终止。任何帮助将非常感激!
<link rel="stylesheet" href="https://maxcdn.bootstrapcdn.com/bootstrap/4.0.0/css/bootstrap.min.css" integrity="sha384-Gn5384xqQ1aoWXA+058RXPxPg6fy4IWvTNh0E263XmFcJlSAwiGgFAW/dAiS6JXm" crossorigin="anonymous">
<script src="https://code.jquery.com/jquery-3.2.1.slim.min.js" integrity="sha384-KJ3o2DKtIkvYIK3UENzmM7KCkRr/rE9/Qpg6aAZGJwFDMVNA/GpGFF93hXpG5KkN" crossorigin="anonymous"></script>
<script src="https://cdnjs.cloudflare.com/ajax/libs/popper.js/1.12.9/umd/popper.min.js" integrity="sha384-ApNbgh9B+Y1QKtv3Rn7W3mgPxhU9K/ScQsAP7hUibX39j7fakFPskvXusvfa0b4Q" crossorigin="anonymous"></script>
<script src="https://maxcdn.bootstrapcdn.com/bootstrap/4.0.0/js/bootstrap.min.js" integrity="sha384-JZR6Spejh4U02d8jOt6vLEHfe/JQGiRRSQQxSfFWpi1MquVdAyjUar5+76PVCmYl" crossorigin="anonymous"></script>
<link href="https://use.fontawesome.com/releases/v5.0.4/css/all.css" rel="stylesheet"/>
<div class="container-fluid h-100">
<div class="row h-100">
<div class="col d-md-flex bg-light h-100 p-0" id="sidebar">
<ul class="nav flex-column flex-nowrap">
<li class="nav-item">
<a class="nav-link" href="#">
<i class="fas fa-cog"></i>
<span class="badge badge-dark">4</span>
</a>
</li>
<li class="nav-item">
<a class="nav-link" href="#">
<i class="fas fa-chart-line"></i>
<span>Analytics</span></a>
</li>
<li class="nav-item">
<a class="nav-link" href="#">
<i class="fas fa-random"></i>
<span>Export</span>
</a>
</li>
</ul>
</div>
<div class="col pt-2">
<div class="row">
<div class="col-12 pt-2" style="background:coral;">
</div>
</div>
<div class="row">
<div class="col-12">
fakdfkaf
</div>
</div>
</div>
</div>
</div>
答案 0 :(得分:1)
loopne
指令使用CX
寄存器,您只初始化CL
寄存器,它是CX
的低字节。如果您坚持使用loopne
,请清除CH
的高字节CX
。
当然解决方案更简单
保持修改文本计数器的逻辑与主循环的逻辑无关。最糟糕的情况是,文本计数器将一次性增加。
在CX
中移动用户输入的值也没有任何好处。您可以从BL
开始,甚至更好地使用它。
add bl, al ;BL has user input 00..99
again:
mov ah, 09
mov dx, offset Hello
int 21h
mov dx, offset msg1
int 21h
mov dx, offset msg
int 21h
; This is the textual counter update
inc byte ptr msg ;Raise the ones
mov al, msg
cmp al, "9"
jbe SameDecade
mov byte ptr msg, "0" ;Reset the ones
inc byte ptr msg1 ;Raise the tens
SameDecade:
; This is the main loop counter update
sub bl, 1
jnb again
mov ax, 4C00h ;DOS.TerminateWithExitcode
int 21h
答案 1 :(得分:0)
两个问题:
您将bl
分配给cl
,而不清除ch
部分,最好使用movzx cx, bl
您没有更改cx,在比较之前,在dec cx
之前添加cmp cx, 0
只是建议:您不需要使用jmp again
或jmp done