装配环路错误

时间:2018-03-30 02:43:34

标签: assembly masm

我正在尝试在程序集(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>

2 个答案:

答案 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)

两个问题:

  1. 您将bl分配给cl,而不清除ch部分,最好使用movzx cx, bl

  2. 之类的内容
  3. 您没有更改cx,在比较之前,在dec cx之前添加cmp cx, 0

  4. 只是建议:您不需要使用jmp againjmp done