NoneX 86 - это архитектура, производная от процессора Intel 8086. Семейство x86 включает 32-битные архитектуры IA-32 и 64-битные x86-64, а также унаследованные 16-битные архитектуры. Вопросы о последнем должны быть помечены тегами [x86-16] и / или [emu8086]. Используйте тег [x86-64], если ваш вопрос касается 64-битных x86-64. Для FPU x86 используйте тег [x87]. Для SSE1/2/3/4 / AVX* также используйте [sse] и любой из [avx] / [avx2] / [avx512], которые применяются
0 ответов

Инструкция QEMU RDRAND не поддерживается

Я пытаюсь запустить собственное ядро ​​в qemu-system-x86_64, Это ядро ​​требует использования rdrand инструкция в начале цикла загрузки и не сможет загрузиться, если она не поддерживается процессором. Я прочитал в ответе на этот вопрос, что rdrand т…
12 фев '16 в 00:48
2 ответа

Понимание операндов x86 m* (FPU и других)

Я пытаюсь сделать простой дизассемблер x86 (пока 32-битный) для учебных целей. Таким образом, документы Intel идут: Но я нахожу это очень запутанным. Прежде всего, операнды m8-32, кажется, указывают либо ES:(E)DI или же DS:(E)SI,Но нельзя сказать, в…
11 апр '18 в 03:44
0 ответов

Обнаружение неверных разделов ресурса в PE файлах

Я пытаюсь выполнить определенные вычисления, используя ресурсы в файле PE. Для этого я следую за этими шагами: Получить RVA раздела ресурсов из шапки PEHeader.DataDirectory[IMAGE_DIRECTORY_ENTRY_RESOURCE].VirtualAddress Преобразовать вышеуказанный R…
05 июн '18 в 17:50
1 ответ

Ограничения реального режима в части разработки драйверов устройств

Мой запрос касается разработки драйвера устройства. Если я хочу использовать реальный режим для создания игрушечной ОС, но решаю написать сетевой стек / набор сетевых драйверов, достаточно ли места для этого? Должен ли я сделать как DOS и перейти в …
28 май '15 в 19:01
2 ответа

Вывод мусора из программы на ассемблере x86

У меня проблема с небольшой программой на ассемблере. Эта программа принимает ввод и преобразует его в верхний или нижний регистр. Он правильно конвертируется, но выводит мусор, и я не знаю почему. .model small .stack 64 .data data1 Db 15 dup(?),'$'…
08 май '14 в 19:10
2 ответа

Напечатать половину пирамиды чисел в сборке

Я должен написать программу на ассемблере, которая читает число и печатает полупирамиду чисел. то есть: читать 4 Распечатать 1 1 2 1 2 3 1 2 3 4 Я понял, как читать числа, как использовать цикл для печати по одному символу на строку, но я должен исп…
15 янв '17 в 11:27
1 ответ

Печать символов на экране ASM в защищенном режиме

Я пытаюсь войти в защищенный режим и затем распечатать "Привет" Но вместо этого он просто печатает "Загрузка ОС" из моего вызова прерывания BIOS (который произошел до ввода pmode) И ничего больше. Мой Bootloader.asm %DEFINE KERNEL_LOAD_OFFSET 0x1000…
02 ноя '16 в 13:49
1 ответ

Как загрузить байты в __m128i в определенной позиции

Мне нужно загрузить 4 байта, хранящихся последовательно в массиве, в определенной позиции переменной __m128i, а именно, чтобы иметь возможность делать много сумм int32_t, по 4 за раз, сохраняя все частичные результаты. Например: const unsigned int S…
16 окт '13 в 22:48
1 ответ

Сравнение сборки x86 с массивом с нулевым символом в конце

Я работаю над функцией в сборке, где мне нужно посчитать символы в массиве с нулевым символом в конце. Я использую визуальную студию. Массив был создан на C++, и адрес памяти передается моей ассемблерной функции. Проблема в том, что мой цикл не зака…
30 окт '13 в 19:43
0 ответов

Являются ли функции ядра / инструкции x86 outw и inw атомарными при доступе к ISA/LPC?

