하이 레벨 조립체
High Level Assembly![]() |
개발자 | 랜들 하이드 |
---|---|
안정적 해제 | 2.16 / 2011년 7월 6일 전 ) |
리포지토리 | sourceforge |
기록 위치 | 어셈블리 언어 |
운영 체제 | Windows, Linux, FreeBSD, MacOS |
플랫폼 | IA-32 |
다음에서 사용 가능 | 영어 |
유형 | 조립자 |
면허증 | 공용 도메인 |
웹 사이트. | plantation-productions |
HLA(High Level Assembly, High Level Assembly)는 랜달 하이드(Randall Hyde)가 개발한 고급 조립 언어다.그것은 초급자와 고급 조립 개발자 모두를 돕기 위해 상위 레벨의 언어 구조를 사용할 수 있게 한다.고급 데이터 유형과 객체 지향 프로그래밍을 완벽하게 지원한다.Pascal, Ada, Modula-2, C++ 등 몇몇 고급 프로그래밍 언어(HLLs)에 느슨하게 기반을 둔 구문을 사용하여 읽기 쉬운 어셈블리 언어 프로그램을 만들 수 있으며, HLL 프로그래머가 HLA를 최대한 빨리 배울 수 있도록 한다.
기원과 목표
HLA는 원래 대학 수준에서 어셈블리 언어 프로그래밍을 가르치는 도구로 고안되었다.조립 언어를 배울 때 학생들의 기존 프로그래밍 지식을 활용해 최대한 속도를 높이는 것이 목표다.조립 언어 프로그래밍 과정을 수강하는 대부분의 학생들은 IF, WID, FOR 등과 같은 높은 수준의 제어 흐름 구조를 이미 도입하였다.HLA는 학생들이 해당 프로그래밍 지식을 과정 초기에 조립 언어 코딩에 즉시 적용할 수 있도록 하며, 이러한 제어 구조의 낮은 수준의 형식을 코드화하는 방법을 배우기 전에 조립 시 다른 필수 과목을 숙달할 수 있도록 한다.랜달 하이드의 '집회 언어 프로그래밍의 기술'이라는 책은 이러한 목적을 위해 HLA를 사용한다.[1]
하이 레벨 대 로우 레벨 조립자
HLA v2.x 조립자는 일반 저수준 조립자와 동일한 저수준 기계 지침을 지원한다.차이점은 인텔 x86 프로세서 제품군의 HLA, 마이크로소프트 매크로 조립러(MASM), 터보 조립러(Turbo Assemblyler) 등 고급 조립자도 IF, WID 등 높은 수준의 언어와 유사한 문구와 구조 레코드, 조합, 심지어 클래스 등 보다 화려한 데이터 선언 지시문을 지원한다는 점이다.
대부분의 다른 조립자 도구와 달리 HLA 컴파일러에는 수천 개의 기능, 절차, 매크로가 포함된 표준 라이브러리가 포함되어 있어, 고수준 언어의 용이성으로 완전한 응용 프로그램을 만드는 데 사용할 수 있다.조립 언어 라이브러리가 새로운 것은 아니지만, 대형 표준화된 라이브러리를 포함하는 언어는 프로그래머들이 단순히 자신의 라이브러리 기능을 쓰기 보다는 그러한 도서관 코드를 사용할 가능성이 훨씬 더 높아지게 한다.
HLA는 다른 x86 조립자와 동일한 모든 하위 수준의 기계 설명서를 지원한다.또한 HLA의 높은 수준의 제어 구조는 MASM과 TASM에서 발견된 것을 기반으로 하고 있는데, HLL과 유사한 특징이 HLA의 도착을 몇 년 앞당겼다.HLA에서 낮은 수준의 조립 코드는 HLL-제어 구조를 무시하는 것만으로 다른 조립자와 마찬가지로 쉽게 작성할 수 있다.Pascal이나 C(++)와 같은 HLLs와는 대조적으로 HLA에는 인라인 asm 문장이 필요하지 않다.HLA에서 HLL과 같은 특징은 기초 조립 프로그래머가 낮은 수준의 명령어 세트를 숙달하면 그러한 문장의 사용을 중단할 것이라는 가정 하에 학습 곡선을 부드럽게 하여 초기 조립 프로그래머에게 학습 보조를 제공하는 것으로 보인다.실제로 많은 숙련된 프로그래머들이 낮은 수준의 명령어 세트를 숙달한 지 오래되어 HLA, MASM, TASM에서 HLL과 같은 문장을 계속 사용하고 있지만, 이것은 대개 가독성을 향상시키기 위해 행해진다.
또한 HLA를 이용하여 수준 높은 프로그램을 작성하는 것도 가능하여 수준 낮은 어셈블리 언어 프로그래밍의 테디움을 많이 피할 수 있다.일부 조립 언어 프로그래머들은 HLA가 프로그래머들이 이것을 할 수 있게 해주기 때문에 그것을 즉시 거부한다.그러나, 높은 수준의 프로그래밍과 낮은 수준의 프로그래밍을 모두 지원하면 모든 언어에 적용 가능한 범위가 확대된다.저수준 전용 코딩만 해야 한다면 가능하다.더 읽기 쉬운 코드를 써야 한다면, 더 높은 수준의 문장을 사용하는 것이 선택사항이다.
구분 피쳐
강력한 매크로 시스템(복합 시간 언어)과 HLA 표준 라이브러리라는 두 가지 HLA 기능이 다른 x86 조립업체와 차별화된다.
매크로 시스템
HLA의 컴파일 타임 언어는 언어를 쉽게 확장할 수 있으며, 심지어 작은 도메인별 언어를 만들어 일반적인 프로그래밍 문제를 쉽게 해결할 수 있도록 도와준다.매크로stdout.put
앞에서 간략하게 설명한 것은 프로그래밍을 단순화할 수 있는 정교한 매크로의 좋은 예다.매크로의 다음 호출을 고려하십시오.
stdout.put( "I=", i, " s=", s, " u=", u, " r=", r:10:2, nl );
건장한 체격자.매크로 프로세스를 배치하여 인수 유형을 결정한 다음 HLA Standard 라이브러리에서 적절한 절차를 호출하여 각 피연산자의 출력을 처리하십시오.
대부분의 조립자는 일종의 매크로 능력을 제공한다: HLA가 다른 조립자보다 제공하는 장점은 다음과 같은 매크로 인수를 처리할 수 있다는 것이다.r:10:2
HLA의 광범위한 컴파일 시간 문자열 함수와 HLA의 매크로 설비를 사용하면 변수의 유형을 유추하여 그 정보를 매크로 확장을 지시할 수 있다.
HLA의 매크로 언어는 특별한 컨텍스트 프리 매크로 기능을 제공한다.이 기능은 시작 및 종료 매크로 쌍을 통해 코드의 다른 섹션에 걸쳐 있는 매크로를 쉽게 작성할 수 있다(시작-종단 매크로 사이에서만 사용할 수 있는 선택적 중간 매크로 호출과 함께).예를 들어, 이 매크로 설비를 사용하여 완전히 재귀적인 SWITCH-CASE-DEFAULT-ENDSwitch 문을 작성할 수 있다.
HLA 매크로 시설에서 컨텍스트 없는 설계로 인해 이 스위치..케이스..디폴트..endswitch 문은 중첩될 수 있으며, 중첩된 문장의 방출 코드는 외부 문과 충돌하지 않는다.
컴파일 시간 언어
HLA 매크로 시스템은 사실 HLA Compile-Time Language(CTL)라고 알려진 더 큰 기능의 하위 집합이다.HLA CTL은 HLA 프로그램 소스 파일에서 사용할 수 있는 해석 언어다.통역자는 HLA 소스 파일을 컴파일하는 동안 HLA CTL 문을 실행하므로, compile-time language라는 이름이 붙는다.
HLA CTL에는 #IF, #WID, #FOR, #PRINT, 할당문 등 많은 제어문이 포함되어 있다.또한 컴파일 시간 변수와 상수(기록과 조합과 같은 구조화된 데이터 유형 포함)를 만들 수 있다.또한 HLA CTL은 수백 가지의 내장 기능(매우 풍부한 문자열 및 패턴 매칭 기능 포함)을 제공한다.HLA CTL은 프로그래머들이 문자열을 스캔하고 구문 분석하는 CTL 프로그램을 만들 수 있도록 하여, 프로그래머들이 임베디드 도메인 특정 언어(EDSL, 미니언어라고도 불림)를 만들 수 있게 한다.그stdout.put
매크로는 그러한 EDSL의 한 예다.put 매크로(stdout 네임스페이스에서, 따라서 stdout.put이라는 이름)는 매크로 매개변수 목록을 구문 분석하여 피연산자를 인쇄할 코드를 내보낸다.
표준 라이브러리
HLA 표준 도서관은 사전 작성된 루틴과 매크로(stdout과 같은)의 광범위한 집합이다.위에서 설명한 매크로)를 적용하여 프로그래머들이 새로운 응용프로그램을 작성할 때마다 휠을 재창조하지 않도록 한다.아마도 HLA 표준 라이브러리는 프로그래머들이 소스 코드를 다시 컴파일하는 것만으로 Windows나 Linux에서 실행되는 휴대용 응용프로그램을 쓸 수 있게 해준다.프로그래밍 언어 C의 C 표준 라이브러리와 마찬가지로 HLA 표준 라이브러리는 낮은 수준의 운영 체제(OS) 호출을 추상화할 수 있도록 허용하므로, 동일한 세트의 OS 응용 프로그래밍 인터페이스(API)가 HLA가 지원하는 모든 운영 체제에 대해 서비스할 수 있다.어셈블리 언어는 프로그램이 HLA Standard Library API 세트를 사용하는 필요한 OS 호출을 허용하는 반면, OS-portable 프로그램은 쓰기 쉽다.
HLA 표준 도서관은 수천 개의 기능, 절차, 매크로를 제공한다.목록은 시간이 지남에 따라 변경되지만, HLA v2.12의 경우 2010년 중반부터 다음과 같은 범주에 기능이 포함되었다.
- 명령줄 인수 처리
- 어레이(동적) 선언 및 조작
- 비트 조작
- 블롭(이진 대형 객체) 조작
- 캐릭터 조작
- 전환
- 문자 집합 조작
- 날짜 및 시간 함수
- 객체 지향 파일 I/O
- 표준 파일 I/O
- 파일 시스템 조작 기능(예: 삭제, 이름 변경, 디렉토리 변경)
- HLA 관련 선언 및 함수
- HLA Object Windows Library: Win32 프로그래밍을 위한 객체 지향 프레임워크
- 링크된 목록 조작
- 수학적 함수
- 메모리 할당 및 관리
- FreeBSD별 API
- Linux별 API
- MacOS별 API
- Win32별 API
- 텍스트 콘솔 기능
- 코루틴 지지대
- 환경변수지원
- 예외 처리 지원
- 메모리 맵 파일 지원
- 소켓 및 클라이언트-서버 개체 지원
- 스레드 및 동기화 지원
- 타이머 기능
- 정규 표현식 및 상황 없는 언어에 대한 패턴 일치 지원
- 난수생성기
- 원격 프로시저 호출 지원
- 표준 오류 출력 기능
- 표준 출력 기능
- 표준입력함수
- 문자열 함수
- 테이블(연관) 지원
- 영종단 문자열 함수
디자인
The HLA v2.x language system is a command-line driven tool that consists of several components, including a shell program (e.g., hla.exe under Windows), the HLA language compiler (e.g., hlaparse.exe), a low-level translator (e.g., the HLABE, or HLA Back Engine), a linker (link.exe under Windows, ld under Linux), and other tools such as a resource cWindows용 ompiler.2.0 이전 버전은 외부 조립자 백엔드에 의존했으며, HLA의 2.x 이상 버전은 백엔드 객체 코드 포맷터로 내장 HLABE를 사용한다.
HLA 셸 애플리케이션은 명령행 파라미터를 처리하고 적절한 파일을 HLA 시스템을 구성하는 각 프로그램으로 라우팅한다.그것은 입력으로 받아들인다..hla
파일(HLA 원본 파일),.asm
파일(MASM, TASM, FASM, NASM 또는 가스 조립체용 소스 파일).obj
링커에 입력하기 위한 파일 및.rc
파일(리소스 컴파일러에서 사용)
소스 코드 변환
원래 HLA v1.x 도구는 소스 코드를 중간 소스 파일로 컴파일하여 MASM, TASM, 플랫 조립기(FASM), Netwide Assembler(NASM), GNU Assembler(Gas)와 같은 백엔드 조립자가 낮은 레벨의 객체 코드 파일로 변환한다.HLA v2.0을 기준으로 HLA는 낮은 수준의 객체 코드 번역을 제공하는 자체 HLABE(HLA Back Engine)를 포함했다.그러나 다양한 명령줄 매개 변수를 통해 HLA v2.x는 여전히 HLA 소스 파일을 이러한 다른 조립자 중 하나와 호환되는 소스 파일로 변환할 수 있는 기능을 가지고 있다.
HLA 백엔진
HLABE(HLABE)는 내부 중간 언어를 저수준 휴대용 실행 파일(PE), COFF(Common Object File Format), 실행 파일 및 연결 가능한 Format(ELF) 또는 Mach-O 객체 코드로 변환하는 컴파일러 백엔드다.HLABE 프로그램은 대부분 데이터(바이트) 방출 문, 32비트 다시 연결 가능한 주소 문, x86 제어 전달 지침 및 다양한 지침으로 구성된다.HLABE는 바이트 및 다시 연결 가능한 주소 문을 낮은 수준의 객체 코드 형식으로 변환하는 것 외에도 분기-변위 최적화(분기 명령의 가능한 최단 형태 선택)도 처리한다.
HLABE는 HLA v2.x 컴파일러에 통합되어 있지만, 실제로는 별도의 제품이다.그것은 공개 도메인이고 오픈 소스다(SourceForge.net에서 호스트된다.
참고 항목
메모들
- ^ "The Art of Assembly Language Programming". Archived from the original on 2018-03-29. Retrieved 2010-02-12.
참조
- 리처드 블럼, 프로페셔널 어셈블리 언어, Wiley, 2005, ISBN 0-7645-7901-0, 페이지 42
- 랜달 하이드, 위대한 코드 쓰기: 기계 이해, 노 녹말 프레스, 2004, ISBN 1-59327-003-8, 페이지 14–15, 책 전반에 걸쳐 사용
- 랜달 하이드, 조립 언어의 기술, 제2판, 녹말 출판 금지, 2010, ISBN 1-59327-207-3, 책 전반에 걸쳐 사용됨
추가 읽기
- Paul Panks (2005년 6월 29일), HLA: The High Level Assembly Programming Language, Linux Journal