Форум программистов, компьютерный форум, киберфорум
C/С++ под Linux
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.80/25: Рейтинг темы: голосов - 25, средняя оценка - 4.80
 Аватар для pcmax
443 / 74 / 7
Регистрация: 29.01.2018
Сообщений: 1,274

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

13.10.2019, 11:35. Показов 5593. Ответов 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): Реализация движения на 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. На борту пять. . .
Камера Toupcam IUA500KMA
Eddy_Em 12.02.2026
Т. к. у всяких "хикроботов" слишком уж мелкий пиксель, для подсмотра в ESPriF они вообще плохо годятся: уже 14 величину можно рассмотреть еле-еле лишь на экспозициях под 3 секунды (а то и больше),. . .
И ясному Солнцу
zbw 12.02.2026
И ясному Солнцу, и светлой Луне. В мире покоя нет и люди не могут жить в тишине. А жить им немного лет.
«Знание-Сила»
zbw 12.02.2026
«Знание-Сила» «Время-Деньги» «Деньги -Пуля»
SDL3 для Web (WebAssembly): Подключение Box2D v3, физика и отрисовка коллайдеров
8Observer8 12.02.2026
Содержание блога Box2D - это библиотека для 2D физики для анимаций и игр. С её помощью можно определять были ли коллизии между конкретными объектами и вызывать обработчики событий столкновения. . . .
SDL3 для Web (WebAssembly): Загрузка PNG с прозрачным фоном с помощью SDL_LoadPNG (без SDL3_image)
8Observer8 11.02.2026
Содержание блога Библиотека SDL3 содержит встроенные инструменты для базовой работы с изображениями - без использования библиотеки SDL3_image. Пошагово создадим проект для загрузки изображения. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru