Мало окупљање
Након читања овај чланак о коцницом слободних бафера и виде употребу (ЦАС упоредите и свап), осећала сам се као постављањем асемблерског кода да уради исто. Користите случај тамо је била да напишем нативе методу, а зову га из Јаве (назад у 1.5, када упоредне структуре података у Јави су били мање или више не постоје). Без даљег одлагања, ја ћу ослободите код на вас
. Први је за ЦАС и друго је за рачунарство пуњење за ГЦД користећи Еуклидов алгоритам (ово се може наћи у многим местима и кроз менторски рад, као).
Компајлирати и покренути инструкције gcc file_name.c ; ./a.out
Упоредите и Свап
# Инцлуде# Инцлуде / / Размена - неввалуе, цомперанд је стари / очекивана вредност / * * Функција заправо ради следеће ствари - ако вредност од * дестинације једнак онда олдвалуе заменили га неввалуе остало оставите непромењен: да ли све ово атомицалли * * Постоје две опције за повратну вредност * 1.ис почетна вредност од РСД * дестинације и оставити терет позивање фкн да га упореди са олдвал * 2. урадите то овде и вратити 0 или 1, то би требало да буде ефикаснија ** / / * Га касније променили у макро * / Инт ЦАС (инт * дест, инт олдвалуе инт неввалуе) { принтф ("(% д,% д,% д)", * дест, олдвалуе, неввалуе); / * Инт ЦАС (инт дест, инт олдвалуе инт неввалуе) {* / / * Инт ЦАС (инт дест, инт неввалуе инт олдвалуе) {* / инт резултат = 1 ;/ * 1 показује да ЦАС успели и 0 показује да нису успели * / / * Бтв треба да подесите за Цц застава цлобберинг! * / __асм__ __ волатиле__ ( "Мовл% 2,%% еак \ н \ т" "Мовл% 3,%% еак \ н \ т" "Мовл% 0,%% ецк \ н \ т" "Лоцк \ н \ т" "ЦМПКСЦХГ%% ебк, (%% ецк) \ н \ т" / * треба ЛОЦК бити на истој линији * / "Јз ДОНЕ \ н \ т" "Мовл $ 0,% 1 \ н \ т" "Урађено: \ н \ т" : "= М" (дест), "= Г" (резултат) : "Г" (олдвалуе), "Г" (неввалуе), "М" (ДЕСТ) : "% Еак", "% еак", "ецк", "ЦЦ" ); принтф ("(% д,% д,% д)", * дест, олдвалуе, неввалуе); врати резултат; } / * ТОДО * Напише још једну АСМ фкн који ставља изнад фкн у петљи и држати док покушавате уколико не успева * / маин () { инт = 5, б = 6; инт * Ц = (инт *) маллоц (сизеоф (инт)); * Ц = 6; / * Инт = 6; * / принтф ("% д \ н", ЦАС (Ц, Б, б)); принтф ("% д \ н", ЦАС (Ц, Б,)); принтф ("% д \ н", ЦАС (Ц,,)); принтф ("% д \ н", ЦАС (Ц, Б, б)); * Ц = 6; / * Ц = 5; * / принтф ("мења вредност * Ц до% д \ н", ц); принтф ("% д \ н", ЦАС (Ц, Б, б)); принтф ("% д \ н", ЦАС (Ц, Б,)); принтф ("% д \ н", ЦАС (Ц,,)); принтф ("% д \ н", ЦАС (ц, б)); принтф ("% д \ н", ЦАС (Ц, Б,)); ретурн 0; }
Форматирање белешке - изгледа као маркер вп синтаксе додаје на крају, да се игноришу.
ГЦД
# ИнцлудеИнт ГЦД (инт, инт б) { инт резултат; / * Израчунати највећи заједнички делилац користећи Еуклидов алгоритам * / __асм__ __ волатиле__ ("мовл% 1,%% еак;" "Мовл% 2,%% еак;" "ЦОНТД: цмпл $ 0,%% еак;" "Је ДОНЕ;" "Ксорл%% едк,% едк%;" "Идивл%% еак;" "Мовл% еак%,%% еак;" "Мовл%% едк,%% еак;" "ЈМП ЦОНТД;" "Урађено: мовл%% еак,% 0;": "= Г" (резултат): "Г" (), "Г" (Б) ); врати резултат; } маин () { инт први, други; принтф ("Унесите два цела броја:"); сцанф ("% д% д", & година, и друго); принтф ("% д од ГЦД &% д је% д \ н", први, други, нзд (први, други)); ретурн 0; }



































