Двач, вот он я - дебил.Надо решить этот пример в ассемблере. Но у меня встал вопрос в третьем действии: я понял, что нихуя не понял, а именно - мне не понятно, как записывать отрицательное число.Вот рисую эту ебливую табличку с регистрами и нихуя не понимаю, что туда писать. Инвертировать что ли или чтоооааа
Бамп
2
Ради бога прошу умоляю 3
4
5
6
7
8
9
А
В
С
>>142981958 (OP)Емнип, знак отрицательного числа хранится в регистре флагов. Чекай его и прыгай куда надо.
если плюс - прямой кодесли нет - дополнительный кодскладывай, макака
Нахуя тебе отрицательное число, поехавший?11x2 в ax6x4 в bxsub ax, bxну или что-то подобное
>>142982528Т.е, там в единичку один флаг обращается, если результат операции получился отрицательным.
>>142982698Старший бит числа - знак. 0 - положительное число, 1 - отрицательное
И да, почаще пользуйся стеками и делай операции в нудных регистрах. Код получается короче. Хотя какая нахуй разница, 21 век блядь.
>>142982790Это теория информатики. Микропроцессор немного по другому устроен.
>>14298284221 век, пора начинать пользоваться SSE и AVX (для вычисления выражений на уровне 5 класса).
>>142982955Только студентов нужно обучить основному принципу работы микропроцессоров. Если им сразу пустить тему про конвейерные вычисления итогдалия, то они охуеют. Я сам бы охуел, будучи студентом. А так на примере доса всё понятно и просто.
>>142982932Ну ка, ну ка. С этого места по подробней.
>>142981958 (OP)Каждое действие - умноженик, деление, сложение и вычитание пиши в отдельной подпрограмме. Исходные данные засовывай в стек. Туда же толкай и результат операций, положительный или отрицательный, если флагом не хочешь пользовпться. Будет топорно, но поймёшь суть и станет проще.
>>142981958 (OP)NEG
>>142983083У нас был один семестр устройства ЭВМ и параллельно ассемблер. А потом сразу конвейеры и параллельное. Правда про векторные расширения почти ничего и не было в итоге, сам всё изучал.
>>142983179Обратный код.
>>142981958 (OP)Мимо быдло-пистонист. на https://learn.javascript.ru/bitwise-operators вот такую шутку видел, может поможет, я хз. В эти асм не тыкалсяДвоичный вид числа, обратного данному (например, 5 и -5) получается путём обращения всех битов с прибавлением 1.То есть, нули заменяются на единицы, единицы – на нули и к числу прибавляется 1. Получается внутреннее представление того же числа, но со знаком минус.
>>142983528В асме вроде без последнего шага. Просто инверсия.
>>142983468двачую этогоПоложи число в регистр и сделай от него NEG. Там будет отрицательное
>>142982678Ну, и что в итоге получается? Нам нужно писать эту ебанутую таблицу с регистрами в тетради блчть, я не знаю, что туда написать>>142982528Про флаги я благополучно забыл и даже не знал
>>142981958 (OP)MOV EAX, -1Хули думать то. Или вы прямо в двоичном коде делаете? Тогда инвертируешь число и прибавляешь один.
>>142983468>>142984007Так и сделаю. Счастья вам, здоровья, денег побольше
>>142984212Что такое>еах?
>>142984007в памяти тоже можно
>>142984465Это ax, только 32битный. Если ты в эмуляторе доса делаешь, то его нет
>>142984569Спасибо <3
>>142984212ах ты убогий 32битный вендоблядокна самом деле вот так надоmovq -$1, %rax
>>142985117Это чей синтаксис.
>>142984015Господи, ты правда такой аутист?Возьми какой-нибудь тасм, возьми дебаггер к нему.Напиши вычитание числа из нуля и посмотри в дебаггере, что там получится в регистре.Результат скорее всего будет записан в 16-ричном виде, берёшь, превращаешь его в двоичный и смотришь, как выглядит число. Это должна быть инверсия с добавлением единицы. И ещё есть SF флаг.>>142984569В досбоксе есть так-то, если это тасм, то в коде надо указать, что это набор команд для 386 процессора.
>>142985587Я правда аутист. За почти полгода обучения я тупо заучил команды асм и всё, слова "сом" и "ехе" делают мои ладошки потными, а анус уже, чем когда бы то ни было
Я даже пытаюсь делать задания без пеки
>>142986085А разве для ассемблера нужно что-то ещё, кроме как заучить команды? Т.е. если ты знаешь, какая команда что делает, это уже фактически почти всё, что нужно, остаётся выучить основные флаги и примерно представлять, что такое сегменты. Синтаксис каждого отдельного асма наизусть учить необязательно, это всё чисто формальная хуйня, которая сама выучится если писать на ней.
>>142986377А для чего нужны флаги и сегменты?
>>142986483Флаги, чтобы всё работало, сегменты, чтобы хранить в них данные или код.
Точнее, для чего это нужно знать. Я именно поэтому не учу ничего, кроме команд. Потому что знание команд это основа тк без команд и язык становится ничем, а вот такие его составляющие мне совсем не понятны
>>142986633Флагами, например, можно управлять, или считывать с них информацию. С сегментами ты так или иначе сталкиваешься, когда описываешь переменные в файле исходного кода, когда пишешь набор команд твоей программы и т.д.
>>142983528>получается путём обращения всех битов с прибавлением 1.вот этого плюсуюдолжно прокатить
Оп>>142981958 (OP)Тебе что ль прогу нужно написать на асм? Mov eax,11Shl eax,1Mov ebx,6Shl ebx,2Sub eax,ebxMov ebx,15Sub ebx,7CdqIdiv ebx И т.п?
>>142987469>Shl eax,1СУПЕР ОПТИМИЗИРОВАННОЕ УМНОЖЕНИЕ
>>142986857Какую информацию?
>>142987667Которую флаги в себе несут, очевидно же.
>>142987667Например, есть флаг и том, что было переполнение в арифметической операции. Логические операции на самом деле проверяют состояние флагов sf и zf(знак и ноль). Много чего еще. Они или зависят от результата или влияют на результат операций.
ZF
>>142987649Ну а почему бы и нет, выполняется ведь быстрее mul.
>>142988111Он будет равен 0
>>142987469Ты скажиНахуя мнеСшлЕсли есть кошерный мул, который и нужно езать тут?И какой еще Еах? >>142987987Можно я буду твоим рабом, только отвечай на каждый мой вопрос
>>142988168Тогда есть еще OF флаг.
>>142988256>Можно я буду твоим рабом С мобилы пощу, так что только если слишком сложный прикол будет.
>>142988256Если ты нихуя не шаришь и препод будет ебать во все щели, то лучше ничего не трогай и пиши мул. А вообще сдвиг работает быстрее, чем непосредственно умножение или деление.
>>142988256Да нинахуя. Это аналог a << 1 в си. Будет быстрее на процессорах 40-х годов.
>>142981958 (OP)Почему в рашке язык для написания малвари изучают по говнозадачкам на арифметику?
>>142988501А как надо?
>>142988256Shl быстрее mul.Eax 32б регистр.И да, соглашусь с мсье выше, если препод как мой ебет мозги по асму - используй свой мул.
>>142988413Я мог бы подставлять тебе свой зад когда и где угодно
>>142988587В че он быстрее? Мне главное правильно составить
>>142988556Писать криптор или рат бэк коннект. Там просто функи дергаешь и все.
>>142988501Потому что это основа понимания. Процессоры изначально по своей сути калькуляторы, и языки несут в себе математику, потому что решались на языках соответственные задачи. А потом уже костылями прикручивались всякие интерфейсы.
>>142988501Насколько нужно быть долбоебом, чтобы подумать, что это задача на арифметику.
>>142988647Тактов меньше на 2-3 делает. В случае жесткой оптимизации пойдет, но сейчас смысла нету. Больше для выебона.
Как плохо без ЕОТочки.
>>142988647Вы на информатике не проходили методы умножения? Процессор примерно такими же методами пользуется. И они охуенно громоздкие по сравнению со побитовым сдвигом, который является практически элементарной операцией.
>>1429886470010 = 20100 = 40010 << 1 ака сдвинуть крайний бит на один влево. 0010 << = 0100
>>142988647Вот кстати наглядное применение shl. Раньше сам не понимал как это работает , потом как препод показал это _ аж шишка встала
>>142988915Мдям, видимо, лучше было б если я пошёл учиться на повара
>>142989131Вот если б я не знал, что оно делает, нихуя бы с картинки не понял. Даже просто из названия больше понятно.
>>142989207Тут ничего сложного нет, всю эту хуйню можно за неделю изучить до полного понимания, желательно конечно, чтобы кто-то понимающий объяснял, в книжках не всегда понятно пишут.
>>142989207Для сравнительно эффективного умножения достаточно сложения и сдвига.
Нафиг тебе какой-то ассемблер? Если калькулятора под рукой нет, вбей в Excel. Только скобки правильно расставь.
>>142989131Я знаю, что он делает. Но мне жтот способ почему-то не кажется удобным.Просто ептубля вот есть умножение и есть смещение. Если надо умножать - умножаешь, надо смещать - смещаешь. Зочим ети сложносьти
>>142989799Когда ты в голове число умножаешь на 10, ты просто добавляешь ноль справа, т.е. осуществляешь сдвиг на разряд. С двоичным основанием всё так же интуитивно.
>>142989762>>142988702
>>142989932Но ведь умножение...
>>142989799Если вдруг из тебя получится йоба-погроммист - этот способ умножения в степени x^2 (shl) или деления x^2(shr) поможет тебе сэкономить время на выполнения кода и пару байт\бит
>>142989799В таком простом примере умножная с помощью сдвига, можно ещё упростить себе работу, исключив работу с лишними регистрами. И процессору проще и тебе меньше писать, код проще.