Alvin Seville
 Аватар для Соколиный глаз
343 / 273 / 134
Регистрация: 25.07.2014
Сообщений: 4,537
Записей в блоге: 22

Получение доступа к регистрам

07.11.2018, 15:41. Показов 1893. Ответов 12
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Правильно ли я понимаю, что когда я пишу имя регистра или переменной, то фактически указываю на её первый (самый левый) бит самого левого байта? Например, здесь:
Code
1
mov eax, bx
Можно ли провести здесь аналогию с указателями на массивы в Си? Точнее, что указатель указывает на первый элемент массива.
0
Лучшие ответы (1)
cpp_developer
Эксперт
20123 / 5690 / 1417
Регистрация: 09.04.2010
Сообщений: 22,546
Блог
07.11.2018, 15:41
Ответы с готовыми решениями:

Присвоение адресов регистрам
Всем привет! Являюсь новичком в программировании на ассемблере, так что, надеюсь на вашу помощь) Вот есть у меня такая программа: ...

Получение доступа
Недавно лазил в маей рабочей сетке, и к сваему удивлению обнаружил что не являюся админом для некоторых компов. И тут мне пришла идея,...

Получение доступа
Вот к примеру, чтоб получить доступ из формы 1 к форме 2, нужен код: Form2 dlg = new Form2(); ...

12
 Аватар для FFPowerMan
2151 / 1230 / 508
Регистрация: 11.10.2018
Сообщений: 6,213
07.11.2018, 15:46
Цитата Сообщение от Соколиный глаз Посмотреть сообщение
Правильно ли я понимаю, что когда я пишу имя регистра или переменной, то фактически указываю на её первый (самый левый) бит самого левого байта? Например, здесь:
- вот это, думаю, так и есть. Но с указателями я бы не стал аналогию проводить, потому что там просто регистры и формат операнда просто определяет сколько байт брать из полного регистра.
1
Модератор
Эксперт по электронике
 Аватар для ФедосеевПавел
8642 / 4478 / 1668
Регистрация: 01.02.2015
Сообщений: 13,882
Записей в блоге: 11
07.11.2018, 16:31
Только регистр-регистр перемещается с расширением инструкциями movz и movx. Иначе не скомпилируется.
Эти же инструкции можно и в других случаях использовать. Просто mov eax, bx - точно ошибочно.
2
Alvin Seville
 Аватар для Соколиный глаз
343 / 273 / 134
Регистрация: 25.07.2014
Сообщений: 4,537
Записей в блоге: 22
07.11.2018, 17:40  [ТС]
ФедосеевПавел, верно ли, что если мне надо получить доступ к второму байту eax, к примеру, то я должен написать что-то вроде eax + 1? Ну, если я не прав, скажите как правильно.
0
 Аватар для Ethereal
6772 / 2740 / 385
Регистрация: 17.02.2013
Сообщений: 4,048
07.11.2018, 18:37
Доступ ко второму (считая младший байт AL первым) байту EAX это просто AH. А к третьему и четвертому байту можно добраться только сдвигая регистр EAX.
2
Модератор
Эксперт по электронике
 Аватар для ФедосеевПавел
8642 / 4478 / 1668
Регистрация: 01.02.2015
Сообщений: 13,882
Записей в блоге: 11
07.11.2018, 19:07
Или зеркально побайтно отобразив eax инструкцией bswap.
2
Alvin Seville
 Аватар для Соколиный глаз
343 / 273 / 134
Регистрация: 25.07.2014
Сообщений: 4,537
Записей в блоге: 22
07.11.2018, 20:09  [ТС]
Ethereal, то есть когда я пишу eax - подразумевается регистр как единое целое. Когда же я хочу обратиться к его части, то пользуюсь, например AH.
0
Эксперт Hardware
Эксперт Hardware
 Аватар для R71MT
