728x90
반응형
<ARM ASM>✔
================================================================
✔ APCS 약속
1) 함수를 부를때 레지스터는 어떨게 사용해야 하는가?
2) 리턴값은 어떻게 ?
3) 스택은 어떨때?
4) 1~3 에서 사용된 레지스터 이외 레지스터는 어떻게 사용?
이런 레지스터 사용법을 통칭
- PCS(Procedure call Srandard)
- APCS : ARM Procedure Call Srandard (구버전)
- TPCS : Thumb Procedure Call Srandard (구버전)
- ATPCS : ARM-Thumb Procedure Call Srandard(AAPCS의 선배)
- AAPCS : Procedure Call Srandard for ARM Architecture(현재 최신버전)
* 함수의 구조 스택의 사용을 이해 하기좋음
* 암은 어큐머레이터가 없다. 인텔과 다르다. 그러나 대부분의 레지스터들이 어큐머레이터이다.
* r0~r3 : 함수 레지스터
* r4~r7 : 번수 레지스터
* 함수호출 규약은 CPU마다 다르다.
- 암의 R0~R3까지 값이 바뀐다. eax 레지스터의 값이 보장되지 않는다.
...함수 호출 규약과 관계 없이 C를 배우는 이유는 C에만 집중할수있다.CPU가 바뀌어도 C는 같다.
* ARM / 인자를 5개 만들면 5번째 생성 부터 레지스트 자리가 없어 느림.
- 임베디드는 고려를 많이 해야 하는 민감한 부분이다.
*인텔 / 무조건 스택에 넣으므로 많이 쓰든 작게 쓰든 같다.
- push만 시간이 좀 더 걸릴뿐 전체적으로 영향이 없다.
✔ Synonym
- 가장 많이 사용하는 것은 R0~R3(함수인자), SP, LR, PC
* 숙제 )
eax에 30 바이트를 넣을수 없다 인텔은 어떤식으로 리턴시키는지 확인을
중간파일을 생성하면 어샘블리코드가 나온다.
구조체는 구조체끼리 대입이 된다.
struct smart
{
int A[30]
int A[30]
}
struct smart j1;
int k2;
k1= k2;
* 바이트는 대입을 하면 무슨짓을 하는지 앟수 있다. 한땀한땀 복사한다.
구조체에 대입시키면 한줄한줄 복사하므로 용량이 커진다.
즉, 구조체는 값대입을 하면 안되고 주소로 처리 해야한다.
- 인텔에서는 구조체를 어떻게 대입하는가 어떻게 리턴하는가 숙제.
✔ Nesting
- 인터럽트가 걸려 ISR을 처리하는 동안에 인터럽트가 또 걸리는 것
- 코어텍스 st것.
- 암 아트멜
* system on chip : 코어에 여러가지 기능을 덧붙여 한개의 칩으로 만드는 기술을 SOC라고 함.
Soc 측면에서 각각의 기능을 가진 칩을 각각의 블럭으로 만들면 재사용이 가능하다.모듈화
- 코어 하나 붙이고 연결 칩만 잇으면 재사용이 된다.
*AMBA
- 암사는 내부 IP들 끼리 버스를 통해서 서로 잘 통신할수 있도록 버스 프로토콜을 제안
- 암코어와 의 효율적인 통신에 연구
- 이 프로토콜은 free
* ARM SOC chip 의 내부에서는 AMBA Protocol 을 통해서 서로 내부 통신
- 암바는 ASB와 APB 두개의 protocol
- AHB가 ASB자리에 잡음.
✔ 암바 버스 시스템 (의 구성요소 AHB, ASB, IP, Decoder)
* AHB 멀티 플렉서 버스 기반 : 주소라인 제어라인 데이터 라인까지 모두 공유
- 주소를 쏴주고 데이터를 쏴주는 Burst데이터 전송 기법으로 더 좋은 성능을 내게 해줌.
* ASB : 주소, 제어, 데이터 라인이 모두 분리된 양방향 버스 구조.
- 번갈아 (주소, 데이터) 전송하여 버스터 로 데이터 전송이 어려움.
* IP : 마스터도 되고, 슬레이브도 됨.
- 마스터는 슬레이브에게 read Write 요청할수있음.- 슬레이브는 요청을 받아 read Write 직접함.- 이런 명령의 결과 상태를 마스터에게 보고함.* 마스터는 Data를 Bus에 흘리는 주체/ 슬레이브는 받아 일을함.
* Decoder
- 마스터와 슬레이브는 버스시스템에 얽혀 있다. 이런 부분을 정리하는 아비터
아비터는 버스를 누가 사용할건지 결정권을 가짐. : 허락받아야 버스를 사용할수 있음.
Arbiter가 대빵 자리를 차지하고 있고요 Master와 Slave는 AMBA System에서 16개까지 붙을 수 있습니다요. 그래서 Master 0~15, Slave 0~15 이렇게 달려 있고요. 여기에 Master와 Slave의 길을 제대로 뚫어주는 Decoder가 있습니다요.
* 순서
① 뭔가 하고 싶은 Master는 Arbiter에게 나.. 버스 써도 될까..? 하고 HBUSREQ 신호를 날립니다.
② 이때, Arbiter는 다른 넘이 쓰고 있으면 허가를 안 해주고, 써도 되면 허가를 해주지요. 그 신호가 HGRANT에요. 너 써.. 하고 선심을 쓰죠.
③ 그러면 Master는 내가 이제 쓴다~ 하고 Arbiter에게 HLOCKx 신호를 날려줍니다. 이제부터는 Arbiter가 누군가가 Bus를 쓰고 있군 하면서 메모를 해 놓는 거죠. 동시에 Master들이 서로 쓰겠다고 날리면, 보통 Arbiter의 Policy에 따라 다른데 Priority가 높은 Master에게 Bus 사용 허가권을 날려주지요.
⑤ 허가를 얻은 Master는 접근하고자 하는 Slave의 주소에 HADDR을 날립니다. 그러면 Decoder가 그걸 보고서 HSELx 신호를 해당 Slave에 날려줍니다. 해당 Slave는 동작 활성화가 되는거져.
⑥ 그런 다음에 Write하겠다는 HWRITE 신호를 High로 Slave에 날려요. (Low면 READ라는 의미에욧!)
⑦ 그런 후에, Slave는 HREADY신호를 이용해서 READY가 되면 READY되었다고 알려줘요.
⑧ 그런 후에 HWDATA 선에다가 Data를 날려주는 거지요.
(HRDATA Bus를 통해서 READ도 할 수 있거등요 참~ 쉽죠? 잉)
Bus쓰는 동안에 Data를 주고 받는 과정을 또 유식한 말로 Transaction이라 불러요.
* Burst Transfer
wait은 아무래도 Slave가 Master보다 느린 Device인 경우가 많으니까, 그런 경우에 나 아직 준비 안되었어요... 하고 HREAY 신호를 Low로 깔아 버리는 거죠. 이게 wait state라는 건데요, wait sate동안에는 Slave가 준비 동작을 하는 거에요.
* 연속된 주소의 Data를 주르르륵 전송할 때 아~주 유용하답니다. 이런걸 Burst Transfer
Burst Transfer의 장점은 무엇이냐! 원래는 하나의 Address phase + 하나의 Data Phase로서 하나의 Transaction이 끝나는 게 정석인데, 하나 이상의 연속된 Data를 쫘르륵 쓸 수 있다는 장점이 있지요. 자동으로 늘어나는 주소와 함께..
P 155
Big Endian / Little Endian
MSB LSB
상위
3-2. 컴파일에 대한 단상
* 전기적 스위치 : 게이트
✔ Native Code
- 기계어 명령의 순차적 집합 : 프로그램
- 예전에 직접 프로시저에게 입력 : 이진수의 나열- 해석의 어려움.그런 기계명령을 Native Code라함.
사람이 이런 이진수의 나열을 해석하기 쉽지 않으니까 - 이런 기계어 명령을 Native Code라고 부른다고 했었죠. -Assembly라는 개념을 도입하게 되었는데, Native Code(기계어)와 1:1 matching이 되는 그나마 사람이 보기 쉬운 표기 체제를 만들어 냈습니다.
Memory에 Data를 읽어 오는 "LDR R0,= 0xFF" -> 0x3CD1FF -> bit pattern으로는 1111001101000111111111
<Win32API>✔
================================================================
7-3-나. 컨트롤도 윈도우다
컨트롤이 윈도우와 동격
- 화면상의 사각 영역을 차지한다는 점에 있어서 윈도우와 같은데 메인 윈도우의 차일드로 존재하며 타이틀 바가 없기 때문에 사용자가 직접 이동시킬 수 없을 뿐이다.
- 또한 윈도우처럼 스타일을 가지며 만들때 지정한 스타일에 따라 모양이나 기능이 달라진다
- 스스로 메시지를 처리할 수 있는 능력이 있다는 점이다.
- 버튼은 마우스를 누르면 쑥 들어가는 모양으로 바뀌고 에디트는 키보드 입력을 받으면 문자열을 조립하여 보여준다.
- 또한 WM_PAINT 메시지를 처리하기 때문에 스스로 자신을 복구(Repaint)할 수 있고
- 부모 윈도우가 메시지를 보내면 그 메시지를 처리한다.
* 버튼이나 에디트를 만들 때 사용한 함수가 CreateWindow 함수라는 점만 봐도 역시 컨트롤은 윈도우이다.
LRESULT CALLBACK WndProc(HWND hWnd , UINT iMessage , WPARAM wParam , LPARAM lParam )
{
HDC hdc;
PAINTSTRUCT ps;
WCHAR str[] = TEXT( "왼쪽 클릭: 에디트 이동, 오른쪽 클릭 : 보임/ 숨김" );
switch ( iMessage)
{
case WM_CREATE:
hEdit = CreateWindow(TEXT ("edit" ), NULL
, WS_CHILD | WS_VISIBLE | WS_BORDER | ES_AUTOHSCROLL
, 10, 10, 200, 25
, hWnd, ( HMENU) ID_EDIT, g_hInst, NULL);
SetWindowText(hEdit, TEXT ("에디트도 윈도우다" ));
return 0;
case WM_LBUTTONDOWN:
nTop = nTop + 10;
MoveWindow(hEdit, 10, nTop, 200, 25, TRUE);
return 0;
case WM_RBUTTONDOWN:
if (bShow)
{
bShow = FALSE;
ShowWindow(hEdit, SW_HIDE);
}
else
{
bShow = TRUE;
ShowWindow(hEdit, SW_SHOW);
}
return 0;
case WM_PAINT:
hdc = BeginPaint( hWnd, &ps);
TextOut(hdc, 200, 100, str, strlen(str));
EndPaint( hWnd, &ps);
return 0;
case WM_DESTROY:
PostQuitMessage(0);
return 0;
}
return ( DefWindowProc(hWnd , iMessage , wParam , lParam ));
}
7-4-가. 리스트 박스
- 리스트 박스는 선택가능한 여러개의 항목들을 나열해 놓고 그중 하나(또는 여러개)를 선택하도록 하는 컨트롤이며
- 여기서 항목이란 주로 문자열이다.
- "listbox"라는 윈도우 클래스를 사용
스타일 | 설명 |
LBS_MULTIPLESEL | 여러개의 항목을 선택할 수 있도록 한다. 이 스타일을 적용하지 않으면 디폴트로 하나만 선택할 수 있다. |
LBS_NOTIFY | 사용자가 목록중 하나를 선택했을 때 부모 윈도우로 통지 메시지를 보내도록 한다. |
LBS_SORT | 추가된 항목들을 자동 정렬하도록 한다. |
LBS_OWNERDRAW | 문자열이 아닌 비트맵이나 그림을 넣을 수 있도록 한다. |
LBS_STANDARD | LBS_NOTIFY | LBS_SORT | WS_BORDER |
* 부모 윈도우로 통지 메시지를 보내는 것이 일반적이므로
- LBS_NOTIFY 스타일은 거의 필수적으로 선택하는 것이 좋으며
- 그외 LBS_MULTIPLESEL이나 LBS_SORT 스타일은 필요할 때 선택하면 된다.
- 부모 윈도우가 리스트 박스를 조작하고자 할 때는 리스트 박스 메시지를 사용한다.
메시지 | 설명 |
LB_ADDSTRING | 리스트 박스에 항목을 추가한다. lParam으로 추가하고자 하는 문자열의 번지를 넘겨주면 된다. |
LB_DELETESTRING | 항목을 삭제한다. wParam으로 항목의 번호를 넘겨주며 남은 문자열수를 리턴한다. |
LB_GETCURSEL | 현재 선택된 항목의 번호(Index)를 조사해준다. |
LB_GETTEXT | 지정한 항목의 문자열을 읽는다. wParam에 항목 번호, lParam에 문자열 버퍼의 번지를 넘겨주면 버퍼에 문자열을 채워준다. |
LB_GETCOUNT | 항목의 개수를 조사한다. |
LB_SETCURSEL | wParam이 지정한 항목을 선택하도록 한다. |
부모 윈도우가 리스트 박스에게 명령을 내리기 위해 사용하며 반대로 리스트 박스에서 어떤 사건이 발생했을 때 부모 윈도우로 통지 메시지를 보낸다.
메시지 | 설명 |
LBN_DBLCLK | 리스트 박스를 더블클릭하였다. |
LBN_ERRSPACE | 메모리가 부족하다. |
LBN_KILLFOCUS | 키보드 포커스를 잃었다. |
LBN_SELCANCEL | 사용자가 선택을 취소하였다. |
LBN_SELCHANGE | 사용자에 의해 선택이 변경되었다. |
LBN_SETFOCUS | 키보드 포커스를 얻었다. |
<리스트 박스에 문자열을 나열해 두고 선택시 이 항목을 읽어와 메인 윈도우의 타이틀 캡션을 변경>
LRESULT CALLBACK WndProc(HWND hWnd , UINT iMessage , WPARAM wParam , LPARAM lParam )
{
int i;
switch ( iMessage)
{
case WM_CREATE:
hList = CreateWindow(TEXT ("listbox" ), NULL
, WS_CHILD | WS_VISIBLE | WS_BORDER | LBS_NOTIFY
, 10, 10, 100, 200
, hWnd, ( HMENU) ID_LISTBOX, g_hInst, NULL );
for (i = 0; i < 5; i++)
{
SendMessage(hList, LB_ADDSTRING , 0, (LPARAM )Items[i]);
}
return 0;
case WM_COMMAND:
switch ( LOWORD( wParam))
{
case ID_LISTBOX:
switch ( HIWORD( wParam))
{
case LBN_SELCHANGE:
i = SendMessage(hList, LB_GETCURSEL , 0, 0);
SendMessage(hList, LB_GETTEXT , i, (LPARAM )str);
SetWindowText(hWnd , str);
break;
}
}
return 0;
case WM_DESTROY:
PostQuitMessage(0);
return 0;
}
return ( DefWindowProc(hWnd , iMessage , wParam , lParam ));
}
이 상태에서 사용자가 리스트 박스의 항목을 선택하면 LBN_SELCHANGE 통지 메시지가 전달된다.
이 때 LB_GETCURSEL 메시지로 현재 선택된 항목의 번호를 구한 후 LB_GETTEXT 메시지로 항목의 문자열을 str버퍼에 읽어둔다.
이렇게 잃어온 문자열을 SetWindowText 함수로 메인 윈도우의 타이틀 바에 출력하였다.
7-4-나. 콤보 박스
콤보 박스는 에디트 컨트롤과 리스트 박스를 결합시켜놓은 컨트롤이다
그래서 목록에 있는 항목중의 하나를 선택할 수도 있고 원하는 항목이 없을 경우 에디트에 직접 항목을 입력해 넣을 수도 있다.
또한 리스트 박스는 항상 열려 있는데 비해 콤보 박스는 필요할 경우만 목록을 열어 선택하므로 화면 공간을 적게 차지한다는 장점도 있다.
"combobox" 윈도우 클래스를 사용하며 세가지 종류
스타일 | 설명 |
CBS_SIMPLE | 에디트만 가진다. |
CBS_DROPDOWN | 에디트와 리스트 박스를 가진다. |
CBS_DROPDOWNLIST | 리스트 박스만 가지며 에디트에 항목을 입력할 수는 없다. |
<콤보 박스를 사용하여 항목중 하나를 선택하거나 아니면 에디트에 직접 문자열을 입력>
>>>추가<<<
LRESULT CALLBACK WndProc(HWND hWnd , UINT iMessage , WPARAM wParam , LPARAM lParam )
{
int i;
switch ( iMessage)
{
case WM_CREATE:
hCombo = CreateWindow(TEXT ("combobox" ), NULL
, WS_CHILD | WS_VISIBLE | CBS_DROPDOWN
, 150, 10, 100, 200
, hWnd, ( HMENU) ID_COMBOBOX, g_hInst, NULL );
for (i = 0; i < 5; i++)
{
SendMessage(hCombo, CB_ADDSTRING , 0, (LPARAM )Items[i]);
}
return 0;
case WM_COMMAND:
switch ( LOWORD( wParam))
{
case ID_COMBOBOX:
switch ( HIWORD(wParam))
{
case CBN_SELCHANGE:
i = SendMessage(hCombo, CB_GETCURSEL , 0, 0);
SendMessage(hCombo, CB_GETLBTEXT , i, (LPARAM )str);
SetWindowText(hWnd , str);
break;
case CBN_EDITCHANGE:
GetWindowText(hCombo, str, 128);
SetWindowText(hWnd , str);
break;
}
}
return 0;
case WM_DESTROY:
PostQuitMessage(0);
return 0;
}
return ( DefWindowProc(hWnd , iMessage , wParam , lParam ));
}
7-5-가. 스크롤 바
스크롤 바는 지금까지 논한 컨트롤들에 비해서는 비교적 복잡한 컨트롤이다
스크롤 바는 "scrollbar"윈도우 클래스로 생성하며
수평 스크롤 바일 경우 SBS_HORZ 스타일을,
수직 스크롤 바일 경우는 SBS_VERT 스타일을 지정한다
스타일은 두 가지 종류밖에 없다.
스크롤 바는 범위와 현재 위치값을 가지는데 다음 두 함수로 이 값들을 지정한다.
BOOL SetScrollRange( HWND hWnd, int nBar, int nMinPos, int nMaxPos, BOOL bRedraw );
.
int SetScrollPos( HWND hWnd, int nBar, int nPos, BOOL bRedraw );
SetScrollRange 함수로 최대값(nMaxPos), 최소값(nMinPos)을 지정하되
첫번째 인수가 스크롤 바의 윈도우 핸들이다.
두번째 인수 nBar는 메인 윈도우에 부착된 스크롤 바 또는 별도의 스크롤 바 컨트롤을 지정하는데
이 값이 SBS_CTL이면 별도의 컨트롤을 지정한다.
SetScrollPos는 스크롤 바의 현재 위치를 세번째 인수 nPos로 지정한다
다른 컨트롤들은 자신에게 변화가 있을 때 부모 윈도우로 통지 메시지를 보내는데
비해 스크롤 바는 WM_HSCROLL(수평일 경우),
WM_VSCROLL(수직일 경우)이라는 별도의 메시지를 부모 윈도우로 보내며 추가 정보는 다음과 같다.
인수 | 설명 |
LOWORD(wParam) | 스크롤 바 내의 어디를 눌렀는가? |
HIWORD(wParam) | 현재 위치 |
lParam | 스크롤 바의 윈도우 핸들 |
* LOWORD(wParam)으로 전달되는 값
- 사용자의 스크롤 요구사항을 나타내며 가능한 값의 종류는 다음과 같다.
값 | 설명 |
SB_LINELEFT 또는 SB_LINEUP | 사용자가 왼쪽 화살표 버튼을 눌렀다는 뜻이며 이때는 왼쪽으로 한 단위 스크롤시킨다. |
SB_LINERIGHT 또는 SB_LINEDOWN | 사용자가 오른쪽 화살표 버튼을 눌렀다는 뜻이며 이때는 오른쪽으로 한 단위 스크롤시킨다. |
SB_PAGELEFT 또는 SB_PAGEUP | 사용자가 왼쪽 몸통 부분을 눌렀다는 뜻이며 이때는 한페이지 왼쪽으로 스크롤시킨다. |
SB_PAGERIGHT 또는 SB_PAGEDOWN | 사용자가 오른쪽 몸통 부분을 눌렀다는 뜻이며 이때는 한페이지 오른쪽으로 스크롤시킨다. |
SB_THUMBPOSITION | 스크롤 박스를 드래그한 후 마우스 버튼을 놓았다. |
SB_THUMBTRACK | 스크롤 박스를 드래그하고 있는 중이다. 이 메시지는 마우스 버튼을 놓을 때까지 계속 전달된다. |
양끝의 버튼을 누르는 것은 비교적 작은 단위(예를 들어 한 줄씩)로 섬세하게 이동
몸통부분을 클릭하는 것은 비교적 큰 단위(예를 들어 한 페이지씩)로 이동
수평 스크롤 바는 왼쪽, 오른쪽으로 스크롤되지만
수직 스크롤 바는 위, 아래로 스크롤
이때 수평의 왼쪽 이동과 수직의 위쪽 이동은 둘 다 값을 감소시키는 점에서 동일
SB_LINELEFT와 SB_LINEUP은 같은 의미
<스크롤 바를 드래그하여 이동시켜 보면 아래쪽 사각형의 색상이 변경>
- 스크롤 바 세 개를 사용하여 R,G,B값을 입력받아 브러시를 만든 후 사각형을 그린다.
- 이 수평 스크롤 바는 사용자가 자신을 클릭할 경우 부모 윈도우로 WM_HSCROLL 메시지를 보내줄 것이다.
- 증감된 값의 결과는 Red, Green, Blue 전역 변수에 대입되며 이 갑시 변경될 때마다 작업 영역을 무효화하여 다시 그리도록 하였다.
8-1-가. 사용자와의 대화
프로그램은 가만히 내버려 두면 혼자서 실행되는 것이 아니다.
사용자로부터 끊임없이 지시를 받고 사용자의 지시에 따라 작업을 하고 작업한 결과를 사용자에게 보고한다.
프로그램과 사용자와의 이런 대화 수단으로 간단하게는 버튼, 에디트, 리스트 박스 등의 컨트롤이 사용된다.
그러나 이런 간단한 컨트롤로는 사용자로부터 복잡한 정보를 입력 받기가 어려우며 많은 양의 정보를 효율적으로 입력받기 위해 주로 대화상자를 사용한다.
대화상자에는 컨트롤들이 배치되며
사용자는 대화상자를 호출한 후 컨트롤을 통해 자신의 의사를 표시하고 명령을 내리며
프로그램은 대화상자에 배치된 컨트롤을 통해 현재 상태를 사용자에게 보여준다.
대화상자는 크게 모달형과 모델리스형으로 나뉘어진다.
* 모달(Modal)형
- 대화상자를 닫기 전에 다른 윈도우로 전환할 수 없으며 반드시 OK버튼이나 Cancel 버튼을 눌러 대화상자를 닫아야 다른 윈도우로 전환할 수 있다.
- 반드시 파일을 선택하거나 아니면 선택을 취소해서 대화상자를 닫아야 다른 일을 할 수 있다
- 모달형에서 다른 프로그램으로는 전환은 Open 대화상자가 열려 있는 상태에서 탐색기로 파일 관리
- MessageBox 함수에 의해 만들어지는 메시지 박스도 모달형 대화상자이다.
* 모델리스(Modeless)형
- 대화상자를 열어 놓은 채로 다른 윈도우로 전환할 수 있는 대화상자이다.
- 워드 프로그램의 찾기 대화상자를 들 수 있다.
- 프로그램의 상태를 나타내거나 작업을 하면서 참조해야 할 여러가지 정보를 보여 주는 윈도우가 모델리스형으로 만들어진다.
- 모델리스형은 다른 작업을 하면서도 열려 있을 수 있기 때문에 여러 가지 문제가 생길 수 있으며 훨씬 더 프로그래밍하기가 까다롭다는 단점이 있다.
8-1-나. About
* 모든 대화상자는 이 두가지가 있어야만 만들 수 있다.
- p 대화상자 템플리트 : 대화상자의 모양과 대화상자내의 컨트롤 배치 상태가 저장되는 이진 정보이며 리소스로 작성된다.
- 모양을 정의
- p 대화상자 프로시저 : 윈도우 프로시저가 윈도우에서 발생하는 메시지를 처리하는 것처럼 대화상자 프로시저는 대화상자에서 발생하는 메시지를 처리한다.
- 동작을 정의
대화상자를 호출할 때는 DialogBox 함수를 사용한다.
모달형의 대화상자이므로 이 대화상자를 닫기 전에는 부모 윈도우를 조작할 수는 없다. OK나 Cancel 버튼을 누르면 대화상자가 닫힌다.
int DialogBox( HINSTANCE hInstance, LPCTSTR lpTemplate, HWND hWndParent, DLGPROC lpDialogFunc );
728x90
'코스웨어 > 15년 스마트컨트롤러' 카테고리의 다른 글
2015-11-27 ARM Assembly 개인업무일지 - 천정호 (8) | 2015.11.29 |
---|---|
20151127_안향진_ARM어셈블리_2 (7) | 2015.11.29 |
20151129 / ARM 어셈블리_2- 남수진 (7) | 2015.11.29 |
20151127 윤재희 #2. ARM/ Thumb PCS - 레지스터 사용법 ~ 컴파일에 대한 단상 (6) | 2015.11.29 |
20151127 임현수 업무일지 ARM #2 함수호출규약 (6) | 2015.11.29 |
20151128 엄민웅 - arm 임베디드레시피 이론 수업 (교제 127~161) (7) | 2015.11.28 |
20151127 - 홍준모 ARM~>ASM 2일 차 - 126p~ (7) | 2015.11.27 |
20151127-김재홍-ARM_Assembly_2일차 (6) | 2015.11.27 |