Войти
ПрограммированиеФорумОбщее

Кроссплатформенный ассемблер (4 стр)

Страницы: 1 2 3 4 5 Следующая »
#45
(Правка: 2:15) 1:47, 14 июня 2019

Ivashka
> А что такое асм и чем он отличается от сиплюсплюс
компилятор транслирующий в интерпретатор машинного языка на процессоре(то что лежит ниже операционной системы чаще всего интерпретируется,то что лежит выше операционной системы чаще всего компилируется но потом все равно спускается на процессор средствами операционной системы.задумайтесь над словами — драйвер принтера для операционной системы Windows или драйвер принтера для операционной системы Linux/ ведь не подают же типа драйвер принтера для процессора AMD или  драйвер принтера для процессора Intel) отличается размерами 5х-10х , типа одна команда с++ = 5...10 команд машинного языка
в сути не отличается. с++ подает некоторые удобства человеку и то без списывания готовеньких уроков с инетов не понять ни хрена,  а процессору вообще пофиг, процессоры вообще все разные , а так как нет единого процессора то нет и единого компилятора транслирующего в интерпретатор единого машинного языка на едином процессоре -—— кросс-ассемблера нету.финита ла комедио, тему можно закрывать.


#46
(Правка: 2:22) 2:13, 14 июня 2019

skalogryz
> если я правильно помню, ты мне её уже давал, но я её проезабыл!
Боюсь это практически невозможно если только тут такого не было. Заново собрать можно попробовать, удаляя все лишнее из System.pas, SysInit.pas,

Далее импортировать из библиотек только динамически

const
  advapi32 = 'advapi32.dll';
  kernel = 'kernel32.dll';
  user = 'user32.dll';
  oleaut = 'oleaut32.dll';
Это не долго.

У меня они 1995 года.

#47
4:59, 14 июня 2019

eDmk
> VCL не использую.
Тогда зачем тебе делфа?

#48
(Правка: 6:25) 5:03, 14 июня 2019

skalogryz
> т уж не знаю плакать или радоваться, что Паскаль стал ниже уровнем, чем Си.
А он никогда высокого уровня и не был, си никогда не был ни низкого, ни промежуточного.

#49
5:08, 14 июня 2019

skalogryz
> Паскаль, по-умолчанию, высокоуровненее, чем Си, потому что в нём идёт хороший
> такой RTL. А потом к
Сначала попробуй на сях в обход встронного ассемблера вызвать прерывание, а потом рассуждай про RTL. На паскеле это делается. Причём, полностью, от передачи параметров до непосредственно вызова. А параметры прерывание принимает только через регистры, про которые си даже на догадывается, а модификатор register означает указание кодогенератору оптимизировать хранение переменной для максимально быстрого доступа. Да, если она одна, то это регистр. А если их 100 таких? Или вообще все?

#50
(Правка: 5:39) 5:32, 14 июня 2019

foxes
> Ну допустим, если у меня на том же Delphi "writeln('hello world');" занимает 4 килобайта все приложение, то что так?
А ты в экзешник все зависимости включи, чтобы он мог не только у тебя запускаться и сразу поймёшь!
Я тоже не сразу плюсы осилил, сначала дельфи, потом сравнил экзешники и облез = разница, как между небом и землёй.
Но только не «Hellow world!», а какое-нибудь маломальское приложение с компонентами :)
Для консольных и Win32-приложений мне за глаза хватает MinGW = работает как швейцарские часы и размер проекта минимальный.
P.S. Пробовал относительно недавно ставить свежую RAD Studio, глючность редактора настолько поразила, что плюнул и окончательно забил.
Последнее время все эти студии всё больше и больше начинают напоминать UE4 = рантайм заебатый, а редактор говно!

#51
(Правка: 6:06) 6:00, 14 июня 2019

Rikk
> а как отмерять этот уровень — равный ему или немножко выше
> от ноля уровня воды поверхности планеты. или как.
По абстракции. Если абстракции нет, то ты шьёшь медным проводом память на ферритовых кольцах. Минимальная абстракция – это замена провода числами. В опкодах тебя уже не интересует, на кольцах память, или на биаксах, или вообще электронная. Следующая абстракция – замена чисел мнемониками, язык ассемблера. На этом языке уже не важно, как именно закодированы операции и где в коде место коду регистра. Над какими бы регистрами ни выполнялась операция, на экране у тебя отдельно код операции, единый для всей операции при любых её операндах, и отдельно указаны операнды. На следующем уровне абстракции тебя уже не интересует, реализовано ли сложение как элементарная операция, а увеличение

