The Bird of Hermes
Базовые регистры эти ограничены (не Е).
Я использую 32-битные регистры вполне
Aiwan \ (•◡•) / _bot
Даже екзешники этим ограничены?
да данном уровне твоего познания наверное лучше сказать да
Eugene
Не, ну можно использовать регистры типа EAX на 386+.
Хотя надо unreal mode чтоб был, но в DOSBox это не проблема.
The Bird of Hermes
Я хочу себе запилить имитацию такого типа данных, как строка в высокоуровневых языках
Aiwan \ (•◡•) / _bot
Я использую 32-битные регистры вполне
а о каком размере динамического массива идет речь?
The Bird of Hermes
Создав односвязный список из байт
The Bird of Hermes
Eugene
Конечно
The Bird of Hermes
Конечно
Так, ну ведь в макрос всё равно надо вставлять ассемблерный код
The Bird of Hermes
Или нет?
Aiwan \ (•◡•) / _bot
Так, ну ведь в макрос всё равно надо вставлять ассемблерный код
можешь не вставлять, но тогла пиши на си, паскале или васике
Aiwan \ (•◡•) / _bot
не путай ассемблер с яву. то что в яву часть синтаксиса, в ассемблере все делается ручками
Eugene
Так, ну ведь в макрос всё равно надо вставлять ассемблерный код
Смотря что ты хочешь сделать макросом. Возьми книгу, типа Зубкова и прочитай от начала до конца. А то много вопросов с непониманием базовых вещей.
Eugene
Структурированные знания всегда лучше обрывочных.
Aiwan \ (•◡•) / _bot
Я хочу себе запилить имитацию такого типа данных, как строка в высокоуровневых языках
имитация на уровне использования (упрощенный синтаксис для испольщования например) или имитация поведения?
disba1ancer
Процессору всё равно - код это или данные. Он может читать/писать код и исполнять данные, если надо. Главное за пределы не выходи без понимания последствий.
Не всем, у некоторых раздельная память, с тем отличием от Гарвардской архитектуры, что секцию констант хранят с кодом
Eugene
Не всем, у некоторых раздельная память, с тем отличием от Гарвардской архитектуры, что секцию констант хранят с кодом
Ну так-то и в х86 можно проставить уровни доступа (чтение/запись/исполнение). В защищённом режиме. А тут речь про ДОС.
disba1ancer
Ну так-то и в х86 можно проставить уровни доступа (чтение/запись/исполнение). В защищённом режиме. А тут речь про ДОС.
Можно, но формально разделения памяти нет, всё в одном адресном пространстве
The Bird of Hermes
имитация на уровне использования (упрощенный синтаксис для испольщования например) или имитация поведения?
Ну вообще я хочу себе для удобства сделать доступными привычные строковые операции
The Bird of Hermes
используй функции, чем не привычка?
Функции не позволят мне соединить две строки, например
The Bird of Hermes
Ну точнее позволят, только как я потом к ней буду обращаться, куда мне её деть
The Bird of Hermes
В стеке хранить?
Aiwan \ (•◡•) / _bot
сишку подучи
The Bird of Hermes
Там динамические массивы есть
Aiwan \ (•◡•) / _bot
Там динамические массивы есть
если сделать, то будут и в асме
Aiwan \ (•◡•) / _bot
От с#🙂
ну раз такая пляска, как мне в сишарп использовать ассемблер для доступа к msr регистру?
The Bird of Hermes
Aiwan \ (•◡•) / _bot
Aiwan \ (•◡•) / _bot
используй спп для организации динамических строк и подключай либу в асмокоде
Aiwan \ (•◡•) / _bot
если хочешь на асме - делай на асме все вручную от А до Я, так как это делает ЯВУ (можешь дизасм подсмотреть в таком случая, чтоб оценить масштаб работы и необходимых знаний)
The Bird of Hermes
Односвязный список байт намучу и всё
Aiwan \ (•◡•) / _bot
и что мешает пойти по прихоти этого "надо"?
Aiwan \ (•◡•) / _bot
там кто то из классиков показывал как списки делать на асме
Aiwan \ (•◡•) / _bot
мне вот тоже надо для одного алгоритма односвязный список, но я не ною что асм для этого не удобен, я делаю на нем то, что мне нужно здесь и сейчас, зная все его недостатки и преимущества, чтоб одно нивелировать другим
Aiwan \ (•◡•) / _bot
https://habr.com/ru/post/532004/ вот алгоритм, реализуй на асме. а если не знаешь как, то сначало надо асм выучить и понять, чтоб переходить к более сложным методам решения задачи
Aiwan \ (•◡•) / _bot
Ну мне так в конце каждого массива придётся ставить
1 - да придется, ты на асме пишешь, а не на ЯВУ
The Bird of Hermes
The Bird of Hermes
Я излагал свои хотелки
The Bird of Hermes
Ну мне так в конце каждого массива придётся ставить
В итоге тут я сдался и решил просто запоминать, какая переменная идёт после массива. Исходя из её смещения и смещения массива уже определяю размер самого массива.
Aiwan \ (•◡•) / _bot
(я это услышал именно так.)
Aiwan \ (•◡•) / _bot
а $-arr чем не устаривает? эт как бы стандарт в асме определения размера инициализированных данных (и кода в том числе)
The Bird of Hermes
а $-arr чем не устаривает? эт как бы стандарт в асме определения размера инициализированных данных (и кода в том числе)
Тем, что мне надо выделять дополнительный кусочек и постоянно хранить размер массива
The Bird of Hermes
А нафиг мне это надо
The Bird of Hermes
Возьму вычислю в процессе и забуду, когда будет не нужно
Ask
какой еще кусочек
The Bird of Hermes
какой еще кусочек
Байт-два под размер массива
Ask
это лейбл, метка для компилятора
Aiwan \ (•◡•) / _bot
Тем, что мне надо выделять дополнительный кусочек и постоянно хранить размер массива
там ничего не выделяется, это считается при компиляции и используется как константное значение, подставляемое прямо в код при его указании
The Bird of Hermes
Зачем мне лишнюю переменную держать
Ask
где?
Ask
покажи
The Bird of Hermes
Беру Lea dx, arr Lea bx, след_переменная sub bx, dx
The Bird of Hermes
И всё
Ask
ты читаешь что тебе пишут?
The Bird of Hermes
покажи
Что тебе показать
Aiwan \ (•◡•) / _bot
Беру Lea dx, arr Lea bx, след_переменная sub bx, dx
не по асмовски делать такие телодвижения. то что может быть посчитано на этапе компиляции не надо запихивать в сам код
The Bird of Hermes
Я про способы определения длины массива
Ask
покажи где лишняя переменная будет
The Bird of Hermes
👆
arr db 6,7,9,8 len db $-arr
Aiwan \ (•◡•) / _bot
Разве не принцип Асма экономия на всём, что можно?
да, но тут ты на несколько тактов, инструкций, размер программы в байтах увеличил.
Aiwan \ (•◡•) / _bot
arr db 6,7,9,8 len db $-arr
не db, а = надо
Aiwan \ (•◡•) / _bot
Беру Lea dx, arr Lea bx, след_переменная sub bx, dx
а теперь сравни твой вариант и мой .data arr db .... len = $ - arr .code mov bx,len укого быстрей, у кого эффективней, у кого понятней, у кого меньше кода?
Ask
🥳
The Bird of Hermes
Так хорошо, а как заставить работать директиву returns?
The Bird of Hermes
Которая вместе с arg и local
The Bird of Hermes
Она разве не должна класть результат на вершину стека после конца процедуры?
Eugene
Она разве не должна класть результат на вершину стека после конца процедуры?
Нет, результат возвращается в регистрах (обычно al, ax, eax, st(0)).