Ответы пользователя по тегу Assembler
  • Есть ли свободный учебный симулятор простейшего компьютера с ассемблером?

    saboteur_kiev
    @saboteur_kiev Куратор тега IT-образование
    software engineer
    Взять любой эмулятор ZX-спектрума и ассемблер для него?
    Ответ написан
    2 комментария
  • Как определить размер функции в байтах Машиного кода?

    saboteur_kiev
    @saboteur_kiev
    software engineer
    Язык программирования тебе это не подскажет. Он не знает.
    Об этом может знать компилятор, но для компиляторов такой "функции" как get_machinecode_instruction_length нету. Компилятор может генерировать не прямой код трансляции команд С++ в машинный код. Он может оптимизировать вызовы под конкретный процессор/архитектуру, по опциям для оптимизации загрузки данных в память и так далее.
    Просто посмотреть машинные коды - нужно читать datashit конкретной архитектуры, они более-менее стабильные.
    Ответ написан
    Комментировать
  • Как управлять значением пикселей на экране в виндовс?

    saboteur_kiev
    @saboteur_kiev
    software engineer
    Никак.

    В DOS у тебя не было прав доступа, не было мультизадачности (кроме резидентов), ты мог напрямую обращаться к любому адресу памяти или устройству. Там можно было менять пиксели на экране.

    в Windows у тебя процесс запускается без привилегий, и пускать тебя напрямую тебя к экранной памяти или устройству никто не будет.
    Поэтому варианта под виндовс строго два - или ты пользуешься стандартными библиотеками виндовс (GDI+) и вызываешь функции библиотеки из ассемблера.
    Или ты пишешь свой драйвер экрана с этими функциями, устанавливаешь его, и получаешь доступ к функционалу через драйвер, но второй путь явно не для новичков.
    Ответ написан
    Комментировать
  • Что ещё нужно дописать, чтобы буквы становились заглавными только после точки?

    saboteur_kiev
    @saboteur_kiev
    software engineer
    ты на русском языке сперва напиши свой алгоритм.
    У тебя сейчас "заменить любой символ на апперкейс", а если встретить точку - то выйти из программы.

    А хочешь наоборот. Смысл условий своих пересмотри.
    Ответ написан
    Комментировать
  • Регистры общего назначения могут иметь несколько значений?

    saboteur_kiev
    @saboteur_kiev
    software engineer
    Многозадачность обеспечивает операционная система, а не процессор.
    На ядро операционной системы и ложится "переключение процессов".
    С точки зрения архитектуры процессора - нет никаких "процессов", есть просто выполняющийся код.
    Ответ написан
    Комментировать
  • Как можно сделать свою ОС на чистом ассемблере NASM и яп C (C++)?

    saboteur_kiev
    @saboteur_kiev
    software engineer
    Начни с написания собственного загрузчика, чтобы ты мог загрузиться в свою программу прямо с флешки и написать приветствие.
    Потом придумай свою файловую систему, чтобы ты мог хранить файлы и с ними работать.

    Ну и собственно, вопрос слишком общий и нехороший. Если ты новичок в программировании, то задача явно не по плечу, следует сперва попробовать что-то попроще.
    Если опытный, то почему не нашел в гугле первые топ ссылок?
    Ответ написан
    Комментировать
  • Где писать на Assembler-е?

    saboteur_kiev
    @saboteur_kiev
    software engineer
    К сожалению, твой вопрос похож на "какой командой ассемблера пакман ест чертика".

    Слишком рано задаешь подобный вопрос. Перед тем как изучать именно ассемблер для того, чтобы делать Операционную Систему, тебе следует изучить как вообще операционная система работает, как вообще языки программирования работают. То есть для начала стать продвинутым пользователем.

    Для начала, подучи С/С++ до уровня, чтобы ты мог писать простые консольные программки, вроде "открыть файл, записать в него что-то", "открыть файл, прочитать с него что-то".
    Затем можешь изучить как загружается операционная система с диска, разобраться с тем что такое BIOS на самом деле (а не думать что bios это то меню, в котором можно выбрать грузиться с диска или флешки), и подумать сможешь ли ты написать собственный загрузчик операционной системы.
    Потом можно почитать/полистать хотя бы 1-2 ЛЮБЫЕ книжки по ассемблеру (и не бойся такие простые вопросы задавать гуглу). Рекомендовать тебе самое лучшее нет смысла.

    А вопросы следует задавать, когда ты уже знаешь примерно половину ответа. Тогда это будут правильные вопросы.
    Ответ написан
    1 комментарий
  • Как читать данные с диска в защищенном режиме x86?

    saboteur_kiev
    @saboteur_kiev
    software engineer
    BIOS потихоньку уходит в небытие, и надо уже читать UEFI

    ну а для своей OS из защищенного режима надо делать драйвера для стандартных накопителей (штук 10) - базовый драйвер для стандартов ATA/ATAPI, AHCI, NVMe; потом еще OHCI, UHCI, eHCI и xHCI для USB контроллеров и наконец USB mass storage).
    Также еще не забывать что сейчас многие любят в рейды, и все еще живы всякие SCSI, FDD, ленточные накопители и CD/DVD/BR...
    Ответ написан
    Комментировать
  • Маркетинговые ходы вокруг языка Ассемблер?

    saboteur_kiev
    @saboteur_kiev
    software engineer
    Потому что программу на Си можно просто пересобрать.

    А программу на ассемблере переписать.
    Ответ написан
    Комментировать
  • Что такое Потоки на уровне ОС? В 1-ядерном процессоре же всего 1 поток?

    saboteur_kiev
    @saboteur_kiev
    software engineer
    В многозадачной системе каждый процесс имеет кучу всего - свою область памяти, своего родителя, права доступа, открытые файловые дескрипторы и так далее. Переключение с процесса на процесс - довольно тяжелая задача.

    Поток или тред - это грубо говоря возможность запустить несколько "облегченных" процессов парралельно, которые используют один набор дескрипторов, один process ID и могут использовать ту же область памяти.
    Поэтому будет быстрее и дешевле просчитать что-то в тредах, чем в двух процессах.

    Сколько инструкций за раз выполняется 1, 10, 100? До прерывания? От чего зависит.

    Зависит от ядра операционки, а точнее от реализации process scheduler. Обычно все завязано на прерывании по таймеру, поэтому выделяются слайсы процессорного времени - а значит у процессора с бОльшей тактовой частотой будет выполнено больше инструкций за слайс. А дальше - process scheduler может быть довольно умным, выделяя конкретному процессу/потоку несколько слайсов подряд, если считает что так будет лучше.
    Но слишком сложной логики у process scheduler быть не может, иначе само переключение будет слишком дорогим.
    Ответ написан
  • Ассемблер, я правильно понимаю что по умолчанию в регистрах 0x00?

    saboteur_kiev
    @saboteur_kiev
    software engineer
    Нет, регистры используются разными процессами, ядром и так далее. Если ты их сам не обнулил, в них может быть что угодно
    Ответ написан
    Комментировать
  • Как найти схему дешифратора кода (instruction decoder) Intel 8080?

    saboteur_kiev
    @saboteur_kiev
    software engineer
    Для начала, 8080 это коммерческий процессор Intel. Не opensource продукт. Вполне возможно, что никто и не публиковал схемы и инструкции, которые вполне могут быть еще защищены и коммерческой тайной и патентами. Можно попробовать устроиться в компанию intel и там изучить архивные документы.

    Во-вторых пробовали просто искать?
    даже на вики есть полезные ссылки
    https://en.wikipedia.org/wiki/Intel_8080
    https://web.archive.org/web/20070928060215/http://...

    kazojc.com/elementy_czynne/IC/8080-3.pdf
    https://pastraiser.com/cpu/i8080/i8080_opcodes.html
    www-classes.usc.edu/engr/ce/108/computer.pdf
    Ответ написан
    Комментировать
  • Как процессор распознает длину команды?

    saboteur_kiev
    @saboteur_kiev
    software engineer
    процессор 8080 было восьмибитным.
    То есть он за один такт обрабатывал одну команду из одного байта, затем уже можно было понять как обрабатывать два последующих байта.
    Для таких вещей существует внутренний декодер.
    Раньше был просто специальный регистр (OPCODE), в который помещался первый байт инструкции и процессор декодируя его обрабатывал следующие байты уже согласно этой инструкции
    7tw6E.gif
    Ответ написан
    Комментировать
  • Как реализовать на с или assembler асинхронную выборку из RAM?

    saboteur_kiev
    @saboteur_kiev
    software engineer
    Вы уже разобрались с тем, как работает L1 и L2 кеширование и как работают многопоточные программы?
    Или не очень понятно, что вы подразумеваете под "CPU обращается в рам, а в это время выполняет другие операции"
    Ответ написан
    22 комментария
  • Как внедрить в ядро ОС на Си C++?

    saboteur_kiev
    @saboteur_kiev Куратор тега C++
    software engineer
    C++ это язык программирования. Его поддержки ни в каком ядре нет.

    Ядро - это часть операционной системы, которая предоставляет основной интерфейс для работы процессов и системные функции которыми можно пользоваться. Писать ядро можно на чем угодно, и никакой связи с поддерживаемыми языками нет.

    А С++ поддерживается в первую очередь компилятором, который к ядру никакого отношения не имеет.

    Немного другой вопрос линкер, который создает бинарник или библиотеку, и ваше ядро по идее должно уметь этот бинарник запускать а библиотекой пользоваться.

    Итого, прежде чем "подключать С++ к ядру", следует уточнить как работает архитектура ОС и задать правильный вопрос
    Ответ написан
    7 комментариев
  • Ассемблер практикуют написанием драйверов и вирусов?

    saboteur_kiev
    @saboteur_kiev
    software engineer
    Также как и любой другой язык - пишешь программы.
    Хочешь написать драйвер - пиши драйвер.
    Ответ написан
    Комментировать
  • Почему код ассемблера не вызывает ошибку сегментации?

    saboteur_kiev
    @saboteur_kiev
    software engineer
    IMHO подразумевается 32-битный адрес, поэтому из des берется только первые 4 байта и 4 заносится по адресу 0xffffffff
    Ответ написан
    Комментировать
  • Что означает в ассемблере mov eax, ???

    saboteur_kiev
    @saboteur_kiev
    software engineer
    none7, а русской википедии нету? Тогда и не гуглится. если нету ни одного русского источника.

    Даниил, у тебя совесть есть? Или мозги?

    5fac8ad30af35598785778.png
    Ответ написан
    4 комментария
  • Как компьютер складывает два числа?

    saboteur_kiev
    @saboteur_kiev
    software engineer
    Сигнал?
    Вы путаете шину с какой шиной?

    Вы сами точно понимаете на каком уровне детализации вы хотите получить ответ?
    Если на логическом - почитайте как работает сумматор. Можно даже посмотреть видяшки. Сумматор это собственно суть работы любой архитектуры.

    Если же вам на уровне архитектуры готового процессора - то можно посмотреть инструкции ассемблера для сложения чисел. Отправляем два числа в регистры, выполняем команду Add, получаем результат в регистрах, достаем его.

    p.s. Счетчик команд обычно в шину не передается, это часть внутренней архитектуры процессора

    Есть подозрение, что у вас намешались в голове отрывки разных лекций и вы путаете архитектуру с конкретной реализацией, и вообще путаетесь с терминами.
    Ответ написан
    Комментировать
  • Объясните ассемблер?

    saboteur_kiev
    @saboteur_kiev
    software engineer
    > MOV DL, DS:[BP]
    Команда выглядит не очень, поскольку регистр BP обычно используется для работы с стэком. Но ок.
    Собственно взять значение из дата сегмента, по смещению BP и положит его в регистр DL.
    Ответ написан
    Комментировать