Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/linux/25.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Linux 使用NASM系统调用将十六进制打印为ascii_Linux_Assembly_X86_Nasm_System Calls - Fatal编程技术网

Linux 使用NASM系统调用将十六进制打印为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

所以我想通过系统调用打印出存储在地址中的ascii值。 假设我想用十六进制打印字母
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