C 如何处理寄存器的返回值

C 如何处理寄存器的返回值,c,assembly,x86,operating-system,x86-64,C,Assembly,X86,Operating System,X86 64,我目前正在为一门大学课程开发一个简单的内核,其中要求我实现一个输出所有寄存器值的函数。到目前为止,我已经写了以下内容: push rbp mov rbp, rsp pushState push rsi push rdi push rdx mov rcx, 5 mov rdx, raxMsg mov rsi, 1 mov rdi, 1 call sysCallDispatcher mov rcx

我目前正在为一门大学课程开发一个简单的内核,其中要求我实现一个输出所有寄存器值的函数。到目前为止,我已经写了以下内容:

    push rbp
    mov rbp, rsp
    pushState

    push rsi
    push rdi
    push rdx


    mov rcx, 5
    mov rdx, raxMsg
    mov rsi, 1
    mov rdi, 1
    call sysCallDispatcher

    mov rcx, 16
    mov rdx, [rax]
    mov rsi, 1
    mov rdi, 1
    call sysCallDispatcher

    pop rdx
    pop rdi
    pop rsi

    popState
    leave
    ret
这只是RAX寄存器的一个示例(raxMsg定义为“RAX:”,sysCallDispatcher管理syscall以输出write syscall)。 我的问题是:当我加载RAX中的内容时,rdx中存储的是什么类型的变量?我必须转换成字符串的是int吗?
谢谢。

mov rdx,[rax]
加载从存储在
rax
中的地址开始的8个字节,解释为一个小的尾端四字“Type”是一个高级语言概念。寄存器只有位。它们代表什么是如何使用的问题。函数sysCallDispatcher()可能希望DX中包含某些内容--请查看其文档。如果系统调用返回RAX中的指针,这是有意义的。否则,如果要打印原始RAX值,则需要在第一次系统调用时推/弹出它。是的,除非你有一个“系统调用”可以将数字格式化成字符串,否则你必须自己去做。显示了算法和执行此操作的x86-64代码,包括Linux
write
系统调用。