gpt4 book ai didi

assembly - 通过汇编打印十六进制数字

转载 作者:行者123 更新时间:2023-12-02 18:59:01 26 4
gpt4 key购买 nike

我正在尝试学习 NASM 汇编,但我似乎在高级语言中似乎很简单。

我使用的所有教科书都讨论了如何使用字符串——事实上,这似乎是他们最喜欢的事情之一。打印hello world、大写转小写等

但是,我试图了解如何在 NASM 程序集中递增和打印十六进制数字,但不知道如何继续。例如,如果我想以十六进制打印 #1 - n,如果不使用 C 库(我能找到的所有引用资料都使用了这些库),我该如何做到这一点?

我的主要想法是在 .data 部分中有一个变量,我将继续增加该变量。但是如何从该位置提取十六进制值呢?我似乎需要先将其转换为字符串...?

任何建议或示例代码将不胜感激。

最佳答案

首先编写一个简单的例程,它将 nybble 值 (0..15) 作为输入并输出十六进制字符 ('0'..'9','A'..'F')。

接下来编写一个例程,以字节值作为输入,然后调用上述例程两次以输出 2 个十六进制字符,即每个 nybble 一个。

最后,对于 N 字节整数,您需要一个例程来调用第二个例程 N 次,每个字节调用一次。

您可能会发现先用伪代码或 HLL(例如 C)来表达这一点很有帮助,然后考虑如何将其转换为 asm,例如

void print_nybble(uint8_t n)
{
if (n < 10) // handle '0' .. '9'
putchar(n + '0');
else // handle 'A'..'F'
putchar(n - 10 + 'A');
}

void print_byte(uint8_t n)
{
print_nybble(n >> 4); // print hi nybble
print_nybble(n & 15); // print lo nybble
}

void print_int16(uint16_t n)
{
print_byte(n >> 8); // print hi byte
print_byte(n & 255); // print lo byte
}

关于assembly - 通过汇编打印十六进制数字,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3853730/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com