Мало окупљање

Након читања овај чланак о коцницом слободних бафера и виде употребу (ЦАС упоредите и свап), осећала сам се као постављањем асемблерског кода да уради исто. Користите случај тамо је била да напишем нативе методу, а зову га из Јаве (назад у 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;
 }