Бред


Ответить в тред Ответить в тред

Check this out!
<<
Назад | Вниз | Каталог | Обновить тред | Автообновление
68 2 10

Аноним 07/07/19 Вск 13:54:03 1995277221
image.png (111Кб, 972x833)
972x833
В /pr/ полтора анона, так что пишу сюда.

Начал читать structured computer organisation Таненбаума. Не могу понять почему уровень ассемблера выше уровня ОС. Буду очень благодарен за объяснение.
Аноним 07/07/19 Вск 13:54:42 1995277642
бамп
Аноним 07/07/19 Вск 13:55:06 1995277833
бамп 1
Аноним 07/07/19 Вск 13:55:52 1995278304
бамп 2
Аноним 07/07/19 Вск 13:56:18 1995278535
бамп 3
Аноним 07/07/19 Вск 13:56:51 1995278846
бамп 4
Аноним 07/07/19 Вск 13:58:39 1995279557
Аноним 07/07/19 Вск 13:59:34 1995280018
>>199527722 (OP)
Программа на ассемблере работать без ОС будет, а ОС без ассемблера нет.
Собственно, ось и есть программа на ассемблере.
Аноним 07/07/19 Вск 14:02:47 1995282009
Ассемблер ниже ОС по левелу из-за того, что меньше надо ступеней пройти, что бы перевести код в бинарную форму (0 и 1).
Аноним 07/07/19 Вск 14:06:10 19952838510
>>199528001
А разве по такой логике не должно быть как раз наоборот: ОС выше ассемблера?

>>199528200
Так на рисунке ОС как раз таки ниже ассемблера. В этом и вопрос треда.
Аноним 07/07/19 Вск 14:10:15 19952859211
>>199527722 (OP)
Самого Танбербаума и спрашивай. Погугли, наверняка у него есть мыло или что-то такое.
Аноним 07/07/19 Вск 14:10:57 19952862512
>>199527722 (OP)

ОС это программа, она технически может быть написана в виде машинных кодов 01010101.

А ассемблер это команд которые потом переводятся в машинные коды. Машинные коды уже интерпретирует непосредственно процессор.
Аноним 07/07/19 Вск 14:12:01 19952868113
>>199528385
Instruction set это ассемблер. На пикче разделяют Assembly level (Instruction set, или Machine code), и ЯП Ассемблер
Аноним 07/07/19 Вск 14:28:10 19952952514
>>199528681
То есть если взять условный С, то сишный код транслируется осью в ассемблер, а ось уже исполняет полученый набор команд? Исправь, если я не ошибаюсь.
Аноним 07/07/19 Вск 14:28:54 19952956515
Аноним 07/07/19 Вск 14:38:15 19952998816
>>199528681
Короче я походу понял.

Типа Assembly language level это именно язык, сам синтаксис, для упрощения написания команд на ассемблере человеком.
А Instruction set architecture level это как раз те команды, которые исполняются компьютером на уровне железа и о синтаксическом представлении там уже речи не идёт.

Правильно?
Аноним 07/07/19 Вск 14:43:08 19953021517
>>199527722 (OP)
Тут наверное связано с архитектурой x86 и её кольцами защиты.
Имеется ввиду, что приложение на ассемблере под конкретную ОС имеет меньше прав, чем сама ОС.
Так как ОС работает в привелегированном режиме.
Ты можешь писать программы на асме\С без конкретной ОС, но тебе придется реализовывать в ней её функции.
Хотя, может я не прав.
Аноним 07/07/19 Вск 14:47:40 19953041718
>>199529525
сишный код компилируется компилятором в бинарный вид (0 и 1). стадии такие: препроцессинг, перевод кода в ассемблер, перевод в object code и линковка.

