NASM在线运行

版本:
运行结果
教程手册
代码仓库
极速运行
交互输入
极速运行模式,不支持键盘输入语句但是拥有更高的运行速度,输出简洁明了 。 点击编辑器上方的运行按钮即刻体验吧。
以下是用户最新保存的代码
计算字符串长度 发布于:2021-05-04 08:50 Hello, world! 发布于:2021-05-04 08:41 [更多]
显示目录

计算字符串长度



计算字符串长度

为什么我们需要计算字符串的长度?

sys_write要求我们向它传递一个指针,指向我们想要在内存中输出的字符串,以及我们想要输出的字节长度。如果要修改消息字符串,我们也必须以字节为单位更新传递给sys_write的长度,否则它将不能正确打印。

你可以通过第二课的程序了解我的意思。修改信息字符串,说“你好,美丽的新世界!”'然后编译、链接并运行新程序。输出将是'Hello, brave '(前13个字符),因为我们仍然只向sys_write传递13个字节作为其长度。当我们想要打印用户输入时,这将是特别必要的。由于我们在编译程序时不知道数据的长度,因此需要一种方法在运行时计算长度,以便成功打印出来。

写我们的程序

要计算字符串的长度,我们将使用一种称为指针算术的技术。两个初始化寄存器指向内存中相同的地址。对于输出字符串中的每个字符,一个寄存器(在本例中是EAX)将向前递增一个字节,直到到达字符串的末尾。然后从EAX中减去原始指针。这实际上类似于两个数组之间的减法,结果生成两个地址之间的元素数。然后将这个结果传递给sys_write,替换我们的硬编码计数。

CMP指令将左手边与右手边进行比较,并设置一些用于程序流的标志。我们要检查的标志是ZF或者零标志。当EAX指向的字节等于0时,就设置ZF标志。然后,如果设置了ZF标志,我们使用JZ指令跳转到程序中标记为“finished”的点。这是为了跳出nextchar循环并继续执行程序的其余部分。

由JSRUN为你提供的NASM在线运行、在线编译工具
        JSRUN提供的NASM在线运行,NASM 在线运行工具,基于linux操作系统环境提供线上编译和线上运行,具有运行快速,运行结果与常用开发、生产环境保持一致的特点。

title

使用此草稿 删除草稿

注册登录后可减少验证码的弹出,点击前往 注册 | 登录

皮肤:

运行模式:

嵌入代码 iframe嵌入: