어셈블리 언어에 대해 조금

어셈블리는 처음으로 만들어진 컴퓨터 언어 중 하나였습니다 . 이 언어 이전에는 어셈블리 전에 컴퓨터를 프로그래밍하는 유일한 방법은 바이너리를 사용하는 것입니다.

따라서 운영자는 1과 0 이하로 원하는 결과를 얻는 방법을 알아야합니다. 인간은 작업을 수행하기 위해 길고 복잡한 숫자 문자열을 읽고 써야했습니다. 당연히 이것은 프로그램을 읽고 쓰기가 쉽지 않았습니다.

코드 조각은 숫자 01100001 (10 진수 97)을 x86 프로세서의 AL 레지스터에로드합니다. 이진 명령어는 10110이며, 3 자리 식별자 000은 AL 레지스터를 사용하도록 지시합니다. 앞서 언급했듯이 이것은 읽고 이해하기 어렵습니다.

어셈블리는 영어 단어 약어 인 니모닉 명령어를 사용 하는 최초의 언어 입니다. 이로 인해 작업량이 줄어들고 읽기가 더 쉬워 져 오늘날의 고급 언어를위한 길을 열었습니다.

위의 코드는 바이너리 스 니펫과 동일 합니다. 10 진수 97을 AL 레지스터에로드합니다. 그러나 동일한 작업을 수행하기 위해 영어 단어 약어를 사용하여 훨씬 더 읽기 쉽게되었습니다. 무슨 일이 일어나고 있는지 기억하는 데 도움이되도록 주석도 추가되었습니다.

역사

번째 어셈블리 언어 는 런던 대학의 ARC2에 대한 1947 년 Kathleen Booth 에 기인합니다 . 그러나이 구현은 현대 니모닉 형식보다는 기계를 실행하는 수학과 더 유사합니다.

첫 니모닉 어셈블리 언어 형식은 전자 지연 스토리지 컴퓨터 모리스 윌크스와 데이비드 윌러에 의해 개발되었다. ESDC가 와 어셈블러했다 하나 개의 문자 니모닉 기계의 첫 번째 31 개 위치에 저장되었다. 이러한 위치를 '초기 주문'이라고합니다.

Assembly의 현대적인 구현은 IBM 7090을 위해 60 년대에 개발되었습니다 . 여러 사람이 Generalized Assembly System이라는 프로젝트에 참여했습니다. 이 사람들에는 Douglas McIllroy와 George Mealy가 포함됩니다.

플랫폼

어셈블리는 기본 기계어이기 때문에 무엇이든 실행할 수 있습니다. 코드 줄은 1 : 1을 기계 코드로 변환합니다. 에서처럼 모든 줄은 하나의 프로세서 명령입니다. 각 코드 줄은 해석되거나 컴파일되지 않습니다 . 어셈블리 사용의 복잡성과 어려움에도 불구하고 오늘날 컴퓨팅에서 널리 사용됩니다.

여러 종류의 응용 프로그램이 있는 여러 종류의 장치에서 실행되는 것을 찾을 수 있습니다 . 다음은 몇 가지 예입니다.

· 고급 언어 옵션이 제한적이거나 유지 관리해야하는 레거시 코드가 필요한 프로세서 용 코드 작성.

· 조립은 하드웨어와 직접 상호 작용하는 데 적합합니다. 장치 드라이버는 언어의 훌륭한 응용 프로그램입니다.

· 기계에 대한 절대적인 제어가 필요한 상황에서 사용됩니다. 시뮬레이션, 민감한 계산, 비행 센서 및 의료 장비에서 이것을 볼 수 있습니다.

· 어셈블리는 암호화 문제에 자주 사용될 수 있습니다. 이는 실행하는 데 동일한 시간이 걸리는 문제에서 특히 그렇습니다.

· 멀웨어는 수신 측의 누구에게나 불쾌감을주기 위해 어셈블리로 작성 될 수 있습니다.

· 부팅 시퀀스는 어셈블리를 사용하여 컴퓨터를 시작합니다.

· 리버스 엔지니어링 소프트웨어. 때때로 컴파일 된 소프트웨어는 어떻게 작동하는지 이해하기 위해 어셈블리로 분해됩니다. 이것은 해커가 프로그램의 보안 조치를이기는 방법을 알아내는 방법입니다.

장점과 단점

모든 언어와 마찬가지로 Assembly에는 장단점이 있습니다.

어셈블리는 매우 오래된 저수준 언어입니다. 프로그램을 실행하기 위해 기계가 많은 해석을 수행 할 필요가 없습니다. 결과적으로 어셈블리로 작성된 프로그램은 매우 빠르게 실행됩니다. 어셈블리 언어는 또한 상위 수준 언어와 경쟁 할 수없는 장치에 대한 제어 수준을 제공합니다.

