Требуется программист в Зеленограде
- обработка данных с датчиков; ColdFire; 40 тыс. e-mail:jobsmp@pochta.ru |
char test [5][6][7];char get_data(int a, int b, int c)
{
return test[a][b][c];
}char get_data1(int a, int b, int c)
{
return *(*(*(test+a)+b)+c);
}
.global _test
.bss _test,210,0,0 ; 210 = 5*6*7 !!!!!!!!!!!!
_get_data__FiN21:
;* T0 assigned to _a
;* T1 assigned to _b
;* AR0 assigned to _cMOV #(_test & 0xffff), AR3 ; |7|
|| MOV T1, HI(AC0)MPYK #7, AC0, AC0 ; умножить b на 7
MACK T0, #42, AC0, AC0 ; прибавить к этому a*42
MOV AC0, T0 ; |7|
ADD AR0, T0 ; прибавить к сумме "c"
MOV *AR3(T0), T0 ; достать данное
RET ; |7|
;------------------------------------
_get_data1__FiN21:
;* T0 assigned to _a
;* T1 assigned to _b
;* AR0 assigned to _cMOV #(_test & 0xffff), AR3 ; |12|
|| MOV T1, HI(AC0)MPYK #7, AC0, AC0 ; |12|
MACK T0, #42, AC0, AC0 ; |12|
MOV AC0, T0 ; |12|
ADD AR0, T0 ; |12|
MOV *AR3(T0), T0 ; |12|
RET ; |12|
Как видите, оба варианта корректны, идентичны, и компилер отлично узнал, сколько, когда и к чему надо прибавить.