어셈블리언어(시스템프로그래밍) 과제-1 (간단한 어셈블리 언어 프로그램 작성)
동긔
다운로드
장바구니
소개글
어셈블리언어(시스템프로그래밍) 과제-1 (간단한 어셈블리 언어 프로그램 작성) 입니다.직접 강의를 듣고 책을 찾아보면서 복습한 뒤 과제를 작성한 것입니다.
과제점수로도 만점을 받았던 자료입니다.
혹시나 모르시는 내용이 있으시면 문의 주시면 감사하겠습니다.
자세히 설명해 드릴게요!
과제를 하실 때 참고하시는 용도로 사용해주시면 감사하겠습니다.
목차
없음본문내용
1. 간단한 계산을 수행하는 어셈블리 언어 프로그램 작성하기(1) 저자가 제공한 파일을 다운로드 받아서 c:\irvine에 설치하고 이 디렉토리가 path에 포함
되었
는지 확인하고 path에 포함되지 않았으면 1번의(2)에서 언급한 시스템 환경변수 path에
c:\irvine 위치를 추가하시오. (make32가 실행되면 path에 포함된 것이다.)
(2) 어셈블리언어 프로그램 작업을 할 디렉토리를 적절한 위치에 만드시오.
(3) 명령어 창에서 프로그램 작업 디렉토리로 이동하고 다음과 같이 notepad 편집기를 실행
하여 프로그램 작성 준비를 하시오. C> cd \asm ... 프로그램 작업 디렉토리가 c:\asm인 경우
C> notepad test.asm (또는 다른 편집기 사용가능)
(4) 이 파일에 다음 식을 계산하여 최종 결과를 EAX에 저장하는 어셈블리 언어 프로그램을
작
성하고 저장하시오. 10000h + 30000h – 40000h + 50000h – 6000h
(5) 저자가 제공한 배치파일 make32을 사용하여 어셈블 및 링크를 하여 실행파일을 생성하고
파일 test.exe가 생성되었는지 확인하시오. (배치파일을 실행하면 어셈블하여 실행파일이 생성
된 후 dir이 자동실행되어 출력된 파일 목록에서 test.exe가 있는지 확인할 수 있다.)
C> make32 test
(6) 생성된 실행파일을 다음과 같이 명령어로 실행시켜서 동작을 확인하시오. C> test
2. 메모리 변수를 사용하는 protected mode 프로그램 작성
(1) 데이터 정의문을 사용하여 32비트 변수 x, y에 각각 30000h와 50000h가 저장되도록 변
수를 정의하고, 결과 저장용 32비트 변수 z를 함께 정의하시오. 그리고 다음을 계산하는 프로
그램을 작성하고 call DumpRegs을 사용하여 동작을 확인하시오. z = x + y – 20000h
- 코드
- 코딩 후 어셈블 결과
- 출력결과
(2) dir 명령어를 사용하거나 윈도우 탐색기를 사용하여 (1)번 프로그램의 실행파일의 크기를
확인하시오.
=> test2.exe의 실행파일크기는 22,016 바이트이다. 3. 큰 데이터가 포함된 프로그램 작성
(1) 3번 프로그램에서 .data 세그먼트에 원소의 갯수가 1000개인 32비트 배열 변수 array를
선언하여 1000개의 32비트 데이터 저장공간을 추가로 정의하고 실행파일을 만든 후에 실행파
일의 크기를 확인하시오. - 코드
- 코딩 후 어셈블 결과
=> arrayTest.exe의 크기는 12,288바이트이다.
(2) 3번 프로그램에서 array를 .data 세그먼트 대신에 .data? 세그먼트에서 정의하고 실행파
일을 만든 후에 실행파일의 크기를 확인하시오. - 코드
- 코딩 후 어셈블 결과
=> arrayTest2.exe의 크기는 7,168바이트이다.
(3) 두 실행파일의 크기를 비교하고, 차이가 발생하는 이유를 말하시오. 그리고 1번 실행파일
의크기와도 비교하시오.
=> arrayTest.exe의 파일크기는 12,288바이트이고 arrayTest2.exe의 파일크기는 7,168바이
트이다. 차이가 발생하는 이유는 arrayTest2.asm에서 .data? 디렉티브를 사용하였는데 이
세그먼트를 실행파일에 포함시키지 않기 때문에 프로그램 실행파일 크기를 줄여줄 수 있다. 그렇기 때문에 arrayTest2.asm의 코드에서 bigArray DWORD 1000 DUP(?) 요 부분이 실행
파일에 포함되지 않았으므로 실행파일의 크기가 줄 수 있는 것을 확인할 수 있다. 또한 1번의 실행파일인 test.exe의 크기는 22,016인데 반해 arrayTest.exe의 크기는 12,288
인 것을 확인할 수 있다. 4. 기호상수 정의 프로그램 작성
프로그램을 다음과 같이 작성하고 동작을 확인하시오. ・ 등호 디렉티브를 사용하여 SecondInDay 기호 상수에 하루 24시간이 몇 초인지를 계산하
는산술식으로 값을 정의하시오. ・ 10개 이상의 원소가 정의되어 있는 16비트 정수(word) 배열 wArray를 선언하고 이 배열
의
크기를 TEXTEQU 디렉티브를 사용하여 wSize 기호 상수에 산술식으로 정의하시오
・ 어셈블리언어 프로그램에서 SecondInDay 값은 EAX에, wSize 값은 EBX에 저장하고 call
DumpRegs를 사용하여 동작을 확인하시오.
- 코드
- 코딩 후 어셈블 결과
- 출력 결과
=> 해당 결과를 확인하면 EAX에는 16진수의 15180 즉 2진수로 변환하면 0001 0101 0001
1000 0000인데 이것을 다시 10진수로 변환하면 65536 + 16384 + 4096 + 256 + 128 = 86400 (하루 24시간의 초 수)임을 알 수 있다. 또한 wSize가 저장된 EBX에는 16진수로 A
즉 배열의 크기인 10임을 보여주고 있다.