Соединение строк из регистров и печать их (CPUID) - PullRequest
0 голосов
/ 21 октября 2018

Начав изучать сборку NASM, я посмотрел некоторые вопросы сборки здесь, в Переполнении стека, и нашел их здесь: Конкатенация строк из регистров и их печать

Я считаю,что этот вопрос не продублирован, потому что я пытаюсь повторить код в NASM, а в другом вопросе было не очень ясно.

Я решил повторить этот код в NASM , но я не совсем понял рассматриваемый код MASM.
Я узнал о CPUID и провел несколько тестовых программ.

Для того, чтобы узнать, как мы можем объединять регистры изатем распечатайте их на экране, используя NASM.

Я хочу напечатать 'ebx' + 'edx' + 'ecx', потому что именно так вывод CPUID организован по , что я вижу в GDB.

Я звонил CPUID с eax=1

1 Ответ

0 голосов
/ 21 октября 2018

«Строка» не очень точный термин.Строка идентификации поставщика CPUID / EAX = 0 содержит только 12 символов ASCII, упакованных в 3 регистра DWORD.Нет такого символа завершения, как в C, и информации о длине, как в PASCAL.Но это всегда одни и те же регистры, и это всегда 3 * 4 = 12 байтов.Это идеально подходит для системного вызова:

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
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...