Вс окт 30, 2022 12:25:57
Вс окт 30, 2022 12:37:16
Вс окт 30, 2022 12:54:48
LDI ZL,low(Array1)
LDI ZH,highArray1)
LDI YL,low(Array2)
LDI YH,high(Array2)
lab: ld R16,z+
ld R1,y+
sub R16.R1
brne out_cycle
cpi ZL,low(Array1+40)
brlo lab
out_cycle: tst R16 ; вот сюда мы придём с 0 в R16 , если массивы совпали :))
Вс окт 30, 2022 13:36:20
Вс окт 30, 2022 14:29:39
Как записать код лаконичнее
Вс окт 30, 2022 15:21:50
А asm его ни кто не глянул?MLX90640 писал(а):Ну а топикстартер конечно же всех просто уделал, применив свой, наиболее "лаконичный" способ Вот, "учитесь"!
Вс окт 30, 2022 16:48:41
Вс окт 30, 2022 21:02:22
uint8_t arr1[8] = {1,2,3,4,5,6,7,8};
uint8_t arr2[8] = {1,2,3,4,5,6,7,9};
uint8_t result=0;
inline uint8_t my_memcmp(uint8_t* buf1, uint8_t* buf2, uint8_t count) __attribute__((always_inline));
#pragma GCC push_options
#pragma GCC optimize ("O3")
inline uint8_t my_memcmp(uint8_t* buf1, uint8_t* buf2, uint8_t count)
{
while(count--)
{
if(*buf1++ != *buf2++) return 1;
}
return 0;
}
#pragma GCC push_options
int main()
{
result = my_memcmp(arr1,arr2,8);
for (;;);
}
Вт ноя 01, 2022 00:35:53
uint8_t arr1[8] = {1,2,3,4,5,6,7,8};
uint8_t arr2[8] = {1,2,3,4,5,6,7,9};
uint8_t result=0;
main:
.L2:
rjmp .L2
Вт ноя 01, 2022 07:02:49
Вт ноя 01, 2022 21:29:45
volatile uint8_t arr1[8] = {1,2,3,4,5,6,7,8};
volatile uint8_t arr2[8] = {1,2,3,4,5,6,7,9};
volatile uint8_t result=0;
inline uint8_t my_memcmp(volatile uint8_t* buf1, volatile uint8_t* buf2, uint8_t count) __attribute__((always_inline));
inline uint8_t my_memcmp(volatile uint8_t* buf1, volatile uint8_t* buf2, uint8_t count)
{
while(count--)
{
if(*buf1++ != *buf2++) return 1;
}
return 0;
}
int main()
{
while (1)
{
result = my_memcmp(arr1,arr2,8);
arr1[0]++; arr1[1]++; arr1[2]++; arr1[3]++; arr1[4]++; arr1[5]++; arr1[6]++; arr1[7]++;
arr2[0]++; arr2[1]++; arr2[2]++; arr2[3]++; arr2[4]++; arr2[5]++; arr2[6]++; arr2[7]++;
}
}
volatile char x1[8] = {1, 2, 3, 4, 5, 6, 7, 8};
volatile char x2[8] = {1, 2, 3, 4, 5, 6, 7, 9};
volatile uint8_t result=0;
int main(){
while (1)
{
if((x1[0] == x2[0])
&&(x1[1] == x2[1])
&&(x1[2] == x2[2])
&&(x1[3] == x2[3])
&&(x1[4] == x2[4])
&&(x1[5] == x2[5])
&&(x1[6] == x2[6])
&&(x1[7] == x2[7])
) result=0;
else result=1;
x1[0]++; x1[1]++; x1[2]++; x1[3]++; x1[4]++; x1[5]++; x1[6]++; x1[7]++;
x2[0]++; x2[1]++; x2[2]++; x2[3]++; x2[4]++; x2[5]++; x2[6]++; x2[7]++;
}
}