ТЛ; др Являются ли функции ядра Linux outw() и inw() атомарными при доступе к ISA/LPC на x86 в многоядерной системе, учитывая, что на уровне HW он должен состоять из четырех отдельных 8-битных транзакций? В качестве эквивалентного вопроса, поскольку…
28 сен '16 в 23:52
4 ответа

Чтение-запись потокобезопасного интеллектуального указателя в C++, x86-64

Я разрабатываю некоторую структуру данных без блокировки, и возникает следующая проблема. У меня есть поток писателя, который создает объекты в куче и оборачивает их в смарт-указатель со счетчиком ссылок. У меня также есть много читательских тем, ко…
04 ноя '11 в 09:30
0 ответов

Почему доступ к памяти на x86 будет медленнее при выравнивании по первым 4 байтам строки кэша?

При написании сообщения в блоге о невыровненном / выровненном прямом доступе к памяти я столкнулся с результатом, который я изо всех сил пытаюсь объяснить: если мой доступ к памяти выровнен по первым 4 байтам, я вижу ощутимую разницу в производитель…
17 янв '13 в 12:06
1 ответ

x86 asm - 12 байт, вычтенных из esp. Нужно всего 8

Я скомпилировал этот код с помощью gcc (gcc -ggdb -mpreferred-stack-border =2 -o demo demo.c) и декомпилировал его, чтобы посмотреть на сборку (я знаю, что он использует небезопасные функции, это было для упражнения в буфер переполнение): #include&l…
09 июн '15 в 04:25
3 ответа

Как работают временные инструкции?

Я читаю то, что каждый программист должен знать о памяти pdf Ульриха Дреппера. В начале части 6 есть фрагмент кода: #include <emmintrin.h> void setbytes(char *p, int c) { __m128i i = _mm_set_epi8(c, c, c, c, c, c, c, c, c, c, c, c, c, c, c, c)…
31 дек '12 в 22:16
1 ответ

Суммируйте числа в буфере, используя встроенную сборку в C++

Я новичок в программировании на ассемблере и столкнулся с проблемой, которая может быть очевидна для опытных пользователей на ассемблере. У меня есть 100-байтовый буфер, и мне нужно найти сумму каждого n-го байта для n = 1 до 5 и сохранить результат…
07 окт '14 в 13:12
2 ответа

Нахождение нулевого указателя после переменных среды

Я читаю книгу (пошаговый язык ассемблера, программирование под Linux Джеффа Дюнтманна) и пытаюсь изменить эту программу, в которой отображаются аргументы, вместо того, чтобы показывать переменные среды. Я пытаюсь использовать только то, чему учили д…
13 ноя '13 в 20:39
4 ответа

Почему Linux на x86 использует разные сегменты для пользовательских процессов и ядра?

Итак, я знаю, что Linux использует четыре сегмента по умолчанию для процессора x86 (код ядра, данные ядра, код пользователя, данные пользователя), но все они имеют одинаковую базу и предел (0x00000000 и 0xfffff), то есть каждый сегмент отображается …
01 янв '11 в 18:01
1 ответ

Что означает инструкция x86-64 "shrb %dil"?

Я знаю это shrb обозначает логическое смещение вправо. Обычно это используется с двумя аргументами, shrb amount, %register, Тем не менее, в коде, который я смотрю, он не использует величину сдвига - там указан только регистр: shrb %dil где %dil обоз…
30 янв '17 в 18:02
0 ответов

Невозможно связать 32-битный файл.asm в 64-битном режиме в Kali Linux.

Я использую ассемблер в Kali Linux Команда -> nasm -felf64 -g test.asm Компилирует.asm нормально, и я могу связать его, используя -> ld -g test.o И это нормально работает с -> ./a.out Однако я хочу использовать ключевые слова "push" и "pop", но там …
12 янв '18 в 01:42
10 ответов

Разделить и получить остаток одновременно?

По-видимому, x86 (и, вероятно, множество других наборов инструкций) помещают как частное, так и остаток операции деления в отдельные регистры. Теперь мы, вероятно, можем доверять компиляторам для оптимизации кода, такого как этот, чтобы использовать…
09 окт '10 в 00:03