/*Write an ARM assembly functions for the following expressions.
1. (val_a >> 4) & val_b
Parameters: val_a, val_b, n=4 ------- (unsigned int)
2. (val_a << 8) | (~val_b)
Parameters: val_a, val_b, n=8 ------ (unsigned int)
3. (sVal_a >> 2) & (~sVal_b)
Parameters: sVal_a, sVal_b, n=2 ------ (signed int)
4. (~sVal_a >> 5) ^ (sVal_b)
Parameters: sVal_a, sVal_b, n=5 ------ (signed int) */
#include <stdio.h>
#include <stdlib.h>
extern "C"{
unsigned int asm_1(int val_a,int val_b);
unsigned int asm_2(int val_a,int val_b);
signed int asm_3(int sval_a,int sval_b);
signed int asm_4(int sval_a,int sval_b);
}
void setup() {
// put your setup code here, to run once:
pinMode(LED_BUILTIN, OUTPUT);
}
void loop() {
unsigned int asm_ret_val1;
unsigned int asm_ret_val2;
signed int asm_ret_val3;
signed int asm_ret_val4;
int val_a,val_b,sval_a,sval_b;
printf("Enter (unsigned) a: ");
scanf("%d",&val_a);
printf("%d\n",val_a);
printf("Enter (unsigned) b: ");
scanf("%d",&val_b);
printf("%d\n",val_b);
printf("Enter (signed) a: ");
scanf("%d",&sval_a);
printf("%d\n",sval_a);
printf("Enter (signed) b: ");
scanf("%d",&sval_b);
printf("%d\n",sval_b);
asm_ret_val1 = asm_1(val_a,val_b);
asm_ret_val2 = asm_2(val_a,val_b);
asm_ret_val3 = asm_3(sval_a,sval_b);
asm_ret_val4 = asm_4(sval_a,sval_b);
printf("\n");
printf("asm1 : %d\n",asm_ret_val1);
printf("asm2 : %d\n",asm_ret_val2);
printf("asm3 : %d\n",asm_ret_val3);
printf("asm4 : %d\n",asm_ret_val4);
printf("\n");
}