История изменений
Исправление
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?