Аватар для pcmax
443 / 74 / 7
Регистрация: 29.01.2018
Сообщений: 1,274

Извлечь или поместить данные в регистр процессора

13.10.2019, 11:35. Показов 5624. Ответов 18
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
привет

можете подсказать как извлечь данные которы находятся в регистре rbx? или поместить в него.

Си язык низкоуровневый. пожалуйста объясните как это сделтать
0
Programming
Эксперт
39485 / 9562 / 3019
Регистрация: 12.04.2006
Сообщений: 41,671
Блог
13.10.2019, 11:35
Ответы с готовыми решениями:

Как правильно извлечь данные из вектора и поместить в обект CStepMove
Дорого времени суток. В общем у меня такая проблемма. Есть родительский класс CStep. У него есть наследник CStepMove. Создаю вектор: ...

Поместить в регистр BX константу 100 (16). Старший байт BX переместить в регистр BL
здраствуйте помогите пож-та разобраться в задаче!написал прогу но не работает! Поместить в регистр BX константу 100(16) . Старший байт BX...

Извлечь данные из ячейки и поместить в другие ячейки
Добрый день. При импорте контактов со смартфона, программа накосячила и все поля занесла в ячейку Notes. Таких контактов около 2тысяч. ...

18
Эксперт С++
1624 / 954 / 782
Регистрация: 06.02.2016
Сообщений: 2,452
Записей в блоге: 31
13.10.2019, 14:06
Использовать ассемблерные вставки
1
 Аватар для pcmax
443 / 74 / 7
Регистрация: 29.01.2018
Сообщений: 1,274
13.10.2019, 14:18  [ТС]
Цитата Сообщение от Peoples Посмотреть сообщение
Использовать ассемблерные вставки
я понял одно,что использовать вствки в коде Си Ассемблера,это неправильно.

пишу код на Ассемблер отдельно и запускаю его из кода Си. но это тоже то еще извращение.

правильнее было бы наверное использовать Ассемблер код путем включения его
C
1
#include "assemblercode"
и дальше вызываеть го из программы Си. но у меня не получается вызывать. запускать могу а вызвать код,как функции не могу.

можете помочь советом, как это сделать?

Добавлено через 2 минуты
неправильно,потому что у меня не получается.


допустим я
C
1
2
3
4
5
6
7
8
int main{
 
int v;
 
}
 
 
ой
я могу исполнить код на Assembler но присвоить значение переменной v не могу. при компиляции выходят ошибки

Добавлено через 36 секунд
я пытался выделять память в куче, и все равно не получается
0
Эксперт С++
1624 / 954 / 782
Регистрация: 06.02.2016
Сообщений: 2,452
Записей в блоге: 31
13.10.2019, 14:33
Лучший ответ Сообщение было отмечено pcmax как решение

Решение

Чем не устраивает вариант по типу?
C
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
#include  <stdio.h>
#include <stdint.h>    // для работы с int64_t
#include <inttypes.h> // для вывода int64_t
 
int main(){
    int64_t c = 1;    //  int64_t потому что rbx 64-битный регистр
    int64_t b = 2;  
    
    printf("Before: b= %" PRId64 " c= %" PRId64, b, c);
 
    asm(".intel_syntax noprefix\n\t"  // включаем Intel синтаксис
        "mov rbx, %1\n\t" // заносим значение b в регистр rbx
        "mov %0, rbx"     // присваиваем переменной с значение, хранящееся в регистре rbx !!!Типо проверка
        :"=r"(c)          // выходной параметр               
        :"r"(b)           // входной параметр 
        : "rbx"                      
    );
    
    printf("\nAfter: b= %" PRId64 " c= %" PRId64, b, c); // Теперь с тоже равно 2
    return 0;
}
Собираем
Code
1
-Wall  -masm=intel  -std=gnu99 -O2 -o a.out source_file.c
2
 Аватар для pcmax
443 / 74 / 7
Регистрация: 29.01.2018
Сообщений: 1,274
13.10.2019, 17:14  [ТС]
спасибо огромное Вам Си программистам! к сожалению под Linux работает только Ваш вариант.
я видел деятелей,которые внаглую создавали переменную в функции main() и после в Ассемблерной вставке присваивали ей значение. это меня удивляло

Добавлено через 3 минуты
может пока Вы тут в хорошем настроении, то научите как можно было бы код написанный на Assembler Gas в отдельном файле подключить в код Си как заголовочный файл и скомпилировать это все вместе. сотворите чудо
0
Модератор
2131 / 1000 / 170
Регистрация: 23.07.2018
Сообщений: 3,349
Записей в блоге: 3
14.10.2019, 21:44
Зачем как заголовочный?
Просто компилируете и компонуете модули вместе.
Bash
1
gcc m.c e.s
1
 Аватар для pcmax
443 / 74 / 7
Регистрация: 29.01.2018
Сообщений: 1,274
15.10.2019, 11:43  [ТС]
Цитата Сообщение от politoto Посмотреть сообщение
Зачем как заголовочный?
Просто компилируете и компонуете модули вместе.