그러나 이것의 대가는 예외적으로 어려운 프로그래밍 언어라는 것입니다 . 이것은 불행히도 어셈블리로 작성된 프로그램을 오류가 발생하기 쉽게 만들고 많은 사람들이 고수준 언어를 선호하는 어셈블리를 피합니다.

코드의 예

프로그래머가 만드는 전통적인 첫 번째 프로그램은 "Hello World!"입니다. 이 두 단어 만 화면에 출력하는 프로그램입니다. 다음은 Assembly로 작성된프로그램입니다 .

대조적으로, 똑같은 단순한“Hello World!” Python의 프로그램은 한 줄입니다.

Python과 코드 비교

어셈블리 코드는 매우 구체적인 구문을 따릅니다 . 레이블, 피연산자 및 주석은 선택 사항이며 니모닉은 한 줄에 필요합니다.

레이블은 기억의 장소를 나타내는 특별한 방법입니다. START, LOOP 또는 이와 유사한 기능과 같이 프로그램의 중요한 부분에 레이블을 지정 하는 것이 좋습니다 . 어셈블러는이를 필수 값으로 대체합니다. 니모닉은 라인에서 프로그램에 발행 할 특정 방향입니다. 피연산자는 명령을 작동하는 방법의 세부 사항입니다.

일부 명령어에는 피연산자가 필요하지 않은 반면 다른 명령어는 작동하는 데 최대 3 개의 피연산자 가 필요할 수 있습니다 .

어셈블리 코드 세그먼트는 이러한 섹션 헤더로 시작됩니다 . Section.data 및 section.bss는 선택 사항이며 section.text는 필수이며 컴퓨터에 대한 프로그래밍 지침이 포함되어 있습니다. 어셈블리 언어는 프로세서마다 약간 씩 다를 수 있으므로 특정 프로세서마다 다른 요구 사항이있을 수 있습니다.

Python에서와 같이 독자에게 추가 메모를 제공하기 위해 주석이 지원됩니다.

어셈블리에서 코드를 작성하려면 니모닉을 사용하여 메모리의 비트와 상호 작용해야합니다. 각 명령어는 메모리에 저장 될 수 있지만 저장하고 가져 오는 데 시간이 걸립니다. 해결책은 대신 에 레지스터라고하는 프로세서의 내부 메모리를 사용하는 것입니다 . 제한된 수의 레지스터가 프로세서 칩에 내장되고 범주로 그룹화됩니다.

· 일반 : 더 많은 범주로 더 나뉩니다.

◦ 데이터 : 산술 및 논리 연산.

◦ 포인터 : 필요한 오프셋 값 또는 참조를 저장합니다.

◦ 색인 : 문자열의 소스 또는 대상으로 사용됩니다.

· 제어 : 수학적, 논리 또는 조건에 대한 비교 또는 작동 방식을 변경하기 위해 연산의 플래그를 변경하는 연산.

· 세그먼트 : 프로그램의 코드, 데이터 또는 스택 부분의 시작 지점을 저장합니다.

이것은 설명하기 위해이 백서의 범위를 벗어난 상당히 복잡한 주제이므로 레지스터 사용은 위에서 일반화되었습니다. 각 레지스터에는 할당 된 특정 ID가 있으며 수행하는 데 사용되는 일종의 작업이 있습니다. 일부 레지스터는 특별히 한 종류의 작업에만 사용됩니다.

If 문

조건은 Python보다 훨씬 간단합니다. Python에서는 조건부 확인을 위해 'if'문을 사용합니다.

어셈블리는 비교 및 점프 문을 사용하여 조건문을 실행 하며 니모닉은 각각 CMP 및 JMP입니다. CMP는 조건이 충족되는지 확인하고 JMP는 지정된 코드 블록으로 이동합니다. CMP는 'if this'문 역할을하며, JMP는 CMP 결과에 따라 코드를 실행하는 데 사용됩니다.

JMP는 대상 코드 블록으로 점프하기위한 조건이 충족되도록 설정할 수도 있습니다.

고리

위의 JMP 문은 while 루프로 작동하도록 설정할 수 있습니다. 또한 Assembly에는 설정된 횟수만큼 코드를 지속적으로 루프하는 LOOP 니모닉 문이 있습니다. EDX 레지스터는 루프 수를 계산합니다.

트렌드

어셈블리는 오늘날에도 속도 때문에 여전히 활용되고 있으며 컴퓨팅 세계를 떠날 가능성은 거의 없습니다. 2020 년에도 여전히 약간의 수요가있는 언어입니다. 어셈블리 프로그램을 작성하는 작업 당신에게 연간 잘 자격이 120K를 그물로 수 있습니다.

Python이 인기를 끌고 있지만 Assembly는 여전히 수요가 많으며 장점으로 인해 일부 프로그래머에게 사랑 받고 있습니다. 또한 2020 년 스택 교환 설문 조사에 따르면 세계에서 가장 무서운 언어 목록에 올랐습니다 . 이 언어와의 애증 관계입니다.

티오 베는 어셈블리가 2020 년에 사용이 14 번째로 가장 많이 사용되는 언어로 증가한 것으로 보인다고 지적했습니다. 이는 컴퓨팅에서 15 번째로 가장 많이 사용 된 언어 인 2019 년부터입니다.

어셈블리를 배워야합니까?

대답은 '아니오". 어셈블리를 배우는 유일한 두 가지 이유 는 다음과 같습니다.

Assembly에서 작성해야하는 소프트웨어를 작성하고 있습니다. Assembly는 높은 수준의 언어가 비교할 때 어려움을 겪는 소프트웨어에서 비교할 수없는 수준의 제어와 속도를 제공합니다.

컴퓨터가 더 기본적인 수준에서 작동하는 방식을 연구하고 싶습니다. 이것은 높은 수준의 프로그래밍에 도움이 될 수 있으며 종종 컴퓨터 과학 전공자가 어셈블리 언어를 공부하는 이유입니다.

높은 수준의 코더, 심지어 웹 개발자 라면 하드웨어 및 어셈블리 프로그래밍을 이해할 필요가 없습니다!

Suggested posts

좋은 습관을 만들고 유지하는 방법

장기적인 습관을 유지하기위한 생산성 팁

좋은 습관을 만들고 유지하는 방법

두 아이의 엄마가 된 후 일을 끝내기가 더 어려워졌습니다. 나는 한 작업에서 다음 작업으로 뛰어 들었고 하루가 끝날 때까지 아무것도하지 않았을 때 실망했습니다.

양자 컴퓨팅 Pt를위한 프로그래밍. 1 : NumPy

이제 양자 컴퓨팅이면의 물리학을 배우기 시작 했으므로 "이봐, 실제로 양자 컴퓨터를 사용하려면 실제로 양자 장치를 손으로 만들어야합니까?"라고 궁금해 할 것입니다. 답은 양자 컴퓨터를 컴퓨터라고 부르는 이유가 있습니다. 프로그래밍이 가능합니다! 이 시리즈에서는 수학 개념을 시뮬레이션하고 양자 컴퓨터에서 실행하는 소프트웨어를 구축하는 방법을 배우게됩니다. 깨끗하고 현대적이며 라이브러리가 풍부한 언어이기 때문에 Python을 사용하여 코드를 작성할 것입니다.

Related posts

"실용적인 프로그래머"의 5 가지 필수 사항

역대 베스트셀러 코딩 북의 요점

"실용적인 프로그래머"의 5 가지 필수 사항

Pragmatic Programmer는 1999 년에 처음 출판되었으며 이후 역대 최고의 프로그래밍 책으로 선정되었습니다. 저자 Andy Hunt와 David Thomas는 Agile Manifesto의 원저자 중 하나였으며 몇 가지 심각한 자격을 가지고 있습니다.

대규모 GraphQL 쿼리 공격으로부터 보호

공격자가 공개적으로 사용 가능한 GraphQL 인터페이스를 사용하여 사이트를 스크랩하거나 서비스 거부 공격을 실행하는 방법에 대해 알아보십시오. 이들은 4 가지 방법 중 하나로이를 수행 할 수 있습니다. 단일 대형 쿼리를 신중하게 구성하여 실행하고, 관련 데이터를 가져올 수있는 병렬 쿼리를 많이 작성하고, 일괄 요청을 사용하여 많은 쿼리를 연속적으로 실행하고, 마지막으로 많은 요청을 보냅니다.

기술 인터뷰의 사회적 구성 요소

코딩 문제는 스트레스가 많지만 스트레스에 대한 당신의 반응은 당신의 기술적 능력보다 더 크게 말합니다.

기술 인터뷰의 사회적 구성 요소

기술 업계의 직책을 위해 인터뷰 할 때 일반적으로 제안을 고려하기 전에 최소한 3 차례의 인터뷰를 거치게됩니다. 라운드는 일반적으로 다음과 같습니다. 그렇게 생각하면 잘못된 것입니다.

훌륭한 개발자의 3 가지 행동 특성

훌륭한 개발자의 3 가지 행동 특성

훌륭한 개발자를 만드는 비 기술적 인 것들 나는이 기사를 작성하는 것을 한동안 미루고 있습니다. 나는 그것을 작성할 자격이 있다고 생각하지 못했습니다. 오늘은 쓸 때라고 생각했습니다.