Вопросы, помеченные тегом «x86»
x86 - это архитектура, производная от процессора Intel 8086. Семейство x86 включает 32-разрядную архитектуру IA-32 и 64-разрядную архитектуру x86-64, а также унаследованные 16-разрядные архитектуры. Вопросы о последнем должны быть помечены тегами [x86-16] и / или [emu8086]. Используйте тег [x86-64], если ваш вопрос относится к 64-битной x86-64. Для x86 FPU используйте тег [x87]. Для SSE1 / 2/3/4 / AVX * также используйте [sse] и любой из [avx] / [avx2] / [avx512], который применяется
30 января 2022 в 01:30
100
1
Вычесть переменную из регистра? ошибка A2022: операнды инструкции должны быть одного размера
.data
num1 word 0FEEDh
.code
main PROC
mov ecx, 0E4C7FFFDh ;ecx = 0E4C7FFFD hex
sub ecx, num1 ;;;;; error on this line
Я хочу иметь возможность вычитать переменную num1 из регистра ecx, но эта попытка дает:
ошибка A2022: операнды...
9 августа 2021 в 00:01
147
2
Не удается получить доступ к 32-битной версии в защищенном режиме
Во время разработки небольшого ядра я столкнулся со странной проблемой при загрузке процессоров приложений с использованием APIC.
Как указано в OSDev и Intel-Manual, процессор сначала переходит в реальный режим, и моя цель — заставить его работать в защищенном режиме....
8 августа 2021 в 21:30
82
1
Как зациклиться на сегменте кода размером 64 КБ в программе, которая пришивает себя к собственному хвосту, до бесконечности?
Если последовательное выполнение инструкций проходит через смещение 65535, то 8086 выберет следующий байт инструкции со смещения 0 в том же сегменте кода.
Следующая программа .COM использует этот факт и постоянно сшивает весь свой код (всего 32 байта) в свой хвост,...
7 августа 2021 в 23:55
67
1
Драйверы UEFI DXE работают в реальном режиме? Как насчет кода "кольцо -2" или "кольцо -3"?
Я задал вопрос, касающийся режима, который иногда называют кольцом -2 (Режим управления системой), который можно использовать для создания руткитов. Существует даже кандидат в руткиты, именуемый кольцом -3 (Intel Management Engine). Кроме того, есть эта презентация, в...
7 августа 2021 в 19:46
90
1
Преобразование строки цифр в целое число с помощью подпрограммы
Программа на языке ассемблера для чтения положительного целого числа (трех и более цифр) в виде строки и преобразования строки в фактическое значение целого числа.
В частности, создайте подпрограмму для чтения числа. Рассматривайте это как строку, хотя она будет...
7 августа 2021 в 11:28
44
0
Какой символ и переменная на самом деле представляют, когда я использую их в nasm? [дубликат]
Что означает строка: "d: db 'hey',0xa".
Я знаю, что d — это символ, но что он означает, когда я использую его так: «mov eax, d»? Вводить значение или адрес в eax? Что означает этот символ, когда я его использую?
Во-вторых, для записи вывода мы должны заполнить регистр...
7 августа 2021 в 07:11
48
0
Стек значений с плавающей запятой на HLA
Я пытаюсь создать функцию, которая возвращает символьное значение на основе значения с плавающей запятой, например:
|Процент | Письмо Оценка |
| 90,0–100,0 А |
| 80,0 - 89,9 Б |
| 70,0 - 79,9 С |
| 60,0 - 69,9 Д |
| Ниже 59,9 F |
Вот что у меня есть:
program...
6 августа 2021 в 05:30
74
0
Загрузчик - LBA28 в длинном режиме не работает
После входа в длинный режим из загрузчика копирование второго сектора в память с использованием LBA28 приводит к сбою ПК. Второй сектор успешно скопирован
в памяти в 32-битном режиме.
Сбой происходит при выполнении инструкции
rep insw
Есть ли отдельная инструкция...
5 августа 2021 в 14:30
75
1
Правильно ли я понимаю эту сборку?
Исходный код написан на C, и я скомпилировал его с помощью gcc 11.1 с отключенной оптимизацией (-O0). Ссылка на сборку здесь, так что вы можете увидеть ее сами.
Я аннотировал сборку тем, что, по моему мнению, происходит, и "??" для строк, в которых я не слишком...
4 августа 2021 в 20:27
54
1
Движение Segfault (%eax), %ebx на второй итерации этого цикла?
Я новичок в ассемблере и пытаюсь вывести по одному символу строки за раз, и в настоящее время у меня это получается.
.equ STDOUT,1
.equ WRITE,4
.equ EXIT,1
char_string:
.asciz "hello, world"
.text
.globl _start
_start:
movl...
4 августа 2021 в 13:38
58
2
Как заставить llvm использовать инструкцию «ИЛИ» для ускорения
У меня есть код C, который в основном сводится к следующему:
*p_Bool3 = *p_Bool1 || *p_Bool2;
где p_Bool1, p_Bool2 и p_Bool3 равны "bool *".
clang++ дает мне эту сборку для X86 с использованием O2 (O3 не имеет значения, я просто использую O2, потому что это то,...
4 августа 2021 в 01:17
68
1
Ядро C сходит с ума от чисел с плавающей запятой [закрыто]
Итак, я пишу ядро C (которое работает в защищенном режиме) и балуюсь числами с плавающей запятой. Во-первых, я написал эту программу на C, чтобы убедиться, что ничего не пойдет не так (работает на моей физической машине, а не как часть ядра), которая использовала...
3 августа 2021 в 17:02
284
2
Сборка x86. Как указатель стека отслеживает правильное расположение локальных переменных после того, как адрес возврата помещается в стек?
Сейчас я читаю CSAPP и наткнулся на эту цифру, но я кое-что не могу понять
В строке 1 указатель стека уменьшается на 16, и два 8-байтовых числа сохраняются в стеке 0 и 8 байт относительно указателя стека отдельно, но в строке 7 адрес возврата swap_add помещается в...
3 августа 2021 в 08:24
202
0
Есть ли лучшая реализация для целочисленного «mul and add» с avx? [дубликат]
Я только что узнал, как оптимизировать GEMM с помощью векторных регистров x86, и нам дали матрицы, элементы которых равны 32-bit int, и для упрощения просто пренебрегли переполнением.
Существует _mm256_fmadd_pd для двойных чисел с плавающей запятой для обновления...
3 августа 2021 в 03:52
86
1
Заставить objdump использовать суффикс размера операнда, такой как l, для каждой мнемоники, даже если она не двусмысленна?
Сегодня я узнал об использовании objdump в Linux для поиска дизассемблированного кода программ с синтаксисом At&t. При использовании objdump дизассемблированный код выглядел нормально, но в нем не было окончания «l» после мнемоники (должно быть «movl», а не «mov»)....
1 августа 2021 в 17:29
79
1
Режимы адресации и источник памяти по сравнению с местом назначения в сборке x86 MASM
Я просмотрел множество тем, касающихся этой темы, и все они запутались. Я не видел наглядного изображения ни для одного из ответов, которые могли бы мне помочь.
Я не понимаю разницы между всеми этими утверждениями:
mov eax, ebx
mov [eax],ebx
mov eax, [ebx]
Если...
1 августа 2021 в 09:31
73
1
Неожиданные результаты от деления в зависимости от того, использую ли я EAX, AX или AL
Ну, у меня есть ограниченная (ввод только однозначных слагаемых) программа суммирования, которая выводит результат суммирования с помощью хранения остатков в стеке и их печати после этого.
1 global _start
2 section .data
3 NEW_LINE db 10
4...
31 июля 2021 в 10:28
85
1
Рекомендации по чтению с USB-накопителя в реальном режиме
Я пишу свой собственный загрузчик для процессора x86, и моя цель - прочитать второй сектор (после загрузчика), который будет содержать ядро. В конце концов система загрузится с USB-накопителя. Я использую qemu для тестирования, так что в идеале он должен работать и...
31 июля 2021 в 00:10
52
1
Проверяем, равен ли результат 0 без CMP? Сборка x86 MASM [дубликат]
У меня есть следующий код:
or edx,edx (0 Or 0 would equal 0)
jz InvalidDivisor
Если я изменю код на этот:
AND edx,edx (0 and 0 would equal 0)
jz InvalidDivisor
Разве оба способа не будут работать для проверки того, что произведение равно 0?
30 июля 2021 в 17:57
56
1
OUT размером слова в байтовый регистр ввода-вывода? Установка регистра контроллера последовательности без инструкций в старом коде VGA
У меня возникли проблемы с пониманием того, как регистры контроллера последовательности устанавливаются в этом примере с некоторым старым кодом VGA:
mov dx,SC_INDEX
mov ax,0604h
out dx,ax ;disable chain4 mode
Пример взят из книги Майкла Абраша по VGA:...