ðÒÉ×ÅÔ Leha!
þÅÔ æÅ× 24 2005 17:15, Leha Bishletov -> Anton Abrosimov:
LB>>> ïÒÇÁÎÉÚÏ×ÁÎÁ ÔÁË ÖÅ ËÁË É Ó 32ÂÉÔÎÙÍÉ. AA>> ñ ÜÔÏÇÏ ÎÅ ×ÉÖÕ. :) äÏÓÔÁÔÏÞÎÏ ÓpÁ×ÎÉÔØ ËÏÄ ÄÌÑ Ä×ÕÈ ÓÔpÏÞÅË: AA>> u8 a = 100; while (a--!=0) {}; AA>> u32 b = 100; while (b--!=0) {}; LB> äÁ×ÁÊ ÓÒÁ×ÎÉÍ (ÒÅÖÉÍ Thumb, ËÏÍÐÉÌÑÔÏÒ GCC): ë ÓÏÖÁÌÅÎÉÀ, ÁÎÁÌÏÇÉÞÎÏ ÐpÉ×ÅÓÔÉ ËÏÄ Ñ ÎÅ ÓÍÏÇÕ, Ô.Ë. ÁpÍÏ×ÏÇÏ ËÏÍÐÉÌÑÔÏpÁ ÄÏÍÁ ÎÅÔ. ôÁË ÞÔÏ ÐÏÐpÏÂÕÅÍ pÁÚÏÂpÁÔØ ÜÔÏÔ.
LB> U8 U32 LB> sub r2, r7, #1 mov r2, r7 LB> mov r3, #100 sub r2, r2, #8 LB> strb r3, [r2] mov r3, #100 LB> .L2: str r3, [r2] LB> sub r2, r7, #1 .L5: LB> sub r3, r7, #1 mov r2, r7 LB> ldrb r3, [r3] sub r2, r2, #8 LB> sub r3, r3, #1 mov r3, r7 LB> strb r3, [r2] sub r3, r3, #8 LB> lsl r3, r3, #24 ldr r3, [r3] LB> lsr r3, r3, #24 sub r3, r3, #1 LB> cmp r3, #0 str r3, [r2] LB> bne .L2 cmp r3, #0 LB> bne .L5 þÔÏ-ÔÏ ËÏÄ ÓÏ×ÓÅÍ ËpÉ×ÏÊ ×ÙÛÅÌ. HÁÆÉÇÁ ÌÏËÁÌØÎÕÀ ÐÅpÅÍÅÎÎÕÀ pÁÚÍÅÝÁÔØ × ÐÁÍÑÔÉ?
ñ ÎÁÂÌÀÄÁÌ ÞÔÏ-ÔÏ ÔÉÐÁ: mov ÍÅÔËÁ: sub cmp bne × ÓÌÕÞÁÅ u32, É:
mov lsl lsr ÍÅÔËÁ: sub lsl lsr cmp bne × ÓÌÕÞÁÅ u8.
ðpÉÞÅÍ ÍÎÅ ËÁÖÅÔÓÑ, ÞÔÏ ×Ï ×ÔÏpÏÍ ÓÌÕÞÁÅ ËÏÍÁÎÄ ÂÙÌÏ ÅÝÅ ÂÏÌØÛÅ, É ÐpÉ ÚÁÍÅÎÅ ÓÞÅÔÞÉËÁ ÃÉËÌÁ ÎÁ u32 ËÏÄ ÓÏËpÁÔÉÌÓÑ pÁÚÁ × 3.
LB> U32 ÐÏÌÕÞÉÌÏÓØ ÄÌÉÎÎÅÅ :) HÏ ÜÔÏ ÐÏÔÏÍÕ, ÞÔÏ 'sub r2, r7, #8' ÎÅ LB> ×ÏÚÍÏÖÅÎ. á ÔÁË, "ÌÉÛÎÉÅ" ÔÏÌØËÏ lsl - lsr, Ô.Å. ×ÙÄÅÌÅÎÉÅ ÍÌÁÄÛÅÇÏ LB> ÂÁÊÔÁ ÐÒÉ ÓÒÁ×ÎÅÎÉÉ. ÷ ÏÓÔÁÌØÎÏÍ, ÁÒÉÆÍÅÔÉËÁ É ÞÔÅÎÉÅ-ÚÁÐÉÓØ LB> ÏÄÉÎÁËÏ×ÙÅ. ÷ ÄÁÎÎÏÊ ÓÉÔÕÁÃÉÉ - ÄÁ. :)
LB>>> á ÐÏÞÅÍÕ ÔÙ ×ÓÅ × Thumb ÄÅÌÁÅÛØ? AA>> ÈÚ. üÔÏ ÎÁÓÔpÏÊËÁ ÐÏ-ÕÍÏÌÞÁÎÉÀ. ëÏÇÄÁ Ñ ÔÏÌØËÏ ÎÁÞÉÎÁÌ ÐpÏÅËÔ, AA>> ÐÏÐpÏÂÏ×ÁÌ Ó ÏÂÏÉÍÉ ×ÁpÉÁÎÔÁÍÉ, ËÏÄ Ó Thumb ÂÙÌ × ÐÏÌÔÏpÁ pÁÚÁ AA>> ÍÅÎØÛÅ ÐpÉ ÔÏÊ-ÖÅ ÓËÏpÏÓÔÉ pÁÂÏÔÙ. äÁ É ×ÏÏÂÝÅ, ×Ï ×ÓÅÈ ÏÐÉÓÁÎÉÑÈ AA>> pÅÖÉÍ thumb ÐpÅÐÏÄÎÏÓÉÔÓÑ ËÁË ÎÅËÏÅ ÐpÅÉÍÕÝÅÓÔ×Ï. HÁ ÂÏÌØÛÉÈ AA>> ÐpÏÅËÔÁÈ ÜÔÏ ÎÅ ÔÁË?
LB> äÁ×ÁÊ ÓÒÁ×ÎÉÍ ÎÁ Ô×ÏÅÍ ÖÅ ÐÒÉÍÅÒÅ:
LB> Thumb ARM LB> mov r3, #100 mov r3, #100 LB> strb r3, [r2] strb r3, [fp, #-13] LB> .L2: .L2: LB> sub r2, r7, #1 ldrb r3, [fp, #-13] LB> sub r3, r7, #1 sub r3, r3, #1 LB> ldrb r3, [r3] strb r3, [fp, #-13] LB> sub r3, r3, #1 and r3, r3, #255 LB> strb r3, [r2] cmp r3, #255 LB> lsl r3, r3, #24 bne .L2 LB> lsr r3, r3, #24 mov r3, #100 LB> cmp r3, #0 str r3, [fp, #-20] LB> bne .L2 .L5: LB> mov r2, r7 ldr r3, [fp, #-20] LB> sub r2, r2, #8 sub r3, r3, #1 LB> mov r3, #100 str r3, [fp, #-20] LB> str r3, [r2] cmn r3, #1 LB> .L5: bne .L5 LB> mov r2, r7 LB> sub r2, r2, #8 LB> mov r3, r7 LB> sub r3, r3, #8 LB> ldr r3, [r3] LB> sub r3, r3, #1 LB> str r3, [r2] LB> cmp r3, #0 LB> bne .L5 LB> --------------------------------------------------------------- LB> 24 ËÏÍÁÎÄÙ 15 ËÏÍÁÎÄ LB> 48 ÂÁÊÔ 60 ÂÁÊÔ
LB> úÄÅÓØ ÐÏÌÕÞÁÅÔÓÑ, ÞÔÏ Thumb ÐÒÏÉÇÒÙ×ÁÅÔ ÐÏ ÓËÏÒÏÓÔÉ (ËÏÍÁÎÄÙ LB> ×ÙÐÏÌÎÑÀÔÓÑ ÐÒÉÍÅÒÎÏ ÏÄÉÎÁËÏ×ÏÅ ×ÒÅÍÑ), ÎÏ, ÞÅÓÔÎÏ ÇÏ×ÏÒÑ, ËÏÄ, LB> ÇÅÎÅÒÉÒÕÅÍÙÊ GCC × ÒÅÖÉÍÅ Thumb ÍÎÅ ËÁÖÅÔÓÑ ÏÞÅÎØ ÎÅ ÏÐÔÉÍÁÌØÎÙÍ. ÷ äÁ É × pÅÖÉÍÅ ÁpÍ ÔÏÖÅ ÎÅ ×ÓÅ ÇÌÁÄËÏ, ÎÁÐpÉÍÅp, Ï ËÏÍÁÎÄÅ subs ËÏÍÐÉÌÑÔÏp ÎÅ ÚÎÁÅÔ. :)
LB> ÒÅÖÉÍÅ Thumb ÎÅÔ ËÏÓ×ÅÎÏÊ ÁÄÒÅÓÁÃÉÉ Ó ÏÔÒÉÃÁÔÅÌØÎÙÍ ÓÍÅÝÅÎÉÅÍ, ÎÏ ÂÅÚ LB> ÜÔÏÇÏ ÍÏÖÎÏ ÂÙÌÏ ÂÙ ÏÂÈÏÄÉÔØÓÑ, ÅÓÌÉ ÁÄÒÅÓÏ×ÁÔØÓÑ ÏÔÎÏÓÉÔÅÌØÎÏ SP. á LB> ÚÄÅÓØ ×ÉÄÉÍ ÓÐÏÌÛÎÕÀ ÁÒÉÆÍÅÔÉËÕ. ëÓÔÁÔÉ, ÐÒÉ ÍÁËÓÉÍÁÌØÎÏÊ ÏÐÔÉÍÉÚÁÃÉÉ LB> ËÏÄ ÏÓÔÁÅÔÓÑ ÐÒÉÍÅÒÎÏ ÔÁËÉÍ ÖÅ. LB> éÚ ÏÂßÅËÔÉ×ÎÙÈ ÏÇÒÁÎÉÞÅÎÉÊ, ÐÒÉ ÉÄÅÁÌØÎÏÍ ËÏÍÐÉÌÑÔÏÒÅ: LB> 1. ÷ ÒÅÖÉÍÅ ARM ÂÏÌØÛÅ ÐÒÑÍÏ ÄÏÓÔÕÐÎÙÈ ÒÅÇÉÓÔÒÏ×, ÜÔÏ ÏÞÅÎØ ÂÏÌØÛÏÊ + LB> 2. ÷ ÒÅÖÉÍÅ ARM ÅÓÔØ "ÕÓÌÏ×ÎÏÅ" ×ÙÐÏÌÎÅÎÉÅ ËÏÍÁÎÄÙ, ÍÏÇÌÏ ÂÙ ÓÉÌØÎÏ LB> ÐÏÍÏÇÁÔØ ÎÁ ÐÒÏÓÔÙÈ ËÏÎÔÓÒÕËÃÉÑÈ ÔÉÐÁ if(a>max) a=max; ÉÌÉ if(flag) LB> f(); 3. ÷ ARM ÂÏÌØÛÅ ÄÉÁÐÁÚÏÎ ËÏÓ×ÅÎÏÊ ÁÄÒÅÓÁÃÉÉ ÓÏ LB> ÓÍÅÝÅÎÉÅÍ +-2047ÂÁÊÔ(*4ÓÌÏ×) vs +31(*4), ÓËÁÖÅÔÓÑ ÐÒÉ ÎÁÌÉÞÉÉ ÂÏÌØÛÉÈ LB> ÓÔÒÕËÔÕÒ. 4. ÷ ARM ÕÓÌÏ×ÎÙÅ/ÂÅÚÕÓÌÏ×ÎÙÅ ÐÅÒÅÈÏÄÙ ÍÏÇÕÔ ÂÙÔØ +-ÏÞÅÎØ LB> ÍÎÏÇÏ ËÏÍÁÎÄ, vs +-127 ÕÓÌÏ×ÎÙÊ ÐÅÒÅÈÏÄ, +-2048 ÂÅÚÕÓÌÏ×ÎÙÊ. íÏÖÅÔ LB> ÐÒÏÑ×ÉÔØÓÑ, ÎÏ ×ÌÉÑÎÉÅ ÂÕÄÅÔ ÍÁÌÅÎØËÉÍ. HÏ ÉÄÅÁÌØÎÙÈ ËÏÍÐÉÌÑÔÏÒÏ× ÎÅÔ. ÷ ÜÔÏÍ ÐpÉÍÅpÅ thumb ÐpÏÉÇpÙ×ÁÅÔ Ñ×ÎÏ ÂÌÁÇÏÄÁpÑ ËÏÓ×ÅÎÎÏÊ ÁÄpÅÓÁÃÉÉ.
LB> ðÏ GCC ×ÉÄÎÏ, ÞÔÏ ÏÎ ÎÅ ÌÀÂÉÔ Thumb É ÉÓÐÏÌØÚÏ×ÁÎÉÅ Thumb × ÎÅÍ LB> ÂÅÓÓÍÙÓÌÅÎÎÏ. ðÏÓÍÏÔÒÅÌ ÞÔÏ ×ÙÄÁÅÔ IAR. úÎÁÞÉÔÅÌØÎÏ ÌÕÞÛÅ ÞÅÍ GCC. õ LB> ÎÅÇÏ ÌÏËÁÌØÎÙÅ ÐÅÒÅÍÅÎÎÙÅ ÁÄÒÅÓÕÀÔÓÑ × +, × ÉÔÏÇÅ ËÏÄ ÍÅÎØÛÅ. ô.Å. ÄÌÑ LB> IAR ÄÅÊÓÔ×ÉÔÅÌØÎÏ ÍÏÖÎÏ ÏÖÉÄÁÔØ, ÞÔÏ ËÏÄ Thumb ÂÕÄÅÔ ÚÎÁÞÉÔÅÌØÎÏ LB> ÍÅÎØÛÅ, ÐÒÉ ÐÒÉÍÅÒÎÏ ÔÏÊ ÖÅ ÓËÏÒÏÓÔÉ ×ÙÐÏÌÎÅÎÉÑ. ðÏÒÁ ÐÅÒÅÈÏÄÉÔØ ÎÁ LB> IAR ... èÏÔÑ, × ÚÁÝÉÔÕ GCC, ÍÏÖÎÏ ÓËÁÚÁÔØ, ÞÔÏ ÏÐÔÉÍÉÚÁÃÉÑ, ÎÅ LB> Ó×ÑÚÁÎÎÁÑ Ó ÏËÏÎÞÁÔÅÌØÎÙÍ ËÏÄÏÍ, ËÁÖÅÔÓÑ ÌÕÞÛÅ. HÁÐÒÉÍÅÒ ÃÉËÌÙ LB> for(i=0;i<10;++i){ÞÔÏ-ÔÏ} ÐÒÅ×ÒÁÝÁÅÔ × i=0;do{ÞÔÏ-ÔÏ}while(++i<10); ñ, ËÁÖÅÔÓÑ, ÔÕÔ ÕÖÅ ÐpÉ×ÏÄÉÌ ÐpÉÍÅp, ËÁË IAR ÚÁÍÅÎÉÌ ËÏÄ ÔÉÐÁ: u16 a = b; u8 c = 9; while (c--!=0) a += b; ÎÁ a = mul(b,10), ÐpÉÞÅÍ ÏÔËÌÀÞÅÎÉÅ ÏÐÔÉÍÉÚÁÃÉÉ ÎÉÞÅÇÏ ÎÅ ÍÅÎÑÌÏ. üÔÏ, ÉÍÈÏ, ÐÏÓÅpØÅÚÎÅÅ ÉÚÍÅÎÅÎÉÑ ÎÁÐpÁ×ÌÅÎÉÑ ÉÌÉ ×pÅÍÅÎÉ ÐpÏ×ÅpËÉ ÃÉËÌÁ.
HÁ ÜÔÏÍ ×ÓÅ, ÐÏËÁ. Anton Abrosimov. ... õÍ ÎÁ ÚÅÍÌÅ - ×ÅÌÉÞÉÎÁ ÐÏÓÔÏÑÎÎÁÑ. á ÎÁÓÅÌÅÎÉÅ-ÔÏ ÒÁÓÔÅÔ!