>>199529988
для простоты понимания: идет от высшего уровня к нижнему, где язык типо С++ на высшем уровне, и бинарный код (0 и 1) на нижнем.
перевести 0 и 1 в набор инструкций можно.
Аноним 07/07/19 Вск 14:51:43 19953057119
>>199530417
А я так понял - просто ОС реализует абстракции и функции, которые предоставляет программе, это её суть.
Вот поэтому она и ниже уровнем.
>>199530215 - кун
Аноним 07/07/19 Вск 14:51:48 19953057520
>>199529988
Assembly language level -- это на полуровня ниже компилируемого языка (вроде С++)
На уровне железа выполняется машинный код (набор инструкций для этого железа переходит в машинный код)
Аноним 07/07/19 Вск 14:54:01 19953067621
>>199530571
ОС процессит код ассемблера, поэтому
Аноним 07/07/19 Вск 14:59:10 19953093022
>>199527722 (OP)
Нашел че читать, бля. Таненбаум твой черт который нихуя не смыслит в устройстве компа.
Аноним 07/07/19 Вск 15:00:32 19953099623
>>199530930
Почему?
Что тогда читать?
Аноним 07/07/19 Вск 15:02:43 19953110624
>>199530575
Ну то есть мыслю я в правильном направлении?
Аноним 07/07/19 Вск 15:03:04 19953112925
>>199530996
нормально все, Таненбаум дает представление как раз о том, как код обрабатывается.

>>199531106
да.
Аноним 07/07/19 Вск 15:04:08 19953119626
Не читал
Аноним 07/07/19 Вск 15:04:31 19953121627
Тред не читал.

На схеме под Instruction Set architecture Level имеется ввиду набор инструкций процессора.
Потенциально, в теории, программист может использовать этот набор инструкций для написания чего-то своего, например, своего загрузчика ОС. Или своего обработчика сигналов (но этим никто не занимается). Более правдоподобно - этот набор инструкций используется для создания загрузчиков Операционных систем. Вот например, набор инструкций для AMD: https://www.amd.com/system/files/TechDocs/24592.pdf

Операционная система сейчас содержит средства для безопасного управления периферией (сетевые карты, видеокарты, ввод-вывод, ну такое). Она имеет свой собственный бинарный формат для программ (POSIX, PE) У Андроида вообще два уровня: POSIX, под который так просто не слинковать программу, и JAR - формат Java-машины, которая транслирует комманды в POSIX

Ассемблер (TASM, MASM, FASM, NASM) - это еще один язык программирования, который просто очень похож на набор инструкций процессора. Компилятор Ассемблера исходный код из текстового файла преобразует в бинарный формат операционной системы (POSIX, PE) и программа будет выполнятся в среде операционной системы, наравне с другими пользовательскими программами, написанными, например на С++.
В древности многие компиляторы высокоуровневых языков могли создавать Листинг - код программы на ассемблере, который потом дальше преобразовывали в бинарный файл ОС (Паскаль точно так мог). Но сейчас в этом необходимости нет, С++ создает сразу бинарный файл Объектные файлы - это просто побочный продукт работы компилятора и линкера
Аноним 07/07/19 Вск 15:09:14 19953149028
А вообще, книги Таненбаума древние, там многие вещи могут оказаться устаревшими.

Если ОП хочет делать что-то интересное, то пусть читает материалы по запросу Windows Internals или Linux Internals
Аноним 07/07/19 Вск 15:11:18 19953161129
>>199530676
В смысле процессит код ассемблера? У любой ос есть свой формат исполняемого файла, и файлы эти - бинарные, это максимум, что она процессит, попутно предоставляя виртуальную адресацию, файлы, сокеты, прерывания и прочие абстракции.

Не все функции процессора доступны в безопасном режиме, из этого режима переключиться в другой может только ОС, ну или твоя программа, работающая без ОС и проделавшая кое-какие манипуляции при старте процессора для получения такой привелегии.
Аноним 07/07/19 Вск 15:12:51 19953171330
>>199531611
в прямом смысле процессит, из текстового вида в бинарный код
Аноним 07/07/19 Вск 15:13:18 19953173931
>>199531129
> да
Хорошо, спасибо.

>>199531216
В таком случае здесь >>199529988 я всё правильно понял.

Спасибо все анонам, тред можно закрывать.
Аноним 07/07/19 Вск 15:13:39 19953175332
>>199531216
Так, постой. Разве все работает не через обращение высокоуровнево языка к ОС, ОС к ассамблеру, ассамблера к машинному коду, а там уже интерпретация логических нулей и единиц в сигналы и битовые операции?
Аноним 07/07/19 Вск 15:22:16 19953219333
>>199531713
Чувак, ты хуйню сморозил.
Программы хранятся в двоичном виде, ни в каком не ассемблерном коде. Может и есть такая ОС - но это вообще плохое решение, транслировать программу во время исполнения. Хотя есть такие вещи как JIT. Но это не относится к ОС, и JIT нужна не для этих задач.
Аноним 07/07/19 Вск 15:25:25 19953235034
>>199532193
а как они в этот бинарный код попали из текста в IDE?
Аноним 07/07/19 Вск 15:26:21 19953239335
>>199532350
Иди учи матчасть, не у меня спрашивай.
Читай что такое транслятор.
Аноним 07/07/19 Вск 15:30:24 19953261536
>>199532393
ты обдвачевался, бро, не ОС ли линкует и транслирует? я про ОС как уровень в архитектуре, а не как отдельно стоящий термин.
Аноним 07/07/19 Вск 15:35:31 19953284337
>>199531753
Ну няшенька. Это же материал первого-второго курса.

Есть компилируемые языки (С++), есть интерпретируемые языки (Python). Есть языки, которые работают в своей коробочке (1С) .

Компилируемые языки: код из текстового файла преобразовывается в бинарный формат ОС. Операционная система читает полученный бинарный файл и обращается к машинным ресурсам посредством драйверов. А драйвера - это уже ближе к машинному коду, они направляют команды к периферийным устройствам. Например, программа на С - записать что-то в файл. В программе мы использовали две инструкции - fopen открыть файл и fprintf записать в файл. Компилятор и линкер сделают нам exe файл, где будут в бинарном виде закодированы вызовы WinApi (OpenFile и WriteFileW) или линуксовых подпрограмм. Дальше пишу для windows, в линуксе нету опыта. Операционная система выполнит вызовы этих подпрограмм и будет выполнять код из Kernel32.dll . Что там происходит - я могу только предполагать. Думаю, будет вызван драйвер файловой системы. Драйвер файловой системы поймет, в какой сектор жесткого диска нужно написать данные, чтобы они оказались в нужном фале и файловая таблица была правильной. Потом будет вызван драйвер работы с жестким диском, и ему будет передана последовательность байт, которые нужно записать в сектор. Драйверу жесткого диска все равно, что это за байты и что за адрес куда писать. Он просто передаст дальше вызов на драйвер SATA шины, который начнет магию - синхронизация, начало передачи, контроль четности, передача данных, это все. На другом конце шины жесткий диск примет сигнал и запишет данные, как его попросили.
Аноним 07/07/19 Вск 15:38:31 19953298038
>>199532843
Программист не должен самостоятельно беспокоиться о целостности файловой системы, а тем более - о корректности передачи по шине, если он просто хочет записать текстовый файл.
Аноним 07/07/19 Вск 15:41:05 19953308239
>>199532980
Думаю для этого и создали ОС. Но понимание всего лишним не будет.
Аноним 07/07/19 Вск 15:44:10 19953323740
>>199527722 (OP)
Потому что ассемблер это перевод названия команд в коды, эти коды записываются в файл с расширением .exe и потом уже OC берёт этот файл, читает его и превращает набор чисел в какие-то действия.
Аноним 07/07/19 Вск 15:46:53 19953337141
>>199532843
Дальше - языки, которые работают в своей коробочке. 1С работает в своей собственной среде, называется Конфигурация. 1С 8.3 регистрирует в Операционной системе собственный сервис. В этом сервисе-коробочке выполняется предварительно скомпилированный код 1С. Программист, например, хочет записать какой-нибудь бухгалтерский документ, да хоть провести поступление по складскому регистру накопления. Сервис-коробочка распознает вызов и сделает запись в реляционную таблицу базы данных куда именно - хз. Работал только пять месяцев 1С трейни, а в реальном строении базы данных не разбираются даже монстр-сениоры. Сервис базы данных передаст вызов дальше, к файловой системе, и так далее...
Аноним 07/07/19 Вск 15:48:22 19953345042
>>199531216
гцц и сейчас может листинг тебе сделать
Аноним 07/07/19 Вск 15:53:02 19953367743
>>199533082
Ну как сказать...
Если мы говорим - НАТИВНЫЙ КОД, то считается, что он выполняется в среде операционной системы. Это - песочница, которую для тебя построили, чтобы не разбил дорогие игрушки и чтобы не поранился сам :3 . Можешь вылезти из песочницы и полазать по детской площадке, но там грязно и дядюшки-архитекторы это не одобряют. Если боишься играть в песочнице, для тебя могут сделать песочницу внутри песочницы с отфильтрованным песочком, и даже немного подмешать сахара.
Аноним 07/07/19 Вск 15:53:07 19953368044
>>199532843
А в каком месте там прерывания участвуют? Вот на ассемблере когда пишешь, чтобы напечать что-то нужно поставить управляющие флаги, типа в один регистр 1, в другой 4,(это будет означать печать, а например поставишь 3 это будет означать чтение) загрузить в третий сообщение и вызвать прерывание. Вот в каком месте твоей схемы это находится?
Аноним 07/07/19 Вск 15:57:47 19953388945
>>199533680
Ну вот типа того, где тут драйвера используются или что, не понимаю
section .text
global _start ;must be declared for linker (ld)