6206 / 2441 / 402
Регистрация: 29.07.2014
Сообщений: 3,174
Записей в блоге: 4
07.11.2018, 20:32
Цитата Сообщение от ФедосеевПавел Посмотреть сообщение
Или зеркально побайтно отобразив eax инструкцией bswap.
так не пойдёт, поскольку bswap меняет байты местами.
т.е. 1234 превратится в 3412:
Code
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
GRDB version 1.7 Copyright (c) LADsoft
History enabled
->a
0E81:0100   mov   eax,12345678
0E81:0106   bswap eax
0E81:0109   nop
0E81:010A
->t
eax:12345678  ebx:00000000  ecx:00000000  edx:00000000  esi:00000000  edi:00000000
ebp:00000000  esp:0000FFEE  eip:00000106  eflags:000B3202  NV UP EI PL NZ NA PO NC
ds: 0E81   es:0E81   fs:0E81   gs:0E81   ss:0E81   cs:0E81
0E81:0106 66 0F C8       bswap       eax
->t
eax:78563412  ebx:00000000  ecx:00000000  edx:00000000  esi:00000000  edi:00000000
ebp:00000000  esp:0000FFEE  eip:00000109  eflags:000B3202  NV UP EI PL NZ NA PO NC
ds: 0E81   es:0E81   fs:0E81   gs:0E81   ss:0E81   cs:0E81
0E81:0109 90             nop
2
Модератор
Эксперт по электронике
 Аватар для ФедосеевПавел
8642 / 4478 / 1668
Регистрация: 01.02.2015
Сообщений: 13,882
Записей в блоге: 11
07.11.2018, 20:39
Цитата Сообщение от Ethereal Посмотреть сообщение
А к третьему и четвертому байту можно добраться только сдвигая регистр EAX.
Цитата Сообщение от ФедосеевПавел Посмотреть сообщение
Или зеркально побайтно отобразив eax инструкцией bswap.
Т.е. к третьему и четвёртому байту, на мой взгляд, можно обратиться как к AL или AH и после ror eax, 16 и после bswap eax. Вроде бы не ошибся.
1
 Аватар для Ethereal
6772 / 2740 / 385
Регистрация: 17.02.2013
Сообщений: 4,048
07.11.2018, 20:55
Цитата Сообщение от R71MT Посмотреть сообщение
так не пойдёт, поскольку bswap меняет байты местами.
xchg al,ah
bswap eax
xchg al,ah
2
3410 / 1829 / 489
Регистрация: 28.02.2015
Сообщений: 3,696
07.11.2018, 22:34
Лучший ответ Сообщение было отмечено Mikl___ как решение

Решение

Соколиный глаз,
Прежде, чем задавать такие вопросы, прочтите Электронный учебник

Ассемблер - язык процессора, это язык точной типизации, ещё более "точнейшей", чем PASCAL+.
Любая переменная для процессора определяется адресом в памяти и размером в байтах и больше никаких абстракций. Компилятор ЯВУ превращает фантазию программиста - типа value:real в value db 6 dup(?)(режим эмуляции FPU), и потом к этой переменной применяет нужный код.
Думаю, Вы как кодер PABC.net, встречали сообщение:"для данного типа нет соответствующей операции". Посмотрите, что говорят разные потомки Паскаля.
Это значит, что компилятор ЯВУ не знает как абстракцию перевести в язык адрес:размер, ну не предусмотрели создатели компилятора ЯВУ такого варианта.
Миниатюры
Получение доступа к регистрам  
2
112 / 91 / 31
Регистрация: 24.10.2018
Сообщений: 336
07.11.2018, 22:45
Цитата Сообщение от Соколиный глаз Посмотреть сообщение
если мне надо получить доступ к второму байту eax, к примеру, то я должен написать что-то вроде eax + 1?
можно так еще:
Assembler
1
2
    mov edx, 808h
    bextr ebx, eax, edx
Что означает, экстрактим биты из eax, начиная с 8-го длиной 8. Результат в ebx.
1
3410 / 1829 / 489
Регистрация: 28.02.2015
Сообщений: 3,696
07.11.2018, 22:49
а забыл добавить mov eax, bx -> 32-а бита и 16-ть, понимаете как "весы" завалились в одну сторону. Компилятор Вам скажет
Operand types do not match
, что в перводе
Типы операндов не совпадают
2
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
raxper
Эксперт
30234 / 6612 / 1498
Регистрация: 28.12.2010
Сообщений: 21,154
Блог
07.11.2018, 22:49
Помогаю со студенческими работами здесь

