PowerPC ABI zcbm4321@gmail.com 김종화.

Slides:



Advertisements
Similar presentations
1 Prof. Young Jin Nam, Daegu University 컴퓨터 구조 (Computer Architecture) 명령어 세트 : 특성과 기능 남영진
Advertisements

Family 의 개요 의 외부 Pin 기능과 내부 기능 Memory 구조 Timing 2 장 8051 의 구조.
YES C 제 1 장 C 언어의 개요 1/34 제 1 장 C 언어의 개요 문봉근. YES C 제 1 장 C 언어의 개요 2/34 제 1 장 C 언어의 개요 1.1 프로그램과 C 언어의 특징 1.2 C 언어의 프로그램 구성 1.3 비주얼 C++ 통합 환경 들어가기.
컴퓨터의 구조 2006년 2학기 컴퓨터의 개념 및 실습.
8장 프로그래밍 언어 8.1 프로그램이란? 8.2 프로그램 언어의 역사 8.3 프로그램 설계 절차
ISA 심화 및 start.S code 분석 SIOR 15th 최재훈.
Linux Debugging issues
C++ Tutorial 1 서강대학교 데이터베이스 연구실.
Basic of Buffer Over Flow
PHP programming 2000년 11월 13일 데이터베이스 연구실 김호숙.
제8장. RISC 및 슈퍼스칼라 프로세서 8.1 RISC의 출현 동기 8.2 RISC의 발전 경위
9장 가로채기(Interrupt) Slide 1 (of 15).
2014 ITA 8월 강의 C Programming -1주차- C언어 기초 정대진 ( )
기본 컴퓨터 프로그래밍 Lecture #6.
컴퓨터구조 – 중간시험 (답안지) 부분점수 (사소한 실수면 -1)
CPU의 이해 CPU란 무엇인가?
RnA DISPLAY 구동 Clcd 구동 Made by Bonobonobono.
Lecture # 어셈블러 설계.
컴퓨터 구조학 정보보호학과.
DSP와 TMS320F28x의 이해.
7장 마이크로프로세서의 명령어수행과 주소지정 방식 Slide 1 (of 29).
출처: IT CookBook, 컴퓨터 구조와 원리 2.0 제 12장
제 18 강 데이터 타입 타입, 변환, 캐스팅 shcho.pe.kr.
1 컴퓨터 시스템 소개.
4장. 컴퓨터 시스템의 구성과 기능 다루는 내용 컴퓨터 분해를 통한 본체 살펴보기 컴퓨터 구성요소 컴퓨터의 기능
Ch2-2. VHDL Basic VHDL lexical element VHDL description
버퍼 오버플로우 시스템보안 인터넷공학전공 권영락.
Chapter 10. Interrupt.
1 마이크로프로세서의 원리 마이크로컨트롤러 AVR ATmega128.
Computer Architecture
리버스 엔지니어링 안녕하십니까? 리버스 엔지니어링 발표를 맡은 정창하입니다. 지금부터 리버스 엔지니어링 발표를
Chapter 06 명령어와 번지지정 방식.
컴퓨터 시스템의 개요.
3주 컴퓨터구조.
8086 프로세서의 구조 및 동작 방식 시스템 프로그래밍 - Lecture #2 신라대학교 컴퓨터공학과 시스템 프로그래밍.
PLC.
제 2 장 변수와 상수.
BOF of 2.6 Kernel ! 박수완 / Su-Wan, PARK [ L1nkC] 숭실대학교 정보보호동아리 ACK
전자의료시스템 및 실습 C-언어 구 환 경희대학교 전자정보대학 동서의료공학과.
아날로그 VS 디지탈 -. Analog Vs Digital -. 디지털 논리에 대하여 -. 메모리에 대하여
제 1장 시스템 소프트웨어의 개요.
임베디드 소프트웨어 설계.
10장. 중앙처리 장치의 명령어 다루는 내용 어셈블리 프로그램의 이해 인터럽트(interrupt) 명령어 세트 주소 지정 방식.
2007년 1학기 전산학개론 성신여자대학교 컴퓨터정보학부
9. 아두이노를 이용한 FND 제어 - 스마트 폰으로 제어하는 아두이노 -.
Programmable Logic Device
쉽게 풀어쓴 C언어 Express 제1장 프로그래밍의 개념 C Express.
제1장 시스템 소프트웨어의 개요 컴퓨터시스템 및 하드웨어 구성 컴퓨터의 구성과 기능 시스템프로그램의 개요
컴퓨터 시스템 개관 시스템 프로그래밍 - Lecture #1 신라대학교 컴퓨터공학과 시스템 프로그래밍.
Computer System Architecture
A Web-Based Little Man Computer Simulator
ARM Development Suite v1.2
윤성우의 열혈 C 프로그래밍 윤성우 저 열혈강의 C 프로그래밍 개정판 Chapter 09. C언어의 핵심! 함수!
1. 컴퓨터 시스템 구성요소 메모리(Memory) 캐시메모리 개념 캐시메모리의 특징 적중률(hit ratio)
파일 구조의 이해 PE Format 안녕하십니까
Machine architecture Programming Language Design and Implementation (4th Edition) by T. Pratt and M. Zelkowitz Prentice Hall, 2001 Chapter 2.
4. 어휘 분석(Lexical analysis)
쉽게 풀어쓴 C언어 Express 제1장 프로그래밍의 개념 C Express.
작동 원리 Keypad 박민호.
Machine architecture Programming Language Design and Implementation (4th Edition) by T. Pratt and M. Zelkowitz Prentice Hall, 2001 Chapter 2.
자료구조 세미나 발표 주제: 자료구조 기초 - 1회 차: 자료구조의 정의, 기초 지식 (함수, 포인터, 레퍼런스)
C언어 프로그래밍의 이해 Ch03. 기본 자료형, 변수와 상수.
성공적인 입사지원서 작성법 제이비커리어 교육수석 소 은 선.
Machine architecture Programming Language Design and Implementation (4th Edition) by T. Pratt and M. Zelkowitz Prentice Hall, 2001 Chapter 2.
10장. 컴퓨터 구조에 대한 세 번째 이야기 작성자: 윤성우.
제03장 정보의 표현.
printf("Global Korea\n");
Lecture 7 7-Segment LED controller using u-controller
스플라인 단축부 스냅링 홈 높이 불량 개선 대책 LR1-1 SHELL –RR ANNULUS ( T)
4-1. 명령어 형식.
Presentation transcript:

