LINUX.ORG.RU

История изменений

Исправление MOPKOBKA, (текущая версия) :

А если нужно составное условие чуть посложнее jnz?

Есть and, or в распоряжении программиста. Но конечно одна строка в С может выйти в несколько команд на ассемблере.

Мы тут паттерн матчинг обсуждаем, одна строка паттерн матчинга вполне в десяток строк на С выйдет тоже.

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

Можешь, я не отрицаю. Но даже если нету взаимодействия с С, обычно следуют какому то соглашению, например что бы были регистры которые функции не трогают. И в такое соглашение можно посмотреть, и распределять регистры просто от первого до последнего по номеру.

Если в коде полная анархия, то это уже сложно, но такое оправданно можно размещать только в горячем пути.

Но вот кстати ещё одна проблема асма - громозкий вызов внешних библиотек.

Для этого макрос пишут, вот пример из FASM\EXAMPLES\DIALOG.ASM

invoke CheckRadioButton, [hwnddlg], ID_ICONERROR, ID_ICONWARNING, ID_ICONINFORMATION

Хранить переменные на стеке можно, но неэффективно, зачем тогда нужен асм, gcc с ключем -O2 их эффективнее по регистрам раскидает.

Ну вот можно взять лямбды в С, правильно написать их, передать все контексты и уследить за памятью, это задача посложнее чем провести распределение регистров в уме. Это покажет пропасть между С и OCaml, равную пропасти между FASM и C?

Исправление MOPKOBKA, :

А если нужно составное условие чуть посложнее jnz?

Есть and, or в распоряжении программиста. Но конечно одна строка в С может выйти в несколько команд на ассемблере.

Мы тут паттерн матчинг обсуждаем, одна строка паттерн матчинга вполне в десяток строк на С выйдет тоже.

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

Можешь, я не отрицаю. Но даже если нету взаимодействия с С, обычно следуют какому то соглашению, например что бы были регистры которые функции не трогают. И в такое соглашение можно посмотреть, и распределять регистры просто от первого до последнего по номеру.

Если в коде полная анархия, то это уже сложно, но такое можно представить только в горячем пути.

Но вот кстати ещё одна проблема асма - громозкий вызов внешних библиотек.

Для этого макрос пишут, вот пример из FASM\EXAMPLES\DIALOG.ASM

invoke CheckRadioButton, [hwnddlg], ID_ICONERROR, ID_ICONWARNING, ID_ICONINFORMATION

Хранить переменные на стеке можно, но неэффективно, зачем тогда нужен асм, gcc с ключем -O2 их эффективнее по регистрам раскидает.

Ну вот можно взять лямбды в С, правильно написать их, передать все контексты и уследить за памятью, это задача посложнее чем провести распределение регистров в уме. Это покажет пропасть между С и OCaml, равную пропасти между FASM и C?

Исправление MOPKOBKA, :

А если нужно составное условие чуть посложнее jnz?

Есть and, or в распоряжении программиста. Но конечно одна строка в С может выйти в несколько команд на ассемблере.

Мы тут паттерн матчинг обсуждаем, одна строка паттерн матчинга вполне в десяток строк на С выйдет тоже.

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

Можешь, я не отрицаю. Но даже если нету взаимодействия с С, обычно следуют какому то соглашению, например что бы были регистры которые функции не трогают. И в такое соглашение можно посмотреть, и распределять регистры просто от первого до последнего по номеру.

Но вот кстати ещё одна проблема асма - громозкий вызов внешних библиотек.

Для этого макрос пишут, вот пример из FASM\EXAMPLES\DIALOG.ASM

invoke CheckRadioButton, [hwnddlg], ID_ICONERROR, ID_ICONWARNING, ID_ICONINFORMATION

Хранить переменные на стеке можно, но неэффективно, зачем тогда нужен асм, gcc с ключем -O2 их эффективнее по регистрам раскидает.

Ну вот можно взять лямбды в С, правильно написать их, передать все контексты и уследить за памятью, это задача посложнее чем провести распределение регистров в уме. Это покажет пропасть между С и OCaml, равную пропасти между FASM и C?

Исправление MOPKOBKA, :

А если нужно составное условие чуть посложнее jnz?

