Linux 使用NASM系统调用将十六进制打印为ascii
所以我想通过系统调用打印出存储在地址中的ascii值。 假设我想用十六进制打印字母Linux 使用NASM系统调用将十六进制打印为ascii,linux,assembly,x86,nasm,system-calls,Linux,Assembly,X86,Nasm,System Calls,所以我想通过系统调用打印出存储在地址中的ascii值。 假设我想用十六进制打印字母Z,这是0x5a,那么假设在我的序言中有一个指针ptr指向数组的一个元素,我通过以下方式将地址处的值转移到cl: mov edx, ptr mov cl, [edx] 现在让我们假设值0x5a在cl中,如何将其打印到标准输出?我尝试过(其他很多事情): 这张照片什么都没有,我做错什么了?是否需要在.data/.bss中声明某些内容? 我想让它打印Z 谢谢 编辑: 因此,我可以通过在.data中声明来打印Z: nu
Z
,这是0x5a
,那么假设在我的序言中有一个指针ptr
指向数组的一个元素,我通过以下方式将地址处的值转移到cl
:
mov edx, ptr
mov cl, [edx]
现在让我们假设值0x5a
在cl
中,如何将其打印到标准输出?我尝试过(其他很多事情):
这张照片什么都没有,我做错什么了?是否需要在.data/.bss中声明某些内容?
我想让它打印Z
谢谢
编辑:
因此,我可以通过在.data
中声明来打印Z
:
num db 90
然后在系统调用中使用
mov ecx,num
。但是,如何获取寄存器中的十六进制值并执行相同的操作?系统调用只获取指向要打印的数据的指针。因此,使用mov ecx,ptr
将ptr
的地址移动到ecx,然后告诉它打印一个字符,这样EDX应该是1。如果您在寄存器中有一个字符并想显示它,则必须将其写入内存位置(缓冲区)甚至堆栈上,然后在ECX中将该缓冲区的地址传递给sys_write系统调用。@MichaelPetch感谢它起作用:)相关:系统调用只使用指向要打印的数据的指针。因此,使用mov ecx,ptr
将ptr
的地址移动到ecx,然后告诉它打印一个字符,这样EDX应该是1。如果您在寄存器中有一个字符并想显示它,则必须将其写入内存位置(缓冲区)甚至堆栈上,然后将ECX中该缓冲区的地址传递给sys_write system call。@MichaelPetch感谢它起作用:)相关:
num db 90