如何使用x86程序集打印空白区域?

时间:2017-10-22 19:59:46

标签: visual-studio assembly x86

我是x86程序集的新手。 我的输出目前看起来像这样:

1|*
2|** ...
8|********
9|*********
10|**********
11|***********

我希望在1-9中有一个空格,以便它形成一条直线。像这样:

 9|
10|
11|

我不知道怎么做。我想也许可以使用printChar(我希望它在x86程序集中)

我打印星星和线条的代码:

beginLoop:   dec numItems
         push numItems
         call printInt //Prints 'numItems' number

         mov al,'|'
         push al
         call printChar //Prints bar line next to number  

  starLoop:    mov al, '*'
               push al
               call printChar //Prints a single star

         mov [numStars], 0 
         inc numStars  //numStars increases by 1
         mov ecx, [esi] //ebx knows inputted value 
         cmp [numStars], ecx //numStars must equal value inputted 
         jne starLoop

nextValue : call printNewLine
            add esi, 4 //Move to next number
            cmp[esi], [items]
            jne beginLoop

1 个答案:

答案 0 :(得分:0)

您的代码现在将具有以下内容:

mov     eax, [number]
call    YourPrintRoutine

要在这些数字上引入右对齐,请将数字与10进行比较,并且仅当数字小于10时才首先打印单个空格字符。

    mov     eax, [number]
    push    eax
    cmp     eax, 10
    jnb     NotBelow10
    push    " "
    call    PrintChar
NotBelow10:
    call    PrintInt

您确定这是产生上述结果的代码吗?

  • starLoop 的中间mov [numStars], 0,它可以显示正确数量的星星,这是一个奇迹!
  • dec numItems减少一个值时,你会在屏幕上看到一个递增的数字序列,这很奇怪!