так то так, но когда я начинаю запускать исполняемы файл,то segment fault.


раз зашли то дайте совет... я хочу поместить разультаты работы программы на Gas Assembler в стек. после gcc f.c f.s я хочу извлеч этот результат из стека ,но уже в программе не Cи. как это сделать?
1
Модератор
2131 / 1000 / 170
Регистрация: 23.07.2018
Сообщений: 3,349
Записей в блоге: 3
15.10.2019, 12:10
Лучший ответ Сообщение было отмечено pcmax как решение

Решение

А что gdb показывает, где segfault?
Там, где используете внешний символ, определенный в модуле на другом языке?

Чтобы вернуть результаты, можно передать адрес в функцию, и по этому адресу записать результат.
Или, когда результаты получены, вызвать из кода gas функцию на Си и передать результат туда.
Можно обменяться данными через глобальную переменную.
1
 Аватар для pcmax
443 / 74 / 7
Регистрация: 29.01.2018
Сообщений: 1,274
15.10.2019, 12:53  [ТС]
Цитата Сообщение от politoto Посмотреть сообщение
Можно обменяться данными через глобальную переменную.

как ? у меня не получается.

Assembler
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
.global .bss
st:
.space 2
.section .text
 
global _start
_start:
 
mov $666, %rcx
mov %rcx, (st)
 
int $0x80
 
mov $1, %rax
int $0x80
C
1
2
3
4
5
6
7
8
#include <iostream>
extern int st;
 
 
int main(){
 
std::cout << st;
}
Добавлено через 3 минуты
ну и

Bash
1
2
3
4
5
gcc f1.c -c
g++ f.cpp -c
 
g++ f.o f1.o -o start
./start
0
Модератор
2131 / 1000 / 170
Регистрация: 23.07.2018
Сообщений: 3,349
Записей в блоге: 3
15.10.2019, 13:01
start создаётся?
1
 Аватар для pcmax
443 / 74 / 7
Регистрация: 29.01.2018
Сообщений: 1,274
15.10.2019, 13:06  [ТС]
это код не скопированный,он с головы. поэтому имено за этот код я не могу говорить. а вообще когда я делал это под Линукс,то да, создавался start. но когда выполняю,то ругается тонными символов на st
1
Модератор
2131 / 1000 / 170
Регистрация: 23.07.2018
Сообщений: 3,349
Записей в блоге: 3
15.10.2019, 13:17
Собирая start, Компоновщик жаловался, что не может понять, где определён символ st, верно?

Подумайте, чем отличаются символы _start и st в первом исходной колоде.
1
 Аватар для pcmax
443 / 74 / 7
Регистрация: 29.01.2018
Сообщений: 1,274
15.10.2019, 13:24  [ТС]
ну _start это точка входа в программу Gas. st- это глобальная не иницилизированная переменная , которую я пытался сделать глобальной. секция bss именно для этих целей, то есть для не инициализированных переменных. напишите уже пожалуйста что нужно исправить,чтобы сработало
0
Модератор
2131 / 1000 / 170
Регистрация: 23.07.2018
Сообщений: 3,349
Записей в блоге: 3
15.10.2019, 13:42
Как Вы знаете, компоновщик работает с объектными модулями.
В объектных модулях кроме инструкций процессора, сконструированных ассемблерами и аналогичной фазой компиляторов,
содержится другая информация, помогающая компоновщику собрать программу из объектных модулей.

В частности, в объектном модуле есть список символов, определённых в данном модуле, и список ссылок на символы, определённые в других модулях.

Приходилось ли Вам собирать программу из нескольких модулей на Си?
Какие функции и переменные можно использовать в других модулях, а какие не получится?

Как используемый Вами ассемблер позволяет программисту подсказать, информацию о каких метках нужно добавить в объектный файл, чтобы на них можно было ссылаться в других модулях, а какие нужны только для циклов, временных переменных, переходов внутри модуля?
1
 Аватар для pcmax
443 / 74 / 7
Регистрация: 29.01.2018
Сообщений: 1,274
15.10.2019, 14:43  [ТС]
да я не знаю... я не программист. сижу вот и от уныния вместе с котом пытаюсь как-то скоротать вечер.



можете если то подскажите, как собрать программу. что и в каком файле поменять. ну если не можете или не хотите, то я не обижусь. а не знаю ни Асссемблер ни Си. я просто делаю ,что придет в голову.
0
Модератор
2131 / 1000 / 170
Регистрация: 23.07.2018
Сообщений: 3,349
Записей в блоге: 3
15.10.2019, 14:58
Попробуйте сначала сделать что-нибудь подобное с двумя модулями на Си.
Потом с двумя модулями на асме.

Сравните результаты.

Так и вечер скоротаете.
1
Модератор
2131 / 1000 / 170
Регистрация: 23.07.2018
Сообщений: 3,349
Записей в блоге: 3
16.10.2019, 08:02
Лучший ответ Сообщение было отмечено pcmax как решение