b+=r
как
скопировать в буфер № текущее значение b.
b=buffer+r.
или, наоборот, увеличение элементарно, а сложение
b=w+r
реализовано так:
Скопировать w в b
увеличить b на r
. На следующем уровне абстракции тебя уже перестанет волновать, где конкретно хранятся данные и реализовано ли сложение двойных слов так:
сложить младшие слова и запомнить перенос
сложить старшие слова
если был перенос, то увеличить сумму старших слов на 1
, а сложение слов элементарно, или же элементарно сложение двойных слов, а сложение слов реализовано так:
скопировать первое слагаемое в первый буфер
скопировать второе слагаемое во второй буфер
сложить и поместить результат в третий буфер
скопировать младшее слово буфера в переменную
. Следующий уровень – объединение нескольких скалярных величин в одну не скалярную. Есть ещё вызовы и возвраты. На языке ассемблера для них юзаются мнемоники. Есть ещё вызовы, у них свои уровни абстракции. Для них есть команды процессора CALL и INT, все процедуры и обработчики прерываний лежат по адресам, прерывания кроме того имеют номера, эти адреса указываются как операнды CALL, а номера – как операнды INT, а параметры передаются через регистры, стек, или через отведённую каждой подпрограмме область памяти, результат возвращается также одним из этих способов. На следующем уровне тебя уже не интересуют адреса процедур, для процедуры вызываются по номеру строки, а параметры передаются через переменные и через них же возвращается результат, а о прерываниях можно вообще не догадываться, программа их вообще не замечает, просто когда нужен ввод, вызывается ещё одна процедура, или даже выполняется оператор языка и нужное данное помещается в переменную. На следующем уровне абстракции процедуры уже вызываются не по номера строк, а по именам и синтаксически отделены от остального текста программы, а параметры передаются через специальные переменные, объявленные в заголовке каждой процедуры и через них же возвращается результат. И тебя уже не интересует, реализована ли передача параметров через стек, через регистры, или каждый параметр имеет свой глобальный адрес, по которому копируется его значение. Для тебя процедура просто имеет имя и параметры.
proc(w, r, z);
и никаких гвоздёв, процедура уже вызвана и параметры ей переданы. А как это сделано на самом деле значения не имеет. А если вдруг в процедуре max, принимающей десять входных параметров и возвращающей результат через одиннадцатый, понадобилось перебрать входные параметры с помощью адресной арифметики, то придётся найти в справочнике соглашение о вызовах, чтоб узнать, какой параметр лежит в памяти после какого. И это соглашение будет вне самого языка, а при переносе на другой транслятор программа может упасть. Да, есть соглашения, характерные для трансляторов с определённых языков. Но не более, чем характерные. Даже если кто-то пропишет соглашение о вызовах в стандарте языка, это никому не помешает написать не стандартный транслятор, шлющий стандартное соглашение нафиг, а там реализовать своё соглашение. И если никому не потребуется перебирать параметры адресной арифметики, то нестандартность транслятора не будет замечена. На том же уровне появляются ещё функции, возвращающие значения через собственные имена. И тебя не волнует, возвращается ли значение через вершину стека, через регистр, или имеет глобальный адрес. Ты просто присваиваешь
q=f(w, r, z);
и значение будет в переменной q. Следующий уровень общий для вызовов и остального. Это объединение данных с кодом в одну сущность – класс. В паскале есть всё перечисленное, но единственный способ перекрасить консоль – вызов прерывания и он делается в обход встроенного ассемблера. На c/c+ такой вызов в обход встроенного ассемблера не возможен. Обратите внимание: сисемблер знаменит, а пасквилярны про аналогичный оператор даже не все знают.
#52
(Правка: 6:07) 6:02, 14 июня 2019

skalogryz
> var
> s1, s2: string;
> s : string;
> begin
> s1 := ...
> s2 := ...
> s := s1 + s2;
>
> а в Си, как такое сделать?
Да запросто.

std::string s1, s2;
std::string s;
s1="sdfffgsdf";
s2="564regfds";
s=s1+s2;
И даже на голом с для этого есть функции, никак с процессором не связанные.
#53
6:20, 14 июня 2019

