连接寄存器中的字符串并打印(CPUID)

时间:2018-10-21 04:22:44

标签: string assembly x86 nasm cpuid

开始学习NASM组装,我在Stack Overflow的此处查看了一些组装问题,并在此处找到了以下问题: Concatenating strings from registers and printing them

  

我相信这个问题不会重复,因为我正试图   在NASM中复制代码,而且在   另一个问题。

我决定在NASM中复制此代码,但我不太了解所涉及的MASM代码。
我了解了CPUID,并做了一些测试程序。

我想知道如何连接寄存器,然后使用NASM在屏幕上打印它们。

我想打印'ebx'+'edx'+'ecx',因为what I see in GDBCPUID输出的组织方式。

我用CPUIDeax=1

1 个答案:

答案 0 :(得分:3)

“字符串”不是一个非常精确的术语。 CPUID / EAX = 0的供应商标识字符串仅包含12个ASCII字符,打包在3个DWORD寄存器中。没有像C中那样的终止符,也没有像PASCAL中那样的长度信息。但是它始终是相同的寄存器,并且始终是3 * 4 = 12字节。这是write-syscall的理想选择:

section .bss

    buff resb 12

section .text
global _start

_start:

    mov eax, 0
    cpuid

    mov dword [buff+0], ebx     ; Fill the first four bytes
    mov dword [buff+4], edx     ; Fill the second four bytes
    mov dword [buff+8], ecx     ; Fill the third four bytes


    mov eax, 4                  ; SYSCALL write
    mov ebx, 1                  ; File descriptor = STDOUT
    mov ecx, buff               ; Pointer to ASCII string
    mov edx, 12                 ; Count of bytes to send
    int 0x80                    ; Call Linux kernel

    mov eax, 1                  ; SYSCALL exit
    mov ebx, 0                  ; Exit Code
    int 80h                     ; Call Linux kernel