Alex
Ребят, кто может помочь (возможно за деньги) с практическими по SASM?
­
Никаких лс
­
Зря в программисты пошёл.
Имя
Зря в программисты пошёл.
в нейросетивисты надо жиш
Dan
Попробуй ChatGPT
лучше книжку
Ivan
Alex
Попробуй ChatGPT
Пробовал не раз, не правильно пишет код
Имя
Пробовал не раз, не правильно пишет код
попробуй скайнет через 3 года
Aiwan \ (•◡•) / _bot
а теперь спроси как этот код через ком. строку собрать. и ты увидишь что "матрица сбоит"
Антон
привет . подскажите, как считать нажатую клавишу shift + esc на dos tasm команда in ax, 60h сохраняет только что была нажата esc 01
notme
Тут кто-нибудь пользуется PerfView? https://github.com/microsoft/perfview У меня при снятии сборе данных процесса - очень много BrokenStacks хочется понять почему
Aiwan \ (•◡•) / _bot
@IvUyr
Кирилл
Кто может подсказать, как в турбо ассемблере определить адреса начала и конца сегмента кода?
Кирилл
Эм. mov ax, cs
CS хранит же в себе адрес начала сегмента кода?
The Bird of Hermes
CS хранит же в себе адрес начала сегмента кода?
cs - регистр, обозначающий сегмент кода. cs:0000h - адрес начала сегмента
Кирилл
Эм. mov ax, cs
Я прост только азы ассемблера пытаюсь освоить, поэтому сорри, если вопрос глупый, просто в сети вообще не могу найти нормального внятного ответа на вопрос
The Bird of Hermes
CS хранит же в себе адрес начала сегмента кода?
А вот конец сегмента вообще некорректный термин
The Bird of Hermes
Универ)
Начало и конец сегмента, имел ввиду
Кирилл
Так препод сформулировала вопрос сегодня на паре, всю пару мучался, искал ответ, но тем не менее не вышло ответить
Кирилл
cs - регистр, обозначающий сегмент кода. cs:0000h - адрес начала сегмента
Как я понимаю 0000h это же адрес относительно cs?
Кирилл
а, тут вложения нельзя кидать?
­
Кирилл
Короче, есть код, и по турбодебаггеру нужно определить начальный адрес сегмента кода и конечный
Кирилл
и объем сегмента кода
Кирилл
Я пытался ответить что типа 0000h — начальный адрес 000Eh — конечный 15 байт — сегмент кода занимает (E => 14 + 1 => 15)
The Bird of Hermes
Короче, есть код, и по турбодебаггеру нужно определить начальный адрес сегмента кода и конечный
Ну вопрос некорректен. С точки зрения сегментной адресации памяти, конец сегмента - тот максимальный адрес, который можно получить с помощью данного значения в сегментном регистре. В таком случае лучше всего подойдет понятие конца блока памяти, отведенного под код
The Bird of Hermes
А если мы берем начало и конец блока памяти, отведенного под код - это уже можно определить тупо посмотрев на адреса первой и последней инструкции в отладчике
Кирилл
Ну, то есть 0000h — начальный адрес 000Eh — конечный
Кирилл
у меня 000E последняя инструкция
Кирилл
А сколько объем памяти тогда?
The Bird of Hermes
Ну, то есть 0000h — начальный адрес 000Eh — конечный
Ммм не факт, с точки зрения блока памяти совсем не факт
The Bird of Hermes
У тебя может например быть com-программа
The Bird of Hermes
У которой в начале задаётся смещение
The Bird of Hermes
Ну, то есть 0000h — начальный адрес 000Eh — конечный
Посмотри короче в отладчике, где адрес начала кода и где адрес конца и всё
Кирилл
ну у меня вот последняя строка по адресу 000E лежит
Кирилл
Как я понял, это конец блока памяти тогда, так как последняя инструкция
The Bird of Hermes
Как я понял, это конец блока памяти тогда, так как последняя инструкция
Ну по идее да, но хрен знает что твой препод имел ввиду под концом сегмента
Кирилл
А вот по объему памяти выделенной, сколько выходит?
Кирилл
15 байт или сколько
Кирилл
Я просто посчитал, что вот если последняя строка по адресу 14 + 1 начальная
Кирилл
то 15
The Bird of Hermes
А вот по объему памяти выделенной, сколько выходит?
Дос по умолчанию выделяет запускаемой программе почти всю свободную память
disba1ancer
Как я понимаю 0000h это же адрес относительно cs?
Это просто адрес, к какому сегментному регистру он относится зависит от контекста
Кирилл
disba1ancer
Так а как адрес начальный и конечный тогда определить?
Если тебе дадут адрес состоящий из сегмента и офсета, какой линейный адрес будет им соответствовать?
Aiwan \ (•◡•) / _bot
Так а как адрес начальный и конечный тогда определить?
поставь метки в начале/конце кода и выведи/посмотри их адрес (смещение)
disba1ancer
Эээ, не знаю
Тогда всё плохо, это наверняка объясняли, правда не исключаю, что плохо
Guldan
Универ)
КФУ или КАИ?
The Bird of Hermes
Вполне корректный
Не корректный, потому что у ДОС нет жестко фиксированных границ и размеров сегмента
The Bird of Hermes
И в принципе сегментная адресация не работает как тупо разделитель всей памяти на отдельные сектора размером по 64кб
disba1ancer
Не корректный, потому что у ДОС нет жестко фиксированных границ и размеров сегмента
корректный для x86, особенно учитывая, что этот предел можно задавать в защищённом режиме
The Bird of Hermes
Там у сегментов нет предела
disba1ancer
Ммм мы имеем дело с дос в реальном режиме
в реальном режиме лимит сегмента фиксированный и то только в классическом, на 386 можно делать рилмод с любым пределом
disba1ancer
Там у сегментов нет предела
есть: ; in real mode mov eax, 10000h mov [eax], 0 ; -> #GP
The Bird of Hermes
есть: ; in real mode mov eax, 10000h mov [eax], 0 ; -> #GP
Ммм я использовал 32-битную адресацию и он мне вполне себе это позволял
The Bird of Hermes
Надо будет еще раз проверить. Но я про то, что как такой сегмент кода не имеет границ, потому что все сегменты перекрываются
disba1ancer
Ммм я использовал 32-битную адресацию и он мне вполне себе это позволял
до тех пор пока все адреса ниже 64 кб, либо кто-то включил тебе т.н. unreal mode
The Bird of Hermes
Ну в любом случае ответ 0 и 65535 на вопрос препода о начале и конце сегмента кода будет несколько бессмысленным
The Bird of Hermes
Да и как понять - адрес начала сегмента кода? Абсолютный адрес в байтах от 0 без поправок на сегментную адресацию?
disba1ancer
Ну в любом случае ответ 0 и 65535 на вопрос препода о начале и конце сегмента кода будет несколько бессмысленным
а вот тут ошибочка, надо сложить таки с базой и получить линейные адреса начала и конца
The Bird of Hermes
ну да, линейный адрес
Ну допустим адрес начала нам что-то даст, а адрес конца каким боком
disba1ancer
Ну допустим адрес начала нам что-то даст, а адрес конца каким боком
а это предел который можно адресовать в линейных адресах