Форум программистов, компьютерный форум, киберфорум
Assembler для начинающих
Войти
Регистрация
Восстановить пароль
Карта форума Темы раздела Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 5.00/6: Рейтинг темы: голосов - 6, средняя оценка - 5.00
0 / 0 / 0
Регистрация: 09.12.2012
Сообщений: 24
1

Переход на несколько байт

12.01.2017, 11:47. Показов 1228. Ответов 5
Метки нет (Все метки)

Author24 — интернет-сервис помощи студентам
Допустим нужно в программе сделать переход на 100 байт вперёд. НО, программа на жестком диске может быть разбита как угодно. Как она находит нужное продолжение кода? Подскажите раздел где можно об этом почитать, извините, если написал не в тот раздел.

Добавлено через 2 часа 25 минут
Программа фрагментирована на жестком диске, как windows находит адреса продолжения программы?
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
12.01.2017, 11:47
Ответы с готовыми решениями:

Переход по адресу из массива байт
не знаю просто как правильно назвать тему до форматирования пк была у меня она очень интересная...

Прочитать несколько байт с сокета
Здравствуйте, уважаемые форумчане. Вопрос у меня следующий. reader::reader(QObject *parent) :...

Arduino UNO. Прочитать несколько байт
Здравствуйте! Пытаюсь прочитать несколько байт в Arduino UNO. Я написал такой код: void setup()...

Несколько лишних байт при выводе
Доброго времени суток. Хотелось бы узнать вот о чем: Имеем простейший код, полностью читающий в...

5
1624 / 806 / 146
Регистрация: 13.06.2015
Сообщений: 3,266
12.01.2017, 11:48 2
Цитата Сообщение от sergeiparshin Посмотреть сообщение
программа на жестком диске может быть разбита как угодно
Программы не исполняются с жёсткого диска, а перед запуском ОС загружает программу в ОЗУ, собирая в правильном порядке. Если же вы пишете начальный загрузчик, то должны самостоятельно позаботиться о подобии "драйвера" файловой системы.
1
0 / 0 / 0
Регистрация: 09.12.2012
Сообщений: 24
12.01.2017, 20:19  [ТС] 3
Windows собирает программу со всго жесткого диска? А если программа не помещается целиком в оперативку? Или тогда подключается жесткий в качестве ОЗУ и программа ТОЛЬКО ЦЕЛИКОМ помещенная в ОЗУ запускается?
0
634 / 389 / 75
Регистрация: 21.09.2008
Сообщений: 1,328
13.01.2017, 12:16 4
Во времена DOS обходились созданием оверлейных (overlay) exe. В эпоху protected mode при нехватке физического ОЗУ обходятся swap-файлом на HDD/SSD.
0
Asm/C++/Delphi/Py/PHP/VBA
6747 / 1993 / 231
Регистрация: 14.12.2014
Сообщений: 4,186
Записей в блоге: 12
13.01.2017, 12:52 5
Лучший ответ Сообщение было отмечено sergeiparshin как решение

Решение

Программы в формате EXE (DOS MZ или Win PE/NE) имеют заголовок, в котором хранится информация о размере программы, о кол-ве требуемой памяти и т.д. Если она "не помещается в оперативку", то при её запуске система выводит сообщение об ошибке. Есть EXE-файлы, которые помимо программного кода хранят данные (например, самораспаковывающиеся архивы - SFX). Система загружает код программы в оперативку (при этом данные за кодом не загружаются, в заголовке же написано сколько она занимает) и запускает. Далее программа считывает данные из файла (себя самой). По сути, это то же самое, как если бы этот архив был в отдельном файле, просто в том же файле удобнее (не потеряется). Под DOS, как уже сказано, были оверлеи - это когда часть кода хранится в отдельном файле и подгружается при необходимости.

По поводу перехода на 100 байт вперёд и пр. проблем нет. Во-первых, прога загружается всегда по одному и тому же линейному адресу, указанному в заголовке (Windows) либо по одному и тому же смещению (DOS, меняется лишь сегмент, но для настройки в том же EXE-шнике есть специальная таблица, использую которую происходит настройка... собственно, в прогах под Windows есть тоже свои таблицы).

Ну и во-вторых, если загрузить код, содержащий инструкции перехода/вызова (jmp, call и т.п.), то там используется не прямая, а относительная адресация (как правило, хотя можно сделать и переход по адресу, содержащемуся в регистре или памяти). Т.е. в примере ниже вне зависимости от адреса метки from переход всегда будет осуществляться к метке to, т.к. инструкция jmp хранит в себе информацию о переходе на 1 байт вперёд (относительно следующей инструкции):
Assembler
1
2
3
from: jmp to
      nop
to:   ret
1
3406 / 1825 / 489
Регистрация: 28.02.2015
Сообщений: 3,696
13.01.2017, 16:11 6
Лучший ответ Сообщение было отмечено sergeiparshin как решение

Решение

Цитата Сообщение от sergeiparshin Посмотреть сообщение
Подскажите раздел где можно об этом почитать, извините, если написал не в тот раздел.
Читайте:
1)Работа процессора, внимание нужно обратить на взаимодействие с кешем.
2)Операционные системы, внимание нужно обращать на жизненный цикл процеса.

Если в общих словах, то:
Существует несколько кешей- назовем их быстрый(10Мб) и медленный(100Мб). Сам процессор работает с быстрым кешем. Если нужных данных(данные или код) нет в бысторм кеше, они подгружаются с медленного, если их нет в медленном, то с оперативной памяти, если их нет в ОЗУ, то с файла подкачки.
Как-то так.
размеры памяти указаны условно
1
13.01.2017, 16:11
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
13.01.2017, 16:11
Помогаю со студенческими работами здесь

Как сдвинуть указатель на несколько байт?
Сейчас разбираю пример из книжки и столкнулся со следующей проблемой. Компилирую в Visual Studio...

Как прочитать несколько байт из файла с n-го бита
Требуется считать байты из файла заданным смещением; смещение задается в БИТАХ; Например: c 3-го...

Как прочитать несколько байтов в файле с n-го байта по m-й байт ?
Как прочитать несколько байтов в файле с n-го байта по m-й байт ?

База данных: переход на несколько форм
Доброго времени суток всем. Я пытаюсь научиться работать с базами данных. Пока учебным пособием...


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

Или воспользуйтесь поиском по форуму:
6
Ответ Создать тему
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2024, CyberForum.ru