Получение доступа к MainWindow
Добрый день. При написании курсовой работы возникла проблема. Допустим у нас есть две формы: MainWindow.ui, в которой лежит кнопка...

Получение доступа к папке
Мне нужно получить доступ к папке c/users/username/dowland. Но проблема в том, что на разных Пк username разное.Как решить эту проблему?

Получение доступа к SpecialFolders
Доброго времени суток! Пишу программу, которая ищет *.exe-шники в определенной папке. Проблема в том, что когда поиск доходит до папок,...

Получение доступа к ресурсу
Есть сетевая папка расположенная на компьютере директора. При попытке открытия выдается ошибка: Windows не может получить доступ к...

Получение доступа к уже открытому IE
Доброго времени суток! Подскажите пожалуйста в чем ошибка или напишите свой вариант. Пытаюсь получить доступ к открытому IE, но...


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

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

Новые блоги и статьи
Создание Single Page Application на фреймах
krapotkin 16.11.2025
Статья исключительно для начинающих. Подходы оригинальностью не блещут. В век Веб все очень привыкли к дизайну Single-Page-Application . Быстренько разберем подход "на фреймах". Мы делаем одну. . .
Создание Single Page Application на фреймах
krapotkin 16.11.2025
Статья исключительно для начинающих. Подходы оригинальностью не блещут. В век Веб все очень привыкли к дизайну Single-Page-Application . Быстренько разберем подход "на фреймах". Мы делаем одну. . .
Фото: Daniel Greenwood
kumehtar 13.11.2025
Расскажи мне о Мире, бродяга
kumehtar 12.11.2025
— Расскажи мне о Мире, бродяга, Ты же видел моря и метели. Как сменялись короны и стяги, Как эпохи стрелою летели. - Этот мир — это крылья и горы, Снег и пламя, любовь и тревоги, И бескрайние. . .
PowerShell Snippets
iNNOKENTIY21 11.11.2025
Модуль PowerShell 5. 1+ : Snippets. psm1 У меня модуль расположен в пользовательской папке модулей, по умолчанию: \Documents\WindowsPowerShell\Modules\Snippets\ А в самом низу файла-профиля. . .
PowerShell и онлайн сервисы. Валюта (floatrates.com руб.)
iNNOKENTIY21 11.11.2025
PowerShell функция floatrates-rub Примеры вызова: # Указанная валюта 'EUR' floatrates-rub -Code 'EUR' # Список имеющихся кодов валют floatrates-rub -Available function floatrates-rub {
PowerShell и онлайн сервисы. Погода (RP5.ru)
iNNOKENTIY21 11.11.2025
PowerShell функция Get-WeatherRP5rss для получения погоды с сервиса RP5 Примеры вызова Get-WeatherRP5rss с указанием id 5484 — Москва (восток, Измайлово) и переносом строки:. . .
PowerShell и онлайн сервисы. Погода (wttr)
iNNOKENTIY21 11.11.2025
PowerShell Функция для получения погоды с сервиса wttr Примеры вызова: Погода в городе Омск с прогнозом на день, можно изменить прогноз на более дней, для этого надо поменять запрос:. . .
PowerShell и онлайн сервисы. Валюта (ЦБР)
iNNOKENTIY21 11.11.2025
# Получение курса валют function cbr (] $Valutes = @('USD', 'EUR', 'CNY')) { $url = 'https:/ / www. cbr-xml-daily. ru/ daily_json. js' $data = Invoke-RestMethod -Uri $url $esc = 27 . . .
И решил я переделать этот ноут в машину для распределенных вычислений
Programma_Boinc 09.11.2025
И решил я переделать этот ноут в машину для распределенных вычислений Всем привет. А вот мой компьютер, переделанный из ноутбука. Был у меня ноут асус 2011 года. Со временем корпус превратился. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2025, CyberForum.ru