Есть and, or в распоряжении программиста. Но конечно одна строка в С может выйти в несколько команд на ассемблере.

Мы тут паттерн матчинг обсуждаем, одна строка паттерн матчинга вполне в десяток строк на С выйдет тоже.

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

Можешь, я не отрицаю. Но даже если нету взаимодействия с С, обычно следуют какому то соглашению, например что бы были регистры которые функции не трогают.

Но вот кстати ещё одна проблема асма - громозкий вызов внешних библиотек.

Для этого макрос пишут, вот пример из FASM\EXAMPLES\DIALOG.ASM

invoke CheckRadioButton, [hwnddlg], ID_ICONERROR, ID_ICONWARNING, ID_ICONINFORMATION

Хранить переменные на стеке можно, но неэффективно, зачем тогда нужен асм, gcc с ключем -O2 их эффективнее по регистрам раскидает.

Ну вот можно взять лямбды в С, правильно написать их, передать все контексты и уследить за памятью, это задача посложнее чем провести распределение регистров в уме. Это покажет пропасть между С и OCaml, равную пропасти между FASM и C?

Исправление MOPKOBKA, :

А если нужно составное условие чуть посложнее jnz?

Есть and, or в распоряжении программиста. Но конечно одна строка в С может выйти в несколько команд на ассемблере.

Мы тут паттерн матчинг обсуждаем, одна строка паттерн матчинга вполне в десяток строк на С выйдет тоже.

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

Можешь, я не отрицаю. Но даже если нету взаимодействия с С, обычно следуют какому то соглашению.

Но вот кстати ещё одна проблема асма - громозкий вызов внешних библиотек.

Для этого макрос пишут, вот пример из FASM\EXAMPLES\DIALOG.ASM

invoke CheckRadioButton, [hwnddlg], ID_ICONERROR, ID_ICONWARNING, ID_ICONINFORMATION

Хранить переменные на стеке можно, но неэффективно, зачем тогда нужен асм, gcc с ключем -O2 их эффективнее по регистрам раскидает.

Ну вот можно взять лямбды в С, правильно написать их, передать все контексты и уследить за памятью, это задача посложнее чем провести распределение регистров в уме. Это покажет пропасть между С и OCaml, равную пропасти между FASM и C?

Исправление MOPKOBKA, :

А если нужно составное условие чуть посложнее jnz?

Есть and, or в распоряжении программиста. Но конечно одна строка в С может выйти в несколько команд на ассемблере.

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

Можешь, я не отрицаю. Но даже если нету взаимодействия с С, обычно следуют какому то соглашению.

Но вот кстати ещё одна проблема асма - громозкий вызов внешних библиотек.

Для этого макрос пишут, вот пример из FASM\EXAMPLES\DIALOG.ASM

invoke CheckRadioButton, [hwnddlg], ID_ICONERROR, ID_ICONWARNING, ID_ICONINFORMATION

Хранить переменные на стеке можно, но неэффективно, зачем тогда нужен асм, gcc с ключем -O2 их эффективнее по регистрам раскидает.

Ну вот можно взять лямбды в С, правильно написать их, передать все контексты и уследить за памятью, это задача посложнее чем провести распределение регистров в уме. Это покажет пропасть между С и OCaml, равную пропасти между FASM и C?

Исходная версия MOPKOBKA, :

А если нужно составное условие чуть посложнее jnz?

То есть and, or в распоряжении программиста.

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

Можешь, я не отрицаю. Но даже если нету взаимодействия с С, обычно следуют какому то соглашению.

Но вот кстати ещё одна проблема асма - громозкий вызов внешних библиотек.

Для этого макрос пишут, вот пример из FASM\EXAMPLES\DIALOG.ASM

invoke CheckRadioButton, [hwnddlg], ID_ICONERROR, ID_ICONWARNING, ID_ICONINFORMATION

Хранить переменные на стеке можно, но неэффективно, зачем тогда нужен асм, gcc с ключем -O2 их эффективнее по регистрам раскидает.

Ну вот можно взять лямбды в С, правильно написать их, передать все контексты и уследить за памятью, это задача посложнее чем провести распределение регистров в уме. Это покажет пропасть между С и OCaml, равную пропасти между FASM и C?