JSRUN 用代码说话

计算字符串长度

编辑教程

计算字符串长度

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

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

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

写我们的程序

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

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

JSRUN闪电教程系统是国内最先开创的教程维护系统, 所有工程师都可以参与共同维护的闪电教程,让知识的积累变得统一完整、自成体系。 大家可以一起参与进共编,让零散的知识点帮助更多的人。
X
支付宝
9.99
无法付款,请点击这里
金额: 0
备注:
转账时请填写正确的金额和备注信息,到账由人工处理,可能需要较长时间
如有疑问请联系QQ:565830900
正在生成二维码, 此过程可能需要15秒钟