PowerPC ABI zcbm4321@gmail.com 김종화

introduction PowerPC는 약 60개의 기본 명령어존재 많이 사용되는 것은 약 10개 대표적인 명령어 많이 사용되는 것은 약 10개 대표적인 명령어 li – load immediate – 레지스터에 값을 로드한다. stw – 레지스터에서 메모리로 word를 저장한다. lwz – 메모리에서 레지스터로 word를 로드한다.

기본 프로세서의 동작 PowerPC는 크게 두가지 타입으로 레지스터를 나눌수 있다. integer 타입의 r0~r31 floating point 타입의 f0~f31

Example 1 do_add : li r3, 10 li r4, 20 add r5, r4, r3 stw r5, sum(rtoc) blr sum: ds.w 1

데이터 로드하기 lwz rx, EA li rx, num 레지스터에 16bit 값을 채워넣는다. 상위 16비트는 부호 확장으로 사용된다. 즉 15번째 비트가 1이면 나머지 16~31번째 비트는 모두 1이된다.

만약 0x1234가 로드가 되면 r3의 값은 0x00001234가 되고 0xf234가 로드되면 0xfffff234가 된다. li r3, 0x1234 stw r3, my_variable(`bss) bss는 전역데이터가 저장되는 곳이다. 만약 0x1234가 로드가 되면 r3의 값은 0x00001234가 되고 0xf234가 로드되면 0xfffff234가 된다.

전역변수 전역변수는 RAM의 bss섹션에 저장된다. bss는 프로그램 빌드시에 확정되며 메모리에 로드될 때 TOC섹션의 첫번째 엔트리에 그 주소가 있다.

지역변수 지역변수는 스택에 저장된다. 스택포인터는 r1으로 사용한다. lwz r3, my_data(sp) 지역변수는 스택에 저장된다. 스택포인터는 r1으로 사용한다. 일반적인 임시 데이터(return addr)는 스택에 저장되지만 함수 매개변수는 반드시 레지스터에 저장되어야 한다.

데이터의 초기화 bss영역은 실행시간에 setup이 되지만 data 영역은 빌드시 정의된다. fluffy_string: dc.b “Fluffy loves socks” align bss영역은 실행시간에 setup이 되지만 data 영역은 빌드시 정의된다. dc는 define constant 의 약어로서 data 영역으로 정의된다. align 은 다음 데이터를 위한 메모리 정렬이다. data 영역은 메모리 어디서나 위치할 수 있으며 TOC섹션의 참조로 접근이 가능하다. TOC섹션의 위치는 r2에 저장되어 있다.

Example2 entry : lwz r3, fluffy_string(rtoc) blr *************data************* fluffy_string dc.b “Fluffy loves socks” align 020ca238 *dc.l 0x7c22192a | 7c22192a 020ca23c lwz r3, 0x0004(rtoc) | 80620004 020ca240 blr | 4e800020

함수 호출 함수 호출 시 link register를 저장해야한다. my_code: bl my_function1 add r3, r4, r5 blr my_function: mflr r29 your processing code mtlr r29 함수 호출 시 link register를 저장해야한다. 어떤 명령어로 인하여 link register의 값을 잃어버리는 경우가 있다.

정리 sp – 스택 포인터이다. r1으로 사용한다. rtoc – toc 포인터이다. r2로 사용한다. parameters은 일반적으로 r3~r10으로 이용한다. 그리고 return 레지스터는 r3으로 사용된다. 낮은 번호의 레지스터는 휘발성이다. 높은 번호의 레지스터는 비휘발성으로서 오랫동안 저장하고 있다. 예를 들어 LR레지스터를 보통 r29에 저장하거나 r28에 저장한다.

IBM PowerPC 970FX Processor 32bit

64bit

대표적인 명령어

대표적인 명령어

명령어 사용 결과

데이터 타입의 크기

Stack ABI는 표준 함수 호출 과정의 정의에서 다음을 포함한다. 매개변수 전달 레지스터 용도 정의 스택 프레임 레이아웃

Stack

Stack r1은 스택 프레임 포인터이다. 스택 프레임 포인터는 다음과 같은 특징을 반드시 따라야한다. 반드시 8byte의 정렬을 가져야한다. 반드시 스택 프레임의 하단부를 가르켜야한다. 반드시 위에서 아래로 자란다. 스택 프레임의 크기는 16byte의 크기로 나누어 떨어여야한다. 스택 프레임은 stdu의 명령어를 사용하면 자동 업데이트를 한다. back chain은 반드시 이전에 만들어진 스택 프레임을 가르켜야한다. 함수가 호출되면 다음 스택 프레임이 생성이된다.

Stack frame

Table Of Content (TOC) ELF 파일 안에 .toc로 정의되어 있다. example ld r4, 0x1234(r2)

Function Descriptors 64bit 에서만 정의되어 있다. ELF파일 안에 .opd 섹션으로 정의 되어 있다. 어드레스로 함수를 표현하던 것과 달리 함수의 심볼 이름에 디스크립터의 주소가 들어간다.

Object File Format PowerPC 64-bit ELF 포맷은 일반 포맷과 다르다. 새로운 색션이 추가되어 있다.(.glink, .got, .toc, .tocbase, .plt, .opd) 새로운 relocation entries를 가진다.

32-bit software to PowerPC 970FX Computation Mode 함수 포인터 함수 디스크립터를 사용해서 주소를 구해야한다.

TOC programming global symbol은 TOC 포인터을 이용해야한다. high level 언어는 컴파일러에서 변환된다. 다음 예제는 매크로를 사용하여 r4에 global_symbol_name 값의 주소를 TOC pointer를 이용하여 로드하는 것이다.

64bit값을 r4에 로딩하기 PowerPC 970FX에서 GPR에 64bit 값을 로드하기 위해서는 다음과 같은 코드가 필요하다.

Function Prolog and Epilog 어셈블리 언어에서 함수의 prolog와 epilog 코드를 정의해야한다. (32bit PowerPC ABI를 64bit ABI에 포팅 할 경우)

Assembler Data Objects

Assembly Language Function Calls PowerPC 64-bit ELF ABI에서는 함수를 호출할때 다음과 같은 문법을 사용해야한다. dot을 함수 이름 앞에 사용한다. dot이 없을 경우는 toc를 이용하여 주소를 참조해야한다.