구조체 대입 어셈블리 코드 확인 해보기.
예제)
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 | #include<stdio.h> typedef struct _person { char name[20]; char phoneNum[20]; int age; }person; int main() { person arr= {"ZZYYXX", "1234567890", 111}; person tamp; person tamp2; // sol 1. tamp = arr; // sol 2. strcpy(tamp2.name, arr.name); strcpy(tamp2.phoneNum, arr.phoneNum); tamp2.age = arr.age; return 0; } | cs |
; Line 17
mov ecx, 11 ; 0000000bH
lea esi, DWORD PTR _arr$[ebp]
lea edi, DWORD PTR _tamp$[ebp]
rep movsd
; Line 20
lea eax, DWORD PTR _arr$[ebp]
push eax
lea ecx, DWORD PTR _tamp2$[ebp]
push ecx
call _strcpy
add esp, 8
; Line 21
lea edx, DWORD PTR _arr$[ebp+20]
push edx
lea eax, DWORD PTR _tamp2$[ebp+20]
push eax
call _strcpy
add esp, 8
; Line 22
mov ecx, DWORD PTR _arr$[ebp+40]
mov DWORD PTR _tamp2$[ebp+40], ecx
(으흠 간만에 어셈블리 보니 해석하기 힘드네요 ㅠ )
로 보면 된다고 하심.
Arm칩에선 인자 4개, 내부변수 7개
까지는 레지스터 사용. 그 이상은 스택을 사용하기 때문에 느려짐. 이런 프로토콜 규약을 알고 있으면
효율적으로 프로그램 짤수 있음.
p142.
PLL주파수 처리기. 크리스탈 주파수 낼 수 있는게 한계가 있으니까 회로에 넣음.
여기서 IP 인터넷프로토콜 아닌 SoC내부의 블럭(레고 같이)
MSB, LSB (K.J.H. 형님이 찾아 주신 그림ㅋㅋ)
어셈블리는 칩마다 운영체제마다 문법이나 규약이 다 다름. 자기가 짠곳과 다른 환경에서 짤리면 다시공부해서 싹다 그 규약에 맞게 수정해야 한다함 흑흑
그래서 나온게 C언어 ㅋ C언어는 어딜가든 다 공통이니깐.
'코스웨어 > 15년 스마트컨트롤러' 카테고리의 다른 글
20151129 / ARM 어셈블리_2- 남수진 (7) | 2015.11.29 |
---|---|
20151127 윤재희 #2. ARM/ Thumb PCS - 레지스터 사용법 ~ 컴파일에 대한 단상 (6) | 2015.11.29 |
2015.11.27_개인업무일지_[ASM #2]_이량경_함수호출 규약 (5) | 2015.11.29 |
20151127 임현수 업무일지 ARM #2 함수호출규약 (6) | 2015.11.29 |
20151127 - 홍준모 ARM~>ASM 2일 차 - 126p~ (7) | 2015.11.27 |
20151127-김재홍-ARM_Assembly_2일차 (6) | 2015.11.27 |
20151127 - 권오민 - ARM ASSEMBLY 2일차 (4) | 2015.11.27 |
2015.11.26_개인업무일지_[ASM #1]_주재민_mode (7) | 2015.11.27 |