목차
간단한 연산 프로그램 구현하기
1. CAL64.c의 코드 (C 프로그램)
2. ADD64.s의 코드 (어셈블리 프로그램)
3. SUB64.S의 코드 (어셈블리 프로그램)
4. MUL64.S의 코드 (어셈블리 프로그램)
5. 프로그램 실행
(1) ADD연산 수행 동작
(2) SUB연산 수행 동작
(3) MUL연산 수행 동작
위에서 각각 작성된 어셈블리 프로그램을 하나로 구현하기
1. CAL64.c의 코드 (C 프로그램)
2. ArithmeticS.s의 코드 (어셈블리 프로그램)
3. 프로그램 실행
(1) ADD연산 수행 동작
(2) SUB연산 수행 동작
(3) MUL연산 수행 동작
1. CAL64.c의 코드 (C 프로그램)
2. ADD64.s의 코드 (어셈블리 프로그램)
3. SUB64.S의 코드 (어셈블리 프로그램)
4. MUL64.S의 코드 (어셈블리 프로그램)
5. 프로그램 실행
(1) ADD연산 수행 동작
(2) SUB연산 수행 동작
(3) MUL연산 수행 동작
위에서 각각 작성된 어셈블리 프로그램을 하나로 구현하기
1. CAL64.c의 코드 (C 프로그램)
2. ArithmeticS.s의 코드 (어셈블리 프로그램)
3. 프로그램 실행
(1) ADD연산 수행 동작
(2) SUB연산 수행 동작
(3) MUL연산 수행 동작
본문내용
ost significant word of result is %08X\n", res.hi);
printf(" a * b = %08X %08X\n", res.hi, res.lo);
}
}
else
{
puts("Bad operator");
}
return (0);
}
2. ADD64.s의 코드 (어셈블리 프로그램)
AREA |add64$$code|, CODE, READONLY
EXPORT add64
add64
ADDS r1, r1, r3
ADC r0, r0, r2
MOV pc, lr
END
3. SUB64.S의 코드 (어셈블리 프로그램)
AREA |sub64$$code|, CODE, READONLY
EXPORT sub64
sub64
SUBS r1, r1, r3
SBC r0, r0, r2
MOV pc, lr
END
4. MUL64.S의 코드 (어셈블리 프로그램)
AREA |mul64$$code|, CODE, READONLY
EXPORT mul64
mul64
MOV r2, r0
MOV r3, r1
UMULL r1, r0, r2, r3
MOV pc, lr
END
5. 프로그램 실행
(1) ADD연산 수행 동작
(2) SUB연산 수행 동작
(3) MUL연산 수행 동작
위에서 각각 작성된 어셈블리 프로그램을 하나로 구현하기
1. CAL64.c의 코드 (C 프로그램)
#include
typedef struct int64_struct
{
unsigned int hi;
unsigned int lo;
}int64;
__value_in_regs extern int64 arithmetic(int a, int b, int c, int d, int oper);
int main()
{
unsigned a, b, c, d, oper;
int64 res;
printf("Enter operator (0=add, 1=sub, 2=mul)\n");
if(scanf("%x", &oper) != (0 || 1 || 2))
{
puts("Bad operator");
}
else
{
printf("Enter two 64-bit numbers if operator is add or sub\n");
printf("Enter two 32-bit numbers if operator is mul\n");
if(oper == 2) scanf("%x %x", &a, &b);
else scanf("%x %x %x %x", &a, &b, &c, &d);
res = arithmetic(a, b, c, d, oper);
printf("Least significant word of result is %08X\n", res.lo);
printf("Most significant word of result is %08X\n", res.hi);
printf("Result = %08X %08X\n", res.hi, res.lo);
}
return (0);
}
2. ArithmeticS.s의 코드 (어셈블리 프로그램)
AREA |arithmetic$$code|, CODE, READONLY
EXPORT arithmetic
arithmetic
LDR r4, [r13]
CMP r4, #0
BEQ add64
CMP r4, #1
BEQ sub64
CMP r4, #2
BEQ mul64
add64ADDS r1, r1, r3
ADC r0, r0, r2
MOV pc, lr
sub64SUBS r1, r1, r3
SBC r0, r0, r2
MOV pc, lr
mul64UMULL r1, r0, r0, r1
MOV pc, lr
END
3. 프로그램 실행
(1) ADD연산 수행 동작
(2) SUB연산 수행 동작
(3) MUL연산 수행 동작
printf(" a * b = %08X %08X\n", res.hi, res.lo);
}
}
else
{
puts("Bad operator");
}
return (0);
}
2. ADD64.s의 코드 (어셈블리 프로그램)
AREA |add64$$code|, CODE, READONLY
EXPORT add64
add64
ADDS r1, r1, r3
ADC r0, r0, r2
MOV pc, lr
END
3. SUB64.S의 코드 (어셈블리 프로그램)
AREA |sub64$$code|, CODE, READONLY
EXPORT sub64
sub64
SUBS r1, r1, r3
SBC r0, r0, r2
MOV pc, lr
END
4. MUL64.S의 코드 (어셈블리 프로그램)
AREA |mul64$$code|, CODE, READONLY
EXPORT mul64
mul64
MOV r2, r0
MOV r3, r1
UMULL r1, r0, r2, r3
MOV pc, lr
END
5. 프로그램 실행
(1) ADD연산 수행 동작
(2) SUB연산 수행 동작
(3) MUL연산 수행 동작
위에서 각각 작성된 어셈블리 프로그램을 하나로 구현하기
1. CAL64.c의 코드 (C 프로그램)
#include
typedef struct int64_struct
{
unsigned int hi;
unsigned int lo;
}int64;
__value_in_regs extern int64 arithmetic(int a, int b, int c, int d, int oper);
int main()
{
unsigned a, b, c, d, oper;
int64 res;
printf("Enter operator (0=add, 1=sub, 2=mul)\n");
if(scanf("%x", &oper) != (0 || 1 || 2))
{
puts("Bad operator");
}
else
{
printf("Enter two 64-bit numbers if operator is add or sub\n");
printf("Enter two 32-bit numbers if operator is mul\n");
if(oper == 2) scanf("%x %x", &a, &b);
else scanf("%x %x %x %x", &a, &b, &c, &d);
res = arithmetic(a, b, c, d, oper);
printf("Least significant word of result is %08X\n", res.lo);
printf("Most significant word of result is %08X\n", res.hi);
printf("Result = %08X %08X\n", res.hi, res.lo);
}
return (0);
}
2. ArithmeticS.s의 코드 (어셈블리 프로그램)
AREA |arithmetic$$code|, CODE, READONLY
EXPORT arithmetic
arithmetic
LDR r4, [r13]
CMP r4, #0
BEQ add64
CMP r4, #1
BEQ sub64
CMP r4, #2
BEQ mul64
add64ADDS r1, r1, r3
ADC r0, r0, r2
MOV pc, lr
sub64SUBS r1, r1, r3
SBC r0, r0, r2
MOV pc, lr
mul64UMULL r1, r0, r0, r1
MOV pc, lr
END
3. 프로그램 실행
(1) ADD연산 수행 동작
(2) SUB연산 수행 동작
(3) MUL연산 수행 동작