如何使用NASM在Linux终端上使用文本字符画圆?

问题描述 投票:0回答:1

我是一名大学生,我不知道如何画圆形或矩形。我在终端窗口中打印文本,而不是使用线条,因此从技术上讲,它看起来像一个由

*
字符制成的圆圈。

我不能使用Python或预先制作形状。我需要使用 NASM 计算星星绕圆的位置,并绘制它们。

这是在终端上打印一个

*
的示例:

;print a star (asterisk)
section .data
star db '*', 0xA, 0

section .bss
;uninitialized variable

section .text
global _start
_start:
mov eax, 4    ; system call for print
mov ebx, 1    ; standard output
mov ecx, star ; memory location
mov edx, 2    ; length
int 0x80

mov eax, 1    ; system call for exit
mov ebx, 0    ; exit
int 0x80

如何将星星打印成整圆的形状?

linux assembly x86 nasm draw
1个回答
0
投票

由于您显然已经知道如何产生输出,可以使用

.data
并区分内存和值操作数,所以这个问题似乎与过程有关。

  1. 使用您选择的高级编程语言完成任务。 既然你提到了,我猜你精通Python; Python 似乎很合适。

    这一步只是为了确保您设计的算法能够实现任务。 在汇编中直接编辑和修改算法是可能的,但需要更长的时间(并且可能会让初学者感到沮丧)。

    完成后,创建修订版(

    git commit
    或您喜欢的任何源代码修订系统),但这是可选的。

  2. 使用内联汇编翻译算法中可能困难的部分。 如果您选择了允许轻松内联使用汇编的编程语言,请使用此功能作为中间步骤。

    所谓“舒适使用”,我的意思是,例如,您可以使用已经声明的高级编程语言标识符,或者编译器会抱怨数据大小不匹配(例如,将 64 位变量加载到 32 位寄存器↯),除非被覆盖。 您可能会注意到,某些高级语言结构并不像您希望的那样直接转换为汇编。 有了这些知识,您就可以返回第一步并简化算法。 确保简化后一切仍然正常工作,然后再次关注装配实现。

    一旦您对程序感到满意,请创建新的源代码修订版。 您可能不小心引入了一些(新的)编程错误(“bug”),因此参考功能版本可能会派上用场。

  3. 最后,将
  4. 整个程序翻译为汇编语言

    。 从样板程序开始,一点一点地添加代码。 例如,首先在屏幕上的特定“常量”位置打印一个星号,然后将代码推广到在“变量”位置打印星号。 这使您可以区分一次/如果您遇到错误,什么有效什么无效 备注:

Peter已经提到了编辑缓冲区的方法

。 另一种更复杂的方法是发出可识别的

© www.soinside.com 2019 - 2024. All rights reserved.