skalogryz
> А в Си такого нет; Там будь добр подключи нужный (из тысячи) хедер, и вызови
> нужную (из тысячи) функции.
А на паскале надо подключать файлы для того, чтоб просто видеорежим задать. И что? Ты же всё равно орёшь, что уровень паскаля выше. А ещё на паскале приходится вызывать процедуру даже для того, чтоб из стринга реал вытащить и в переменную засунуть. На c++ я могу написать так:

MyString s;
double w;
std::cin>>s;
w=s;
. Никаких функций, только присваивание. А за париснг строки отвечает оператор приведения типа. Да даже округление делается только функцией. А на си++ можно так:
double w,q;
int r;
q=23.64;
w=sqr(q);
r=w;
. И никаких гвоздёв. Ну округление будет вниз, а не к ближайшему. Вам надо к ближайшему? Пожалуйста:
double w,q;
int r;
q=23.64;
w=sqr(q);
r=w+0.5;
. Вот только сама функция – уже абстрация. Бейсик – язык высокого уровня, а языки, поддерживающие функции, выше уровнем, чем бейсик. Выше, а не ниже. Но паскаль всё равно болтается на промежуточном из-за прерываний и прямого доступа к регистрам.
#54
(Правка: 6:23) 6:22, 14 июня 2019

Тарас-Прогер
> Да запросто.
ты зачем мне кресты показываешь? :)

не путай си и си++

#55
6:24, 14 июня 2019

Rikk, а по-русски? Я вот ирокез и твой пост даже не разлексил, неговоря о понимании.

#56
6:26, 14 июня 2019

Daniil Petrov
> !
> Я тоже не сразу плюсы осилил, сначала дельфи, потом сравнил экзешники и облез =
> разница, как между небом и землёй.
Да кто ж сразу за плюсы берётся? Начинать надо с паскаля, или его потомка.

#57
(Правка: 6:52) 6:32, 14 июня 2019

Тарас-Прогер
> Да кто ж сразу за плюсы берётся? Начинать надо с паскаля, или его потомка.
Ну вот и у меня не получилось, как взялся за программирование на ПК.
Сначала Visual Basic пощупал по нескольким видеоурокам, чтоб понять, что такое программирование оконных компонентов.
Потом Дельфи, а потом уже C++, просто Дельфи и Плюсы я осваивал не по книжкам, а методом тыка вникал в исходники, поэтому плюсы сразу и не дались.
Разобравшись с классами, я далеко не сразу узнал такие выражения, как методы и свойства класса, для меня это были просто функции и переменные :)

#58
(Правка: 9:24) 6:34, 14 июня 2019

Rikk
> exe(в байтах)/его размер ВСЕХ исходников=N
> N=? цифра
> какое отношение.число.цифра.
>
А если я на паскале напишу 6 мегабайт мёртвого кода, а экзешник займёт 400 килобайт, то паскаль сразу станет ниже уровнем, чем опкоды? Ничего, что ниже уровнем может быть только непосредственно ручное шитьё ПЗУ, ручной прожиг бугров на CD/DVD, ручная пробивка перфокарт/перфолент, или ручное намагничивание ленты, или блина «винчестера»? И не надо рассказывать, что это не возможно. У меня в текущем проекте исходник уже 3,61 магабайта с учётом только основного файла, а начат в этом месяце. Только мёртвым кодом я не увлекаюсь, даже наоборот. Но если специально задаться такой целью, то можно за лето нафигачить и шесть мегов мёртвого.

#59
(Правка: 8:43) 8:42, 14 июня 2019

>ниже уровнем, чем опкоды
Тихо! А то расстроится чувак. Он свою вселенную строит. В ней паскалю нет места.

>модуль System подключается неявно.
Они все одинаково подключаются.
У меня лицензия, потому все исходники поставляются с пакетом.
Даже ассемблерные inc'и.

А соревноваться в построении EXE размером  1-2 Кб нет нужды.
И ваще холиворщиков не люблю. Отвлекают только.

>Тогда зачем тебе делфа?
Просто к Паскалю привык + купил лицензию. Ну не выкидывать же ;)

Страницы: 1 2 3 4 5 Следующая »
ПрограммированиеФорумОбщее