assembly- все статьи тега
Быстрое разделение на GCC / ARM
Насколько мне известно, большинство компиляторов делают быстрое деление путем умножения, а затем смещения бита вправо. Например, если вы проверяете этот поток SO, он говорит, что когда вы попросите компилятор Microsoft выполнить деление на 10, он умножит дивиденд на 0x1999999A (что составляет 2^32/10), а затем разделит результат на 2^32 (используя 32 сдвига вправо). Пока все хорошо. Как только я протестировал то же самое деление на 10 на ARM, используя GCC, компилятор сделал что-то немного ра ...
Как установить align 64 в ml64.отлично?
Каков простейший способ задать align 64 для некоторого кода функции ассемблера с помощью ml64.exe? Выравнивание по умолчанию для _TEXT равно 16, поэтому ml64 не позволяет установить больше 16 в команде align. И ml64 не позволяет изменить выравнивание для _TEXT. Можно создать еще один раздел / сегмент, но можем ли мы получить 64 byte выравнивание в основном разделе _TEXT? Есть ли какое-нибудь решение? С. П. Решение, предложенное в ответе с _TEXT$FOO работает! _TEXT$FOO SEGMENT ALIGN(64) align ...
Почему опция '-- oformat binary ' компоновщика gnu помещает `.сегмент данных на 0x0200000
Я писал какой-то" свободный " код для реального режима i386 и наткнулся на некоторые странные ошибки, когда PXE netbooting мой код: PXE-E79: NBP is too big to fit in free base memory PXE-M0F: Exiting Intel Boot Agent. После долгой возни с моими двоичными файлами я выделил его как имеющий любые данные или код после .data Маркер сегмента. После hexdumping я обнаружил, что ld переместил инструкции полностью в 0x0200000 из всех мест. В данный момент я генерирую свою плоскую корзину с: ld ...
Дальний прыжок в ГДТ в загрузчика
flush_gdt: lgdt [gdtr] jmp 0x08:complete_flush complete_flush: mov ax, 0x10 mov ds, ax mov es, ax mov fs, ax mov gs, ax mov ss, ax ret Я не могу понять, что делает этот код . flush_gdt - это метка, затем lgdt [gdtr] загружает указатель 48-bit в регистр gdtr, а затем из jmp 0x08:complet_flush. Что делает инструкция jmp ? и тогда почему мы перемещаем 0x10 в ax, а затем в другие регистры ...
Visual Studio 2017: mm load ps часто компилируется в movups
Я смотрю на сгенерированную сборку для моего кода (используя Visual Studio 2017) и заметил, что _mm_load_ps часто (всегда?) компилируется в movups. Данные, которые я использую _mm_load_ps, определяются следующим образом: struct alignas(16) Vector { float v[4]; } // often embedded in other structs like this struct AABB { Vector min; Vector max; bool intersection(/* parameters */) const; } Теперь, когда я использую эту конструкцию, произойдет следующее: // this code __mm12 ...
x86 Intel Assembler LEA
Глядя на следующий код: (ebp-0x8 - > int) (ebp-0x4 - > int*) => 0x80483f3 <main+6>: mov DWORD PTR [ebp-0x8],0x0 0x80483fa <main+13>: mov DWORD PTR [ebp-0x4],0x0 0x8048401 <main+20>: mov DWORD PTR [ebp-0x8],0xa 0x8048408 <main+27>: lea eax,[ebp-0x8] 0x804840b <main+30>: mov DWORD PTR [ebp-0x4],eax 0x804840e <main+33>: mov eax,0x0 0x8048413 <main+38>: leave 0x8048414 <main+39>: ret Действит ...
преобразование ASM в C (не обратный инженер)
Я погуглил и увидел удивительное количество легкомысленных ответов, в основном смеющихся над Аскером за то, что он задал такой вопрос. Микрочип предоставляет некоторый исходный код бесплатно (я не хочу публиковать его здесь, если это нет-нет. В основном, google AN937, нажмите на первую ссылку, и там есть ссылка на "исходный код" и его сжатый файл). Он в ASM, и когда я смотрю на него, я начинаю косить глазами. Я хотел бы преобразовать его в нечто, напоминающее язык типа c, чтобы я мог следова ...
Как установить только флаг переполнения ARM сборки?
Я возился с флагами, изучая сборку ARM на моем Raspberry PI. Я изобрел способы только установить нулевой флаг, только отрицательный и только флаг переноса. Однако я не могу придумать способ установить только флаг переполнения. Возможно ли это? Любая помощь будет оценена по достоинству! Edit: только установка флага переполнения со всеми остальными zero / clear. Используя только арифметику или сдвиг. NZCV = 0001 Edit2: чтобы уточнить дальше, я бы подумал, что несколько для этого потребуются инс ...
Запись в EEPROM на PIC
Есть ли здесь программисты микроконтроллеров PIC? Я изучаю программирование микроконтроллеров PIC с использованием pickit2 и чипа 16F690, который поставляется вместе с ним. В данный момент я работаю над опробованием различных средств. Я могу успешно прочитать байт из EEPROM в коде, если я установлю EEPROM vaklue в MPLAB, но я, кажется, не в состоянии изменить значение, используя сам PIC. Просто ничего не происходит, и я не читаю обратно измененное значение, я всегда получаю оригинал, который п ...
Зачем нужны целевые буферы ветвей для нерегистрационных инструкций перехода?
Для конвейера этапа MIPS 5 цель ветвления известна на этапе декодирования, потому что ее можно легко извлечь, если смещение ветвления находится в инструкции, а также Вы читаете регистры на этапе декодирования. Таким образом, для неупорядоченного конвейера вы, очевидно, столкнетесь с проблемой с инструкциями типа 'jr', которые могут использовать регистр, который еще не был вычислен. Для таких применений существует четкое использование целевого буфера ветви. Но для инструкции как и "beq", я вижу ...
Является ли язык ассемблера "ассемблером" тоже специфичным? Какой ассемблер лучше?
Я изучаю язык ассемблера. Я начал с Paul A. Carter PC Assembly Language, который использует NASM (сетевой ассемблер). Затем в середине я переключился и начал читать Introduction to 80×86 Assembly Language and Computer Architecture, который использует MASM. В NASM я использовал для записи, для инициализации байта Db 110101b В MASM я использую Байт 110101b Я как раз читаю. Поскольку это директивы ассемблера, они будут различны для каждого ассемблера. так ведь? Разве это не так раз ...
Микроконтроллер pic 16F684 прерываем обработку
Я только что закончил свой курс микропроцессоров в колледже всего несколько недель назад, там мы программировали только в сборке. Мы узнали довольно много (ИМХО) о прерываниях. Вот мой вопрос: я программирую на C, используя компилятор HiTech для 16F684, в разделе таблицы данных, обсуждающем прерывания (PIC 16F684 Datasheet Раздел 12.4), говорится, что программа перейдет к вектору прерываний 0x0004. Используя сборку в моем классе микропроцессоров, мы бы просто настройте оператор. org, указыва ...
Есть ли какая-нибудь книга по ассемблеру для ARM с GNU assembler? [закрытый]
Я хотел бы знать, есть ли какая-либо книга по программированию сборки ARM со ссылкой на GNU assembler. ...
На C++/сборка интегрированной среды разработки в Linux
То, что я ищу, - это IDE, которая будет работать на Linux, которая имеет поддержку подсветки синтаксиса сборки C++ и x86. Я уже пробовал Code:: Blocks, но это не позволяет мне запустить программу так, как мне нужно, поэтому это не сработало хорошо. Мои потребности: возможность компилировать программы, выдавая команду "make all" в определенном каталоге возможность запускать программы, выдавая пользовательскую команду вместо запуска определенного исполняемого файла графический (не vim / emac ...
Какие части этого ассемблерного кода HelloWorld необходимы, если я пишу программу в ассемблере?
У меня есть такая короткая программа hello world: #include <stdio.h> static const char* msg = "Hello world"; int main(){ printf("%sn", msg); return 0; } Я скомпилировал его в следующий ассемблерный код с помощью gcc: .file "hello_world.c" .section .rodata .LC0: .string "Hello world" .data .align 4 .type msg, @object .size msg, 4 msg: .long .LC0 .text .globl main .type main, @function main: .LFB0: .cfi_startproc ...
Сборка (или NASM) досадная проблема
Раньше я компилировал свой asm-код с помощью TASM (на winXP), но у меня были некоторые проблемы, поэтому теперь я использую NASM (на linux). Этот фрагмент показывает, что я пытаюсь сделать: (gdb) list 35 30 xor ecx,ecx # ecx is a counter 31 mov bl, ' ' # this is what I'm looking for 32 count_spaces: 33 mov al,[esi] # grab a char 34 jz spaces_counted # is this the end? 35 inc esi # next char 36 cmp al,bl ...
"Переключатель" быстрее ,чем "если"?
это switch сообщении на самом деле быстрее if заявление? я запустил код ниже в компиляторе Visual Studio 2010 x64 C++ с помощью /Ox флаг: #include <stdlib.h> #include <stdio.h> #include <time.h> #define MAX_COUNT (1 << 29) size_t counter = 0; size_t testSwitch() { clock_t start = clock(); size_t i; for (i = 0; i < MAX_COUNT; i++) { switch (counter % 4 + 1) { case 1: counter += 4; break; case 2: counter += 3; b ...
Что такое ретполин и как он работает?
для того, чтобы смягчить против ядра или кросс-процесс раскрытия памяти (Spectre атаки), ядро Linux1 будет скомпилирован с новой опцией,-mindirect-branch=thunk-extern представил gcc для выполнения косвенных вызовов через так называемый retpoline. это, кажется, недавно изобретенный термин, как поиск Google оказывается только очень недавнее использование (как правило, все в 2018 году). что такое ретполин и как это происходит это предотвратит недавние атаки на раскрытие информации ядра? 1 это н ...
Что такое базовый указатель и указатель стека? На что они указывают?
используя исходя из Википедии, в которой DrawSquare () вызывает DrawLine (), (обратите внимание, что эта диаграмма имеет высокие адреса внизу и низкие адреса вверху.) может ли кто-нибудь объяснить мне, что ebp и esp в этом контексте? из того, что я вижу, я бы сказал, что указатель стека всегда указывает на верхнюю часть стека, а базовый указатель на начало текущей функции? Или что? edit: я имею в виду это в контексте программ windows edit2: а как же eip работы тоже? edit3: у меня есть ...
Как вы используете gcc для создания ассемблерного кода в синтаксисе Intel?
на gcc -S опция будет генерировать ассемблерный код в синтаксисе AT&T, есть ли способ генерировать файлы в синтаксисе Intel? Или есть способ конвертировать между ними? ...