_start: ;tell linker entry point

mov edx,len ;message length
mov ecx,msg ;message to write
mov ebx,1 ;file descriptor (stdout)
mov eax,4 ;system call number (sys_write)
int 0x80 ;call kernel

mov eax,1 ;system call number (sys_exit)
int 0x80 ;call kernel

section .data

msg db 'Hello, world!',0xa ;our dear string
len equ $ - msg ;length of our dear string
Аноним 07/07/19 Вск 15:58:53 19953395646
>>199533889
>mov eax,4 ;system call number (sys_write)
>int 0x80 ;call kernel
>
А, всё, понял, вот тут вызов к условному kernel.dll и его функции с номером 4(sys_write)
Аноним 07/07/19 Вск 16:01:40 19953408947
>>199533680
Прерывания - это скорее работа с шиной и системными ресурсами.

>>Вот на ассемблере когда пишешь, чтобы напечать что-то нужно поставить управляющие флаги, типа в один регистр 1, в другой 4,(это будет означать печать, а например поставишь 3 это будет означать чтение) загрузить в третий сообщение и вызвать прерывание.

Это дичь времен MS DOS. Ее не должно быть в программах на пользовательском уровне в 2019. Современная Win 10 такое вообще обработает?

Хотя, то что тут описано вполне допустимо в коде какого-то загрузчика, когда операционная система с ее драйверами еще не запущена.
Аноним 07/07/19 Вск 16:02:05 19953410548
>>199532615
Ты связываешь вещи теряя контекст. Ты вообще хуйню не

Линкует и транслирует компилятор.
Это вообще не относится к схеме, ты неправильно думаешь.

Ты можешь на одном компьютере написать свою ОС. А запустить на другом.

Что ОС не работает без ассемблера - бред, они на нем пишутся, но ОС - такая же программа на машинном коде в итоге.

Я еще раз повторяю: ОС предоставляет свой код, функции программе. Тебе не нужно каждый раз писать логику работы с жестким диском, например, или считать адреса, это за тебя реализовано в ОС.
Аноним 07/07/19 Вск 16:04:56 19953423749
imgonline-com-u[...].jpg (1331Кб, 1920x2560)
1920x2560
освятил
Аноним 07/07/19 Вск 16:05:06 19953424550
>>199534089
>win10 такое обработает
Мб в винде это обернуто и там можно писать call printf, я хз, в линуксе так по идее.
Аноним 07/07/19 Вск 16:06:07 19953429451
>>199534105
>они на нем пишутся,
Кто? Зачем? ОС пишутся на Си и С++.
Аноним 07/07/19 Вск 16:06:17 19953430452
Аноним 07/07/19 Вск 16:07:00 19953433853
Аноним 07/07/19 Вск 16:08:20 19953439754
>>199534338
Это вин32, а я про линукс, у него мб нет синтаксического сахара этого.
Аноним 07/07/19 Вск 16:09:29 19953445955
>>199534294
Без ассемблера не обойтись в разработке ОС. Какие то части пишутся именно на нём.
Аноним 07/07/19 Вск 16:09:49 19953447456
>>199534338
Суть-то та же, с помощью прерывания дёргается обработчик и потом берёт из регистров 4(которая значит принт) и 1(которая значит stdout) и вызывает первое на втором с аргументом мсг.
Аноним 07/07/19 Вск 16:10:05 19953448957
>>199533237
> эти коды записываются в файл с расширением .exe
Дальше не читал. Учи мат часть, умник. Комплюктеры идут куда дальше школьного курса информатики.
Аноним 07/07/19 Вск 16:10:44 19953452658
Аноним 07/07/19 Вск 16:11:56 19953458759
Аноним 07/07/19 Вск 16:12:03 19953459660
>>199534489
Просто я пробовал писать прямо в хексе ассемблерный хелловорд и всё получалось, можно прямо в хексе погромировать по сути, а ос уже исполнит твою бинарную писанину.
Аноним 07/07/19 Вск 16:13:01 19953463961
>>199534587
Ну и что? Я не понимаю, называя файл .exe ты показываешь оси, что его можно запускать, только и всего, у тебя там последовательность байт лежит, ты его называешь ексе и ось потом запускает эту последовательность. Что не так?
Аноним 07/07/19 Вск 16:14:16 19953471162
>>199534397
Все есть.
https://en.wikipedia.org/wiki/Exit_(system_call)
https://linux.die.net/man/2/exit

Добрые дяди-архитекторы подвезли для нас песочка с сахаром. Мы можем строить песочные замки любых форм и размеров не вылезая из песочницы. А если полить водичкой сверху и укрепить палочками, то наш замок будет стоять очень долго. Не вылезай из песочницы, тут есть все что нужно :3
Аноним 07/07/19 Вск 16:15:40 19953479663
>>199534711
Так она и вызывается как бы, когда ты пишешь
mov eax,1
int 0x80
Я имел ввиду в линуксовом ассемблере вроде бы нельзя написать
call exit
Аноним 07/07/19 Вск 16:18:15 19953492964
>>199534639
В Линуксе вообще интересно. Там нету стандартного расширения для исполняемых файлов. Для того, чтобы показать, что файл можно запускать нужно просто указать chmod +x <file> Но если там не окажется заголовка POSIX в начале, или по первой строчке операционная система не поймет, какой интерпретатор использовать для запуска (bash, python например), то получим ошибку
Аноним 07/07/19 Вск 16:18:52 19953496465
>>199534639
Начнем с того, что ехе это чисто мелкософтовская фича, и на какомнить линухе ее точно не будет => она не обязательно станет ексешной.
>>199534596
Это такой тролинг тупостью? В контекст можешь? Как я понял, ты написал в хексе хеловорлд, как дяденьки в бородатые времена, и он стал ексешным? Ты же понимаешь что ехе он благодаря твоему хекс едитору и соответсвено оси.
Аноним 07/07/19 Вск 16:23:22 19953520066
>>199534964
Ну на линуксе свой ексе, суть ведь та же, .elf там какой или вообще без расширения
>ь что ехе он благодаря твоему хекс едитору и соответсвено оси.
Чё? Ексе он благодаря тому, что я его назвал ексе и правильные заголовки и тд добавил перед самим кодом. Хуйню какую-то пишешь.
>>199534929
Да это просто способ сказать оси, что это исполняемый файл, типа ассемблер переводит команды в коды команд, пишет их, потом оборачивает во всякую стандартную хуйню, заголовки там и тд, чтобы ось поняла, что это исполняемый файл и всё, а дальше уже ось работает и превращает эти последовательности в результат, исполняет типа.
Аноним 07/07/19 Вск 16:49:52 19953642867
>>199535200
> что я его назвал ексе и правильные заголовки и тд добавил перед самим кодом
> благодаря оси
Хуй соси бочку делай
Аноним 07/07/19 Вск 16:53:17 19953659568
>>199536428 - дополню

>>199535200
>Ну на линуксе свой ексе, суть ведь та же, .elf там какой или вообще без расширения
exe!=elf. И тебе не обязательно он создаст исполняемый файл.
Аноним 07/07/19 Вск 17:02:03 19953702069
Настройки X
Ответить в тред X
15000 [S]
Макс объем: 20Mб, макс кол-во файлов: 4
Кликни/брось файл/ctrl-v
X
Ваш шидевор X
Стикеры X
Избранное / Топ тредов