Решение

Можно ещё попробовать перенести определение st в Си.
1
 Аватар для pcmax
443 / 74 / 7
Регистрация: 29.01.2018
Сообщений: 1,274
16.10.2019, 10:49  [ТС]
Цитата Сообщение от politoto Посмотреть сообщение
Можно ещё попробовать перенести определение st в Си.
напишите пожалуйста,как это сделать.... я только , к сожалению , могу понимать из премеров
0
Модератор
2131 / 1000 / 170
Регистрация: 23.07.2018
Сообщений: 3,349
Записей в блоге: 3
25.11.2019, 09:49
Удалить слово extern.
А из асмовского кода удалить строчку
Assembler
1
st:
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
inter-admin
Эксперт
29715 / 6470 / 2152
Регистрация: 06.03.2009
Сообщений: 28,500
Блог
25.11.2019, 09:49
Помогаю со студенческими работами здесь

MSSQL 2005 B2- извлечь или отредактировать данные.
Доброго дня или вечера всем. Значит у меня такая проблема: при регистрации на доске обьявлений пользователь сверху имени поставил...

Как сложить 2 массива или поместить в массив данные с 2 листов
Set sun = ThisWorkbook.Sheets(&quot;Лист1&quot;) sundata = sun.Range(sun.Cells(1, 1), sun.Cells(FinalRow, 6)) и в конец этого массива нужно...

Нужна библиотека получения контуров TrueType шрифтов или любая информация как извлечь эти данные из системы
Для CAD системы мне нужно добавить функционал получения надписей любого системного векторного шрифта с настройками (жирный, наклонный...) в...

Число А поместить в регистр Dx, а число B поместить в регистр Cx
Доброго времени суток. Помогите пожалуйста решить задачу: A=24 B=75, Число А поместить в регистр Dx, а число B поместить в регистр...

Извлечь данне с БД и поместить в переменную js
Доброе время суток коллеги, подскажите как решить такую задачу: есть База данных в которой находиться таблица users у каждого юзера ...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
19
Ответ Создать тему
Опции темы

Новые блоги и статьи
SDL3 для Web (WebAssembly): Синхронизация спрайтов SDL3 и тел Box2D
8Observer8 04.03.2026
Содержание блога Финальная демка в браузере. Итоговый код: finish-sync-physics-sprites-sdl3-c. zip На первой гифке отладочные линии отключены, а на второй включены:. . .
SDL3 для Web (WebAssembly): Идентификация объектов на Box2D v3 - использование userData и событий коллизий
8Observer8 02.03.2026
Содержание блога Финальная демка в браузере. Итоговый код: finish-collision-events-sdl3-c. zip https:/ / www. cyberforum. ru/ blog_attachment. php?attachmentid=11680&amp;d=1772460536 Одним из. . .
Реалии
Hrethgir 01.03.2026
Нет, я не закончил до сих пор симулятор. Эта задача сложнее. Не получилось уйти в плавсостав, но оно и к лучшему, возможно. Точнее получалось - но сварщиком в палубную команду, а это значит, в моём. . .
Ритм жизни
kumehtar 27.02.2026
Иногда приходится жить в ритме, где дел становится всё больше, а вовлечения в происходящее — всё меньше. Плотный график не даёт вниманию закрепиться ни на одном событии. Утро начинается с быстрых,. . .
SDL3 для Web (WebAssembly): Сборка библиотек: SDL3, Box2D, FreeType, SDL3_ttf, SDL3_mixer и SDL3_image из исходников с помощью CMake и Emscripten
8Observer8 27.02.2026
Недавно вышла версия 3. 4. 2 библиотеки SDL3. На странице официальной релиза доступны исходники, готовые DLL (для x86, x64, arm64), а также библиотеки для разработки под Android, MinGW и Visual Studio. . . .
SDL3 для Web (WebAssembly): Реализация движения на Box2D v3 - трение и коллизии с повёрнутыми стенами
8Observer8 20.02.2026
Содержание блога Box2D позволяет легко создать главного героя, который не проходит сквозь стены и перемещается с заданным трением о препятствия, которые можно располагать под углом, как верхнее. . .
Конвертировать закладки radiotray-ng в m3u-плейлист
damix 19.02.2026
Это можно сделать скриптом для PowerShell. Использование . \СonvertRadiotrayToM3U. ps1 <path_to_bookmarks. json> Рядом с файлом bookmarks. json появится файл bookmarks. m3u с результатом. # Check if. . .
Семь CDC на одном интерфейсе: 5 U[S]ARTов, 1 CAN и 1 SSI
Eddy_Em 18.02.2026
Постепенно допиливаю свою "многоинтерфейсную плату". Выглядит вот так: https:/ / www. cyberforum. ru/ blog_attachment. php?attachmentid=11617&stc=1&d=1771445347 Основана на STM32F303RBT6. На борту пять. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru