2016년 10월 17일 월요일
ASSEMBLY 161017
CISC 의 단점 :
복잡한 명령어를 해독하고 실행하는 데 시간이 비교적 오래 걸린다
ECX 레지스터는 어던 특별한 목적으로 사용되는가 ?
루프카운터
스택 포인터 (ESP)이외에 어떤 다른 레지스터가 스택에 있는 변수를 가르키는가?
EBP
어떤 인텔 프로세서가 IA-32계열의 첫 번째 프로세서인가 ?
THE Intel 80386
실제 주소모드에서
주소 8000:0250 은 8000에서 시작하는 세그먼트 내의 오프셋 250을 나타내며
이 주소의 선형주소는 80250h 이다.
실제 주소모드는 선형주소가 20비트이다
프로그램은 선형주소를 직접 사용할 수 없어서 두 개의 16비트 정수를 사용하여
주소를 나타낸다 세그먼트 - 오프셋 주소는 다음을 포함한다
16비트 세그먼트값 - 세그먼트 레지스터 중 하나에 위치한다
16비트 오프셋 값
cpu는 세그먼트-오프셋 주소를 20비트 선형 주소로 자동으로 변환
변수의 16진수 세그먼트-오프셋 주소가 08F1:0100 이라고 하자
cpu는 세그먼트 값에 16을 곱하고 곱에 변수의 오프셋을 더한다
08F1h X 10h = 08F10h
균일 세그먼트 모델
세그먼트 서술자의 베이스 주소는 사용할 수 있는 메모리의 첫 번째 주소를 나타낸다
x86 구조 기반의 모든 최신 운영체제는 균일 세그먼트 모델을 사용
[전역 서술자 테이블]
다중 세그먼트 모델
[지역 서술자 테이블]
PCI 버스 는 cpu와 여러 시스템 장치간에 연결 브릿지 제공
PCI 고속 버스는 장치와 메모리 , 프로세서간에 양방향 직렬연결 제공
ROM : 영구적으로 칩에 구워지며 삭제될 수 없다
DRAM : 주 메모리, 프로그램이 실행 중일때 프로그램과 데이터가 DRAM에 저장
SRAM : 고속 캐쉬 메모리용
VRAM : 비디오 저장
범용 직렬 버스 (USB)
지원장치간의 지능적이고 고속의 연결
장치드라이버
장치드라이버는 운영체제가 하드웨어 장치와 직접 통신을 하는 저수준 서브루틴
.code 디렉티브는 코드 세그먼트의 시작을 나타냄
main proc 는 프로시저의 시작
INCLUDE 디렉티브의 의미는 무엇인가 ?
IRVINE32.inc 로부터 필요한 정의와 셋업을 가져온다
어떤 문장이 프로그램을 종료시키는가 ?
exit
직접 오프셋 피연산자
mov al,arrayB
mov al,[arrrayB+1]
arrayB+1과 같은 수식은 유효 주소라고 한다
뺄셈 carry 플래그
1. 소스 피연산자의 부호를 바꾸고 목적지 피 연산자에 더한다
2. MSB의 캐리의 출력을 반전시켜서 carry로 복사한다
mov al,1
sub al,2
00000000
11111110
11111111
MSB 캐리가 0이므로 반전 1
패리티 플래그
1이 짝수면 1
movsx edx,var1 . ; varl= -4
FFFFFFFCh
2016년 10월 11일 화요일
ASSEMBLY MIDTERM
어셈블러란 무엇인가? 어셈블리어로 작성된 소스코드를 기계어로 변환하는 유틸리티 프로그램이다
링커란 무엇인가 ? 어셈블러가 생성한 파일들을 하나의 실행파일로 합치는 유틸리티 프로그램이다.
디버거란 무엇인가 ? 프로그램 실행 동안 프로그램을 단계적으로 실행하고 레지스터와 메모리를 살펴보게 한다.
어셈블리언어는 기계어와 어떠한 관계가 있는가 ?
어셈블리 언어는 기계어와 일대일 대응관계를 갖는다
고급언어는 어셈블리 언어와 어떠한 관계를 가지는가 ?
고급언어는 어셈블리언어와 일대다 관계를 갖는다
이식성의 정의
소스 프로그램을 컴파일하여 다양한 컴퓨터에서 실행 될 수있는 언어를 이식성이 있다고 한다
따라서 어셈블리어는 이식성이 없다
해독
L1 의 각 명령어는 L0 언어로 작성된 프로그램에 의해서 해독되어 실행
변환
L0 프로그램에 의해 L1 전체가 L0 프로그램으로 변환됨
가상 기계 레벨에 대해 적으시오
레벨 1. 디지털 논리 하드웨어
레벨 2. 명령어 집합 구조
레벨 3. 어셈블리어
레벨 4. 고급언어
기계어는 어느 레벨의 가상 기계에서 사용되는가 ?
레벨 2. 명령어 집합 구조
가중 위치 표기법에 대해서 설명하시오
우리가 흔히 쓰는 2진수에서 10진수 변환 공식. ..
11111111+00000001 = ?
if 8bit, 00000000
1byte- 8 word-16 dword-32 qword-64
16진수의 2의 보수를 구하시오.
16진수를 쉽게 반전시키는 방법은 자리 숫자를 15에서 빼는것이다 그리고 1을더한다(마지막비트에)
ex) 6A3D - - > 9 5 C 2 + 1 - - > 9 5 C 3
아스키 문자 집합은 몇비트 정수가 문자에 저장되는가 ?
7bit
ANSI 문자집함은 몇비트 문자 집합을 정의하는가 ?
8bit 256문자
유니코드 표준을 제정한 이유는 ?
매우 다양한 국제 언어를 표현할 필요성이 생김으로 인하여
256bit 부호 있는 정수를 사용하여 나타낼수 있는 가장 큰 양수는 무엇인가 ?
2^255-1
버스에 대해서 설명하시오
데이터를 컴퓨터의 한 부분에서 다른 부분으로 전송하는 병렬 와이어 이다.
버스의 종류에 대해 설명하시오
데이터 버스 , 입출력 버스 , 제어 버스 , 주소 버스
메모리 접근 속도를 높이기 위해 무엇을 사용하는가?
cache memory
고속 캐시 메모리에 대해 설명하시오
프로그램이 블록 데이터를 처음으로 읽을 때에 캐시에 복사본을 남겨둔다
그래서 같은 데이터를 두번째로 읽을 필요가 있을때 캐시에서 찾는다
x86 동작모드에 대해 설명하시오
보호모드 실제주소모드 시스템 관리모드
보호모드에 대해서 설명하시오
보호모드는 모든 명령어와 특징사용가능하고 세그먼트라고 하는 분리된 메모리 영역이 주어지며 지정된 세그먼트 바깥의 메모리를 참조하는것을 방지한다
실제주소 모드
다른 모드로 전환하는 능력을 가지고 있으며
시스템 메모리와 하드웨어 장치에 직접 접근할 필요가 있는 프로그램을 실행하는 데 사용됨
시스템 관리모드
시스템 보안과 같은 기능을 구현하는 방법을 제공

범용 레지스터에 대해 설명하시오
범용 레지스터는 계산과 데이터 전송에 주로 사용됨
EAX는 곱셈과 나눗셈명령어에서 자동으로 사용된다. 확장 누산기 레지스터 라고함
루프 카운터로 ECX 사용
ESI EDI 는 고속 메모리 전송명령어에서 사용됨 확장소스인덱스 확장 목적지 인덱스라고함
EBP는 사용되지 않아야 한다
세그먼트 레지스터
real address 모드에서 16비트 세그먼트 레지스터는 세그먼트라고 하는 미리 할당된 메모리 영역의 시작주소를 가르킨다.
명령어 포인터 EIP
실행할 다음 명령어의 주소 포함
EFLAG 레지스터
개별적인 플래그를 검사한다
CF 부호없는 산술 연산 결과가 너무 커서 저장 불가일때 1
OF 부호있는 산술 연산 결과가 너무 크거나 작아 저장 불가면 1
SF 음수면 1
ZF 연산 결과 0 이면 1
PF 패리티 플래그
인텔 8086 프로세서는 CISC 이다.
CISC 의 장단점을 설명하시오
비교적 오래걸린다는 것이 단점이며 장점은 명령어의 커다란 모음이라 정교한 동작 수행
RISC 의 장단점
비교적 적은수의 그리고 빠르게 실행 , 명령어의 작은 집합이라 복잡한 동작 필요시 명령어 조합
REAL address 모드에서는 20비트를 주소를 사용하여 00000-FFFFF 즉 1MB(2^20)
20비트 선형 주소 계산에 대해 설명하시오
20비트 선형 주소를 직접 사용할 수 없어서 두개의 16비트 정수를 사용하여 주소를 나타낸다
보호모드는 0부터 FFFFFFFF 즉 32비트 2^32=4GB
균일 세그먼트 모델에 대해서 설명하시오
균일 세그먼트 모델에서 모든 세그먼트는 컴퓨터의 32비트 물리적 주소 공간 전체에 맵핑된다. 세그먼트 서술자의 베이스 주소는 메모리의 첫번째 주소를 가르킨다
다중 세그먼트 모델에 대해서 설명하시오
다른 프로세서들이 사용하는 모든 세그먼트와 구별될 수 있다.
각 세그먼트는 자신의 주소 공간을 갖는다.
페이징에 대해 설명하시오
페이징은 동시에 실행중인 모든 프로그램이 사용하는 전체 메모리가 컴퓨터의 물리적 메모리보다 훨씬 더 커도 되게 한다. 운영체제가 맵핑하는 페이지의 전체 집합을 가상 메모리라고 한다.
실제 주소모드에서 다음 16진수 세그먼트-오프셋 주소를 선형주소로 변환하시오
0CD1:02E0
0CD1
+02E0
0CFF0h
MASM 균일 메모리 모델에서 ㅁ여령어와 변수의 주소는 몇 비트를 갖고 있는가?
32BIT
장치 드라이버에 대해 설명하시오
장치드라이버는 운영체제가 하드웨어 장치와 직접 통신을 하는 저수준 서브루틴의 집합이다
병렬포트는 한 장치에서 다른 장치로 8 또는 16 비트를 동시에 전송한다
어셈블러의 진수가 될 수 있는 것들을 나열하라
h (16) r (,부호화실수) q/o(8진수) t (10 ) d(10) b (2) y(2)
진수가 없으면 정수상수는 몇진수로 간주하는가 ?
10진수
정수 수식은 실행시간에 수행되는 수식이 아니다 어셈블 할때에 계산된다
예약어의 여러 유형을 적어라 ( 예약어는 MASM이 만든거)
명령어 니모닉 (MOV ADD MUL...)
레지스터 이름
디렉티브 ( MASM에게 어떻게 어셈블하는지 알려주는 들)
연산자
미리정의된 기호(@DATA 같은)
식별자 ( 프로그래머가 선택한 이름 )
1-247개 사이의 문자
대소문자구분안함
첫번째 문자는 알파벳 ( _ ) @ ? $ 그 다음에 숫자가 올 수 있다
모든 키워드와 식별자에 대해 대소문자 구별하려면 어떤 옵션을 줘야하는가?
-Cp
디렉티브에 관해서 설명하시오
디렉티브는 어셈블러가 인식하여 그것에 따라 동작하는 명령이다. 실행시간에 실행되지 않음
ex( .data .code)
세그먼트를 정의하시오
.data .code ..
명령어니모닉
명령어를 식별하기 위한 짧은 단어이다
MOV ADD...
주석
한줄 : 세미콜론 (;)
블록 : COMMENT 와 사용자정의기호
EX) COMMENT *~~~~~*
NOP 명령어
1바이트 프로그램 저장공간을 차지하며 아무런 동작도 안함
코드를 짝수 홀수로 정렬
TITLE 디렉티브는 줄 전체가 주석임을 나타냄
16진수 코드 CR/LF 또는 줄끝문자를 나타내는 코드는 ?
0Dh 0Ah
리틀엔디언을 설명하시오
비초기화 데이터 선언에 대해 설명하시오
.DATA? 는 초기화 되지 않은 큰 블록 DATA를 정의할때 크기를 줄여준다
16bit 부호있는 정수를 위한 비초기화 데이터 선언하시오
val1 sword ?
현재 위치 카운터 기호는 ?
$
문자열 길이 계산하는 방법
list byte 10,20,```
listsize - ($ - list)
EQU 디렉티브를 사용하는 3가지 형식을 적으시오
name EQU expression ; 10* 10
name EQU symbol ;
name EQU <text>
ex)
matrix1 equ 10*10
matrix2 equ <10*10> ----> 10*10 as text
TEXTEQU 디렉티브 사용하는 3가지 형식 적으시오
name TEXTEQU <text>
name TEXTEQU textmacro
name TEXTEQU %constExpr (수식)
REAL-ADDRESS 모드 프로그래밍 장점과 단점
ms dos 함수 호출 가능 메모리 접근 제한 없음
단점 : 세그먼트와 오프셋 인식해야함
수정사항
DS값을 프로그램의 데이터 세그먼트 시작주소로 초기화해야함
mov ax,@data
mov ds,ax
MOV 명령어의 규칙을 말하시오
1. 두 피연산자는 같은 크기여야한다
2. 두 피연산자가 모두 메모리 피연산자일 수 는 없다
3. CS EIP IP는 목적지 피연산자일 수 없다
4. 즉시값이 세그먼트 레지스터로 이동될 수 없다
MOVZX명령어에 대해 설명하시오
피 연산자를 목적지 피연산자로 복사하고 값을 16BIT 또는 32BIT로 제로확장한다(0으로채움) 부호없는 정수에만 사용된다
MOVSX명령어에 대해 설명하시오
마찬가지로 MOVZX와 같이 부호확장하는데 부호비트로 채워진다. 부호있는 정수에만 사용된다
직접 오프셋 피연산자에 대해 설명하시오
변수의 이름과 상수를 더한 형태로 표현되는 메모리 피연산자를 말하며
어셈블러가 offset주소로 변환함 .
ex) mov al,arrayB+1 ; arrayB의 두번째 원소값 (주소가 아님)
피연산자의 세 가지 유형은 무엇인가
레지스터 즉시값 메모리
INC DEC 명령어는 Carry Flag (CF)에 영향주지 않는다 나머지는 다 영향준다
ADD SUB NEG 는 모든 플래그
덧셈 연산에서의 Carry Flag 는 목적지 피 연산자의 최상위 비트에서 일어나느 캐리를 복사한 값이다
뺄셈 연산에서의 Carry flag는 작은 부호없는 정수에서 큰 부호없는 정수를 뺄때 1
링커란 무엇인가 ? 어셈블러가 생성한 파일들을 하나의 실행파일로 합치는 유틸리티 프로그램이다.
디버거란 무엇인가 ? 프로그램 실행 동안 프로그램을 단계적으로 실행하고 레지스터와 메모리를 살펴보게 한다.
어셈블리언어는 기계어와 어떠한 관계가 있는가 ?
어셈블리 언어는 기계어와 일대일 대응관계를 갖는다
고급언어는 어셈블리 언어와 어떠한 관계를 가지는가 ?
고급언어는 어셈블리언어와 일대다 관계를 갖는다
이식성의 정의
소스 프로그램을 컴파일하여 다양한 컴퓨터에서 실행 될 수있는 언어를 이식성이 있다고 한다
따라서 어셈블리어는 이식성이 없다
해독
L1 의 각 명령어는 L0 언어로 작성된 프로그램에 의해서 해독되어 실행
변환
L0 프로그램에 의해 L1 전체가 L0 프로그램으로 변환됨
가상 기계 레벨에 대해 적으시오
레벨 1. 디지털 논리 하드웨어
레벨 2. 명령어 집합 구조
레벨 3. 어셈블리어
레벨 4. 고급언어
기계어는 어느 레벨의 가상 기계에서 사용되는가 ?
레벨 2. 명령어 집합 구조
가중 위치 표기법에 대해서 설명하시오
우리가 흔히 쓰는 2진수에서 10진수 변환 공식. ..
11111111+00000001 = ?
if 8bit, 00000000
1byte- 8 word-16 dword-32 qword-64
16진수의 2의 보수를 구하시오.
16진수를 쉽게 반전시키는 방법은 자리 숫자를 15에서 빼는것이다 그리고 1을더한다(마지막비트에)
ex) 6A3D - - > 9 5 C 2 + 1 - - > 9 5 C 3
아스키 문자 집합은 몇비트 정수가 문자에 저장되는가 ?
7bit
ANSI 문자집함은 몇비트 문자 집합을 정의하는가 ?
8bit 256문자
유니코드 표준을 제정한 이유는 ?
매우 다양한 국제 언어를 표현할 필요성이 생김으로 인하여
256bit 부호 있는 정수를 사용하여 나타낼수 있는 가장 큰 양수는 무엇인가 ?
2^255-1
버스에 대해서 설명하시오
데이터를 컴퓨터의 한 부분에서 다른 부분으로 전송하는 병렬 와이어 이다.
버스의 종류에 대해 설명하시오
데이터 버스 , 입출력 버스 , 제어 버스 , 주소 버스
메모리 접근 속도를 높이기 위해 무엇을 사용하는가?
cache memory
고속 캐시 메모리에 대해 설명하시오
프로그램이 블록 데이터를 처음으로 읽을 때에 캐시에 복사본을 남겨둔다
그래서 같은 데이터를 두번째로 읽을 필요가 있을때 캐시에서 찾는다
x86 동작모드에 대해 설명하시오
보호모드 실제주소모드 시스템 관리모드
보호모드에 대해서 설명하시오
보호모드는 모든 명령어와 특징사용가능하고 세그먼트라고 하는 분리된 메모리 영역이 주어지며 지정된 세그먼트 바깥의 메모리를 참조하는것을 방지한다
실제주소 모드
다른 모드로 전환하는 능력을 가지고 있으며
시스템 메모리와 하드웨어 장치에 직접 접근할 필요가 있는 프로그램을 실행하는 데 사용됨
시스템 관리모드
시스템 보안과 같은 기능을 구현하는 방법을 제공

범용 레지스터에 대해 설명하시오
범용 레지스터는 계산과 데이터 전송에 주로 사용됨
EAX는 곱셈과 나눗셈명령어에서 자동으로 사용된다. 확장 누산기 레지스터 라고함
루프 카운터로 ECX 사용
ESI EDI 는 고속 메모리 전송명령어에서 사용됨 확장소스인덱스 확장 목적지 인덱스라고함
EBP는 사용되지 않아야 한다
세그먼트 레지스터
real address 모드에서 16비트 세그먼트 레지스터는 세그먼트라고 하는 미리 할당된 메모리 영역의 시작주소를 가르킨다.
명령어 포인터 EIP
실행할 다음 명령어의 주소 포함
EFLAG 레지스터
개별적인 플래그를 검사한다
CF 부호없는 산술 연산 결과가 너무 커서 저장 불가일때 1
OF 부호있는 산술 연산 결과가 너무 크거나 작아 저장 불가면 1
SF 음수면 1
ZF 연산 결과 0 이면 1
PF 패리티 플래그
인텔 8086 프로세서는 CISC 이다.
CISC 의 장단점을 설명하시오
비교적 오래걸린다는 것이 단점이며 장점은 명령어의 커다란 모음이라 정교한 동작 수행
RISC 의 장단점
비교적 적은수의 그리고 빠르게 실행 , 명령어의 작은 집합이라 복잡한 동작 필요시 명령어 조합
REAL address 모드에서는 20비트를 주소를 사용하여 00000-FFFFF 즉 1MB(2^20)
20비트 선형 주소 계산에 대해 설명하시오
20비트 선형 주소를 직접 사용할 수 없어서 두개의 16비트 정수를 사용하여 주소를 나타낸다
보호모드는 0부터 FFFFFFFF 즉 32비트 2^32=4GB
균일 세그먼트 모델에 대해서 설명하시오
균일 세그먼트 모델에서 모든 세그먼트는 컴퓨터의 32비트 물리적 주소 공간 전체에 맵핑된다. 세그먼트 서술자의 베이스 주소는 메모리의 첫번째 주소를 가르킨다
다중 세그먼트 모델에 대해서 설명하시오
다른 프로세서들이 사용하는 모든 세그먼트와 구별될 수 있다.
각 세그먼트는 자신의 주소 공간을 갖는다.
페이징에 대해 설명하시오
페이징은 동시에 실행중인 모든 프로그램이 사용하는 전체 메모리가 컴퓨터의 물리적 메모리보다 훨씬 더 커도 되게 한다. 운영체제가 맵핑하는 페이지의 전체 집합을 가상 메모리라고 한다.
실제 주소모드에서 다음 16진수 세그먼트-오프셋 주소를 선형주소로 변환하시오
0CD1:02E0
0CD1
+02E0
0CFF0h
MASM 균일 메모리 모델에서 ㅁ여령어와 변수의 주소는 몇 비트를 갖고 있는가?
32BIT
장치 드라이버에 대해 설명하시오
장치드라이버는 운영체제가 하드웨어 장치와 직접 통신을 하는 저수준 서브루틴의 집합이다
병렬포트는 한 장치에서 다른 장치로 8 또는 16 비트를 동시에 전송한다
어셈블러의 진수가 될 수 있는 것들을 나열하라
h (16) r (,부호화실수) q/o(8진수) t (10 ) d(10) b (2) y(2)
진수가 없으면 정수상수는 몇진수로 간주하는가 ?
10진수
정수 수식은 실행시간에 수행되는 수식이 아니다 어셈블 할때에 계산된다
예약어의 여러 유형을 적어라 ( 예약어는 MASM이 만든거)
명령어 니모닉 (MOV ADD MUL...)
레지스터 이름
디렉티브 ( MASM에게 어떻게 어셈블하는지 알려주는 들)
연산자
미리정의된 기호(@DATA 같은)
식별자 ( 프로그래머가 선택한 이름 )
1-247개 사이의 문자
대소문자구분안함
첫번째 문자는 알파벳 ( _ ) @ ? $ 그 다음에 숫자가 올 수 있다
모든 키워드와 식별자에 대해 대소문자 구별하려면 어떤 옵션을 줘야하는가?
-Cp
디렉티브에 관해서 설명하시오
디렉티브는 어셈블러가 인식하여 그것에 따라 동작하는 명령이다. 실행시간에 실행되지 않음
ex( .data .code)
세그먼트를 정의하시오
.data .code ..
명령어니모닉
명령어를 식별하기 위한 짧은 단어이다
MOV ADD...
주석
한줄 : 세미콜론 (;)
블록 : COMMENT 와 사용자정의기호
EX) COMMENT *~~~~~*
NOP 명령어
1바이트 프로그램 저장공간을 차지하며 아무런 동작도 안함
코드를 짝수 홀수로 정렬
TITLE 디렉티브는 줄 전체가 주석임을 나타냄
16진수 코드 CR/LF 또는 줄끝문자를 나타내는 코드는 ?
0Dh 0Ah
리틀엔디언을 설명하시오
비초기화 데이터 선언에 대해 설명하시오
.DATA? 는 초기화 되지 않은 큰 블록 DATA를 정의할때 크기를 줄여준다
16bit 부호있는 정수를 위한 비초기화 데이터 선언하시오
val1 sword ?
현재 위치 카운터 기호는 ?
$
문자열 길이 계산하는 방법
list byte 10,20,```
listsize - ($ - list)
EQU 디렉티브를 사용하는 3가지 형식을 적으시오
name EQU expression ; 10* 10
name EQU symbol ;
name EQU <text>
ex)
matrix1 equ 10*10
matrix2 equ <10*10> ----> 10*10 as text
TEXTEQU 디렉티브 사용하는 3가지 형식 적으시오
name TEXTEQU <text>
name TEXTEQU textmacro
name TEXTEQU %constExpr (수식)
REAL-ADDRESS 모드 프로그래밍 장점과 단점
ms dos 함수 호출 가능 메모리 접근 제한 없음
단점 : 세그먼트와 오프셋 인식해야함
수정사항
DS값을 프로그램의 데이터 세그먼트 시작주소로 초기화해야함
mov ax,@data
mov ds,ax
MOV 명령어의 규칙을 말하시오
1. 두 피연산자는 같은 크기여야한다
2. 두 피연산자가 모두 메모리 피연산자일 수 는 없다
3. CS EIP IP는 목적지 피연산자일 수 없다
4. 즉시값이 세그먼트 레지스터로 이동될 수 없다
MOVZX명령어에 대해 설명하시오
피 연산자를 목적지 피연산자로 복사하고 값을 16BIT 또는 32BIT로 제로확장한다(0으로채움) 부호없는 정수에만 사용된다
MOVSX명령어에 대해 설명하시오
마찬가지로 MOVZX와 같이 부호확장하는데 부호비트로 채워진다. 부호있는 정수에만 사용된다
직접 오프셋 피연산자에 대해 설명하시오
변수의 이름과 상수를 더한 형태로 표현되는 메모리 피연산자를 말하며
어셈블러가 offset주소로 변환함 .
ex) mov al,arrayB+1 ; arrayB의 두번째 원소값 (주소가 아님)
피연산자의 세 가지 유형은 무엇인가
레지스터 즉시값 메모리
INC DEC 명령어는 Carry Flag (CF)에 영향주지 않는다 나머지는 다 영향준다
ADD SUB NEG 는 모든 플래그
덧셈 연산에서의 Carry Flag 는 목적지 피 연산자의 최상위 비트에서 일어나느 캐리를 복사한 값이다
뺄셈 연산에서의 Carry flag는 작은 부호없는 정수에서 큰 부호없는 정수를 뺄때 1
2016년 10월 10일 월요일
ASSEMBLY prac
161010
레지스터 끼리의 내용도 교환 가능 , 하지만 메모리간의 교환은 할 수 없다
직접 오프셋 피연산자
- data_label + constant형태로 표현되는 메모리 피연산자
어셈블러가 offset 주소로 변환함
word array면 offset 2증가 dword 면 4증가
레지스터 끼리의 내용도 교환 가능 , 하지만 메모리간의 교환은 할 수 없다
직접 오프셋 피연산자
- data_label + constant형태로 표현되는 메모리 피연산자
어셈블러가 offset 주소로 변환함
word array면 offset 2증가 dword 면 4증가
2016년 10월 9일 일요일
ASSEMBLY LANGUAGE FOR X86 PROCESSORS CHAPTER4
ASSEMBLY LANGUAGE FOR X86 PROCESSORS CHAPTER4
4. 데이터 전송 주소지정과 산술연산
피연산자 유형
1. 즉시값 유형 - 상수 정수
2. 레지스터 - cpu내의 레지스터 이름
3. 메모리 - 메모리 위치에 대한 참조 정보
MOV 명령어
operand 사용 규칙
1. 두 피연산자는 같은 크기 여야 한다
2. 두 피연산자가 모두 메모리 일 수는 없다
3. CS EIP 는 DST일 수 없다 ( MOV 의 앞에 적는 곳)
4. 즉시값은 세그먼트 레지스터로 이동할 수 없음
작은 operand를 큰 operand 로 복사
MOVZX명령어 - ZERO 확장 ( 0으로 채움)
MOVSX 명령어 - SIGN 확장 (1 or 0 으로 채움)
XCHG 명령어 - EXCHANGE
내용을 서로 교환함
메모리 간의 교환을 할 수 없음
연산과 FLAG
FLAG 레지스터
산술 논리 연산 결과에 따라 값이 정해짐
MOV 명령어의 영향 받지 않음
ZF - 결과값 0이면 1
SF - 결과가 음수면 1
CF - unsigned value 가 표현 범위를 벗어나면 1
OF - signed value가 표현범위 벗어나면 1
---추후수정----
4. 데이터 전송 주소지정과 산술연산
피연산자 유형
1. 즉시값 유형 - 상수 정수
2. 레지스터 - cpu내의 레지스터 이름
3. 메모리 - 메모리 위치에 대한 참조 정보
MOV 명령어
operand 사용 규칙
1. 두 피연산자는 같은 크기 여야 한다
2. 두 피연산자가 모두 메모리 일 수는 없다
3. CS EIP 는 DST일 수 없다 ( MOV 의 앞에 적는 곳)
4. 즉시값은 세그먼트 레지스터로 이동할 수 없음
작은 operand를 큰 operand 로 복사
MOVZX명령어 - ZERO 확장 ( 0으로 채움)
MOVSX 명령어 - SIGN 확장 (1 or 0 으로 채움)
XCHG 명령어 - EXCHANGE
내용을 서로 교환함
메모리 간의 교환을 할 수 없음
연산과 FLAG
FLAG 레지스터
산술 논리 연산 결과에 따라 값이 정해짐
MOV 명령어의 영향 받지 않음
ZF - 결과값 0이면 1
SF - 결과가 음수면 1
CF - unsigned value 가 표현 범위를 벗어나면 1
OF - signed value가 표현범위 벗어나면 1
---추후수정----
ASSEMBLY LANGUAGE FOR X86 PROCESSORS CHAPTER3
ASSEMBLY LANGUAGE FOR X86 PROCESSORS CHAPTER3
3장 어셈블리언어의 기초
정수상수
부호 한자리 이상의 숫자와 선택사항인 숫자의 밑을 나타내는 진수 로 구성
3A3h...
16진수는 문자로 시작하는 16진수 앞에 0을 넣는다.
문자와 문자열 구분없이 " " 또는 ' ' 로 둘러싸여 표시
"ABC"=3byte 'wxyz'=4byte
예약어
명령어 니모닉 레지스터이름 디렉티브 연산자 미리정의된 기호
ex) mov add mul eax ebx ...
식별자
1-247문자
대소문자 구분하지 않음
-Cp 옵션을 주어 구분할 수도 있음
첫 문자는 알파벳 (_) @ ? 또는 $
예약어는 사용 불가
@ 기호는 어셈블러가 미리 정의된 기호의 접두사로 많이 사용하므로 피해
디렉티브 (Directives)
어셈블러가 인식하여 어셈블할 때에 처리하는 명령어
기계어와 관련이 없으며 실행시간에 실행되지 않음
대소문자 구분 없음
ex) dword mov
명령어
어셈블러에 의해서 CPU의 명령어 집합에 속하는 기계어로 변환됨
실행시간에 메모리에 적재되어 CPU에서 실행됨
레이블(label)
코드 레이블 데이터 레이블
명령어 니모닉 ( Instruction Mnemonics)
명령어의 연산의 유형에 대한 힌트
ex) mov add sub...
피연산자 (operand)
즉시값 (상수 ..) 레지스터 메모리
주석
add ax,10 ;add 10
&~~~~&
정수수식
이 수식은 어셈블 할 때에만 계산될 수 있다는점이다. 정수수식은 실행 시간에 수행되는 수식이 아니다
NOP명령어
1 BYTE 크기로 아무 동작도 하지 않음
코드를 짝수 또는 4의 배수 주소로 정렬시키기 위해서 사용함
왜 ? -> x86 프로세서는 4의 배수의 주소에 있는 코드와 데이터를 더 빠르게 읽을 수 있음
-----
어셈블러는 오브젝트 파일이라고 부르는 기계어를 포함한 파일을 만든다
선택사항에 따라서 리스트 파일도 만든다
이 파일을 링커라고 하는 프로그램에 넘겨지며 링커로 실행 가능 파일을 만든다 exe
----data
정수 자료형
BYTEM SBYTE 8Bit
WORD, SWORD 16bit
DWORD, SDWORD 32bit
QWORD 64bit
FWORD 48bit
TBYTE 80bit
실수 자료형
REAL4 4BYTE(32bit)
REAL8 8Byte (64bit)
REAL10
하나의 데이터 정의 내에서 초기값들로 다른 진수 값들을 사용할 수 있다. 문자와 문자열 상수도 자유로이 섞어서 사용할 수 있다
list1 BYTE 10,32,41h
16진수 코드 0Dh(line 처음으로이동) 0Ah( 다음 line 으로 이동) 는 CR(carriage return line feed) 또는 줄끝문자라고 부른다
이 코드가 표준 출력으로 출력되면 커서를 다음 줄의 가장 왼쪽으로 이동시킨다.
DUP 연산자
반복 카운터로 사용하여 여러개의 데이터를 위한 저장공간을 할당
Array word 5 dup(0)
리틀엔디언
x86 프로세서들은 리틀 엔디언 순서를 사용하여 ( 하위부터 상위로) 데이터를 저장하고 꺼낸다
12345678h 를 저장하면 0000: 78 0001:56 0002: 34 0003 : 12
비초기화 데이터 선언
.DATA? 디렉티브는 비초기화 데이터를 선언한다. 그리고 컴파일된 프로그램의 크기를 줄여준다
비초기화 데이터 세그먼트 선언에 사용함
이 세그먼트를 실행파일에 포함시키지 않아서 프로그램 실행파일 크기를 줄여줌
.data?
bigArray Dword 5000 dup(?)
.code 세그먼트와 .data 세그먼트영역을 섞어서 사용가능함
기호상수
정수 수식 또는 텍스트를 식별자와 연관시켜 정의
정수수식 또는 텍스트 대신 사용
기호 상수 정의용 디렉티브
등호(=) EQU TEXTEQU
등호디렉티브
name=expression(32bit 상수)
값을 재정의 가능
COUNT=5 ..
배열과 문자열 크기계산
현재 위치 카운터: $ (현재 프로그램 문장에 대한 오프셋을 나타냄)
배열의 크기 계산
배열 자료를 정의한 바로 다음에서 다음 형태의 디렉티브 사용
SIZE=($-array시작번지)/(array 원소 크기)
ex
list BYTE 10,20,30,40
listsize=($-list)/1(byte)
EQU 디렉티브
EQU : 기호를 정수 또는 텍스트와 연관시킴
name EQU expression,symbol,<text>
재정의 될 수 없음
TEXTEQU
텍스트 매크로 라고도 함 텍스트 매크로 라고 하는것을 만든다
3가지 형식
name TEXTEQU <text>
name TEXTEQU textmacro
name TEXTEQU %constExpr (수식)
재정의 가능
REal Address Mode 프로그래밍
장점 : MSDOS , BIOS 함수 호출 가능 , 메모리 접근 제한 없음
단점 : 세그먼트와 오프셋을 인식해야함 메모리가 640KB에서 제한됨
수정사항
DS값을 프로그램의 데이터 세그먼트 시작주소로 초기화해야함
mov ax,@data
mov ds,ax
3장 어셈블리언어의 기초
정수상수
부호 한자리 이상의 숫자와 선택사항인 숫자의 밑을 나타내는 진수 로 구성
3A3h...
16진수는 문자로 시작하는 16진수 앞에 0을 넣는다.
문자와 문자열 구분없이 " " 또는 ' ' 로 둘러싸여 표시
"ABC"=3byte 'wxyz'=4byte
예약어
명령어 니모닉 레지스터이름 디렉티브 연산자 미리정의된 기호
ex) mov add mul eax ebx ...
식별자
1-247문자
대소문자 구분하지 않음
-Cp 옵션을 주어 구분할 수도 있음
첫 문자는 알파벳 (_) @ ? 또는 $
예약어는 사용 불가
@ 기호는 어셈블러가 미리 정의된 기호의 접두사로 많이 사용하므로 피해
디렉티브 (Directives)
어셈블러가 인식하여 어셈블할 때에 처리하는 명령어
기계어와 관련이 없으며 실행시간에 실행되지 않음
대소문자 구분 없음
ex) dword mov
명령어
어셈블러에 의해서 CPU의 명령어 집합에 속하는 기계어로 변환됨
실행시간에 메모리에 적재되어 CPU에서 실행됨
레이블(label)
코드 레이블 데이터 레이블
명령어 니모닉 ( Instruction Mnemonics)
명령어의 연산의 유형에 대한 힌트
ex) mov add sub...
피연산자 (operand)
즉시값 (상수 ..) 레지스터 메모리
주석
add ax,10 ;add 10
&~~~~&
정수수식
이 수식은 어셈블 할 때에만 계산될 수 있다는점이다. 정수수식은 실행 시간에 수행되는 수식이 아니다
NOP명령어
1 BYTE 크기로 아무 동작도 하지 않음
코드를 짝수 또는 4의 배수 주소로 정렬시키기 위해서 사용함
왜 ? -> x86 프로세서는 4의 배수의 주소에 있는 코드와 데이터를 더 빠르게 읽을 수 있음
-----
어셈블러는 오브젝트 파일이라고 부르는 기계어를 포함한 파일을 만든다
선택사항에 따라서 리스트 파일도 만든다
이 파일을 링커라고 하는 프로그램에 넘겨지며 링커로 실행 가능 파일을 만든다 exe
----data
정수 자료형
BYTEM SBYTE 8Bit
WORD, SWORD 16bit
DWORD, SDWORD 32bit
QWORD 64bit
FWORD 48bit
TBYTE 80bit
실수 자료형
REAL4 4BYTE(32bit)
REAL8 8Byte (64bit)
REAL10
하나의 데이터 정의 내에서 초기값들로 다른 진수 값들을 사용할 수 있다. 문자와 문자열 상수도 자유로이 섞어서 사용할 수 있다
list1 BYTE 10,32,41h
16진수 코드 0Dh(line 처음으로이동) 0Ah( 다음 line 으로 이동) 는 CR(carriage return line feed) 또는 줄끝문자라고 부른다
이 코드가 표준 출력으로 출력되면 커서를 다음 줄의 가장 왼쪽으로 이동시킨다.
DUP 연산자
반복 카운터로 사용하여 여러개의 데이터를 위한 저장공간을 할당
Array word 5 dup(0)
리틀엔디언
x86 프로세서들은 리틀 엔디언 순서를 사용하여 ( 하위부터 상위로) 데이터를 저장하고 꺼낸다
12345678h 를 저장하면 0000: 78 0001:56 0002: 34 0003 : 12
비초기화 데이터 선언
.DATA? 디렉티브는 비초기화 데이터를 선언한다. 그리고 컴파일된 프로그램의 크기를 줄여준다
비초기화 데이터 세그먼트 선언에 사용함
이 세그먼트를 실행파일에 포함시키지 않아서 프로그램 실행파일 크기를 줄여줌
.data?
bigArray Dword 5000 dup(?)
.code 세그먼트와 .data 세그먼트영역을 섞어서 사용가능함
기호상수
정수 수식 또는 텍스트를 식별자와 연관시켜 정의
정수수식 또는 텍스트 대신 사용
기호 상수 정의용 디렉티브
등호(=) EQU TEXTEQU
등호디렉티브
name=expression(32bit 상수)
값을 재정의 가능
COUNT=5 ..
배열과 문자열 크기계산
현재 위치 카운터: $ (현재 프로그램 문장에 대한 오프셋을 나타냄)
배열의 크기 계산
배열 자료를 정의한 바로 다음에서 다음 형태의 디렉티브 사용
SIZE=($-array시작번지)/(array 원소 크기)
ex
list BYTE 10,20,30,40
listsize=($-list)/1(byte)
EQU 디렉티브
EQU : 기호를 정수 또는 텍스트와 연관시킴
name EQU expression,symbol,<text>
재정의 될 수 없음
TEXTEQU
텍스트 매크로 라고도 함 텍스트 매크로 라고 하는것을 만든다
3가지 형식
name TEXTEQU <text>
name TEXTEQU textmacro
name TEXTEQU %constExpr (수식)
재정의 가능
REal Address Mode 프로그래밍
장점 : MSDOS , BIOS 함수 호출 가능 , 메모리 접근 제한 없음
단점 : 세그먼트와 오프셋을 인식해야함 메모리가 640KB에서 제한됨
수정사항
DS값을 프로그램의 데이터 세그먼트 시작주소로 초기화해야함
mov ax,@data
mov ds,ax
ASSEMBLY LANGUAGE FOR X86 PROCESSORS CHAPTER2
CPU는 register 라고 하는 제한된 수의 기억장치와 쿨럭 제어장치 논리연산장치를 포함
클럭 - 시스템 구성요소롤 cpu의 내부와 동기시킨다
제어장치 (CU) - 기계 명령어를 실행하는 데 수반되는 단계들의 순서를 조정한다
논리연산장치 - AND OR NOT 연산 수행
bus(버스)는 데이터를 컴퓨터의 한 부분에서 다른 부분으로 전송하는 병렬 와이어 이다
데이터 버스 입출력 버스 제어 버스 주소 버스
클럭: CPU와 system bus를 포함하는 각 동작은 일정한 속도로 진동하는 내부 클럭에 동기가 되는데 이 시간의 기본 단위는 기계사이클 이다. 클럭사이클 이라고도 함
기계어 명령어 수행에 적어도 1클럭 이상 필요
복잡한 명령어는 많은 클럭 사이클이 필요
메모리 접근 시 느린 메모리 속도 때문에 대기상태 사이클 존재
메모리 접근 속도 높이기 위해 고속 캐시 메모리 사용 ( 한번읽은것을 복사하고사용)
-----------------
x86구조 세부사항
x86 프로세서는 보호모드 실제주소모드 시스템관리모드 이 세가지 주요 동작가짐.
보호모드 - protected 모드는 모든 명령어와 특징을 사용할 수 있는 프로세서의 고유한 상태이다. 세그먼트라고 하는 분리된 메모리 영역이 주어지며 프로세서는 지정된 세그먼트 바깥의 메모리를 참조하는 것을 방지한다
실제 주소모드 - real address mode 는 다른 모드로 전환하는 능력과 같은 몇 개의 추가적인 특징을 가진 인텔 프로그래밍 환경을 구현한다. 시스템 메모리와 하드웨어 장치에 직접 접근할 필요가 있는 프로그램을 실행하는 데에 사용될 수 있다.
시스템 관리모드 - 운영체제에 전원 관리와 시스템 보안과 같은 기능을 구현하는 방법을 제공한다.
virtual 8086 mode-
protected mode에서 real address mode용 프로그램을 그대로 수행할 수 있도록 주소변환을 하는 동작 모드
여러 개의 MS DOS 프로그램을 실행시킬 수 있음.
x86 processor는 CISC 계열이다
범용 레지스터는 계산과 데이터 전송에 주로 사용된다. 하위 16비트로도 참조 될수 있다
어떤 레지스터들은 8비트 값으로 다룰 수 있다.
세그먼트 레지스터
segment의 시작주소 지정에 사용된다
실제 주소모드에서 16비트.
code segment data segment stack segment
메모리 주소는
segment 시작주소 + offset 주소
명령어 포인터 EIP 는 실행할 다음명령어의 주소를 포함한다.
플래그 레지스터
제어 플래그 :
cpu 동작을 제어한다 모든 명령어가 실행된 후에 cpu를 멈추게 하고 산술 오버플로우가 감지됐을 때 인터럽트 발생
상태플래그:
산술 논리 연산의 결과를 반여한다 .
오버플로우 부호 제로 보조캐리 패리티 캐리
OF SF ZF AC PF CF
---------------
메모리 관리
메모리 상의 데이터 주소 지정
2BYTE 이상의 데이터는 2개 이상의 연속적인 주소의 메모리에 저장됨
리틀 엔디안 방식 사용 - 하위 바이트가 낮은 주소
Register 052B ---> 주소 a = 2B 주소 a+1= 05
real address mode 16진수 주소 00000 -FFFFF 까지 1MB 메모리 주소 지정
프로세서는 한번에 하나 의 프로그램 실행
protected mode 동시에 여러개 프로그램 실행가능
각 프로세스에 총 4GB 메모리 할당
가상 8086
세그먼트와 주소지정
선형주소 = 주소 ( segment + offset) 으로 된 2차원 주소를 단일 주소로 바꾼것
paging 을 사용하지 않으면 => 선형주소 = 메모리주소
paging 을 사용하면 : 선형주소와 메모리주소는 다르다
address=(segment<<4)+offset
균일 세그먼트 모델
모든 세그먼트가 32bit 전체 메모리 공간에 맵핑
전체 메모리를 단일 세그먼트로 사용
offset주소 = 선형주소
메모리 주소 = 세그먼트 주소 (0) + offset
다중 세그먼트 모델
각 프로그램은 자신의 세그먼트 테이블은 가짐
자신의 LDT에 세그먼트 들의 segment 를 정의함
페이징
페이징을 지원한다 페이징은 동시에 실행 중인 모든 프로그램이 사용하는 전체 메모리가 컴퓨터의 물리적 메모리보다 훨씬 더 커도 되게한다
---------------
CISC - 많은 수의 명령어들로 구성됨
RISC - 적은 수의 짧고 간단한 명령어들로 구성됨
PCI 병렬 PCI express 버스 = 직렬
ROM = 비휘발성 MEMORY
------------
클럭 - 시스템 구성요소롤 cpu의 내부와 동기시킨다
제어장치 (CU) - 기계 명령어를 실행하는 데 수반되는 단계들의 순서를 조정한다
논리연산장치 - AND OR NOT 연산 수행
bus(버스)는 데이터를 컴퓨터의 한 부분에서 다른 부분으로 전송하는 병렬 와이어 이다
데이터 버스 입출력 버스 제어 버스 주소 버스
클럭: CPU와 system bus를 포함하는 각 동작은 일정한 속도로 진동하는 내부 클럭에 동기가 되는데 이 시간의 기본 단위는 기계사이클 이다. 클럭사이클 이라고도 함
기계어 명령어 수행에 적어도 1클럭 이상 필요
복잡한 명령어는 많은 클럭 사이클이 필요
메모리 접근 시 느린 메모리 속도 때문에 대기상태 사이클 존재
메모리 접근 속도 높이기 위해 고속 캐시 메모리 사용 ( 한번읽은것을 복사하고사용)
-----------------
x86구조 세부사항
x86 프로세서는 보호모드 실제주소모드 시스템관리모드 이 세가지 주요 동작가짐.
보호모드 - protected 모드는 모든 명령어와 특징을 사용할 수 있는 프로세서의 고유한 상태이다. 세그먼트라고 하는 분리된 메모리 영역이 주어지며 프로세서는 지정된 세그먼트 바깥의 메모리를 참조하는 것을 방지한다
실제 주소모드 - real address mode 는 다른 모드로 전환하는 능력과 같은 몇 개의 추가적인 특징을 가진 인텔 프로그래밍 환경을 구현한다. 시스템 메모리와 하드웨어 장치에 직접 접근할 필요가 있는 프로그램을 실행하는 데에 사용될 수 있다.
시스템 관리모드 - 운영체제에 전원 관리와 시스템 보안과 같은 기능을 구현하는 방법을 제공한다.
virtual 8086 mode-
protected mode에서 real address mode용 프로그램을 그대로 수행할 수 있도록 주소변환을 하는 동작 모드
여러 개의 MS DOS 프로그램을 실행시킬 수 있음.
x86 processor는 CISC 계열이다
-----
주소공간
real address mode, virtual 8086 mode -> 주소비트수가 20이라 크기가 2^20=1MB
protected mode 0> 주소크리가 32biㅅ 2^32 = 4GB이다
레지스터는 cpu바로 안에 있는 고속 저장장소이며 일반 메모리보다 훨씬 빠른 속도로 접근되도록 설계
8개의 범용레지스터와 6개의 세그먼트 레지스터 플래그 레지스터 명령어 포인터로 구성
범용 레지스터는 계산과 데이터 전송에 주로 사용된다. 하위 16비트로도 참조 될수 있다
어떤 레지스터들은 8비트 값으로 다룰 수 있다.
세그먼트 레지스터
segment의 시작주소 지정에 사용된다
실제 주소모드에서 16비트.
code segment data segment stack segment
메모리 주소는
segment 시작주소 + offset 주소
명령어 포인터 EIP 는 실행할 다음명령어의 주소를 포함한다.
플래그 레지스터
제어 플래그 :
cpu 동작을 제어한다 모든 명령어가 실행된 후에 cpu를 멈추게 하고 산술 오버플로우가 감지됐을 때 인터럽트 발생
상태플래그:
산술 논리 연산의 결과를 반여한다 .
오버플로우 부호 제로 보조캐리 패리티 캐리
OF SF ZF AC PF CF
---------------
메모리 관리
메모리 상의 데이터 주소 지정
2BYTE 이상의 데이터는 2개 이상의 연속적인 주소의 메모리에 저장됨
리틀 엔디안 방식 사용 - 하위 바이트가 낮은 주소
Register 052B ---> 주소 a = 2B 주소 a+1= 05
real address mode 16진수 주소 00000 -FFFFF 까지 1MB 메모리 주소 지정
프로세서는 한번에 하나 의 프로그램 실행
protected mode 동시에 여러개 프로그램 실행가능
각 프로세스에 총 4GB 메모리 할당
가상 8086
세그먼트와 주소지정
선형주소 = 주소 ( segment + offset) 으로 된 2차원 주소를 단일 주소로 바꾼것
paging 을 사용하지 않으면 => 선형주소 = 메모리주소
paging 을 사용하면 : 선형주소와 메모리주소는 다르다
address=(segment<<4)+offset
균일 세그먼트 모델
모든 세그먼트가 32bit 전체 메모리 공간에 맵핑
전체 메모리를 단일 세그먼트로 사용
offset주소 = 선형주소
메모리 주소 = 세그먼트 주소 (0) + offset
다중 세그먼트 모델
각 프로그램은 자신의 세그먼트 테이블은 가짐
자신의 LDT에 세그먼트 들의 segment 를 정의함
페이징
페이징을 지원한다 페이징은 동시에 실행 중인 모든 프로그램이 사용하는 전체 메모리가 컴퓨터의 물리적 메모리보다 훨씬 더 커도 되게한다
---------------
CISC - 많은 수의 명령어들로 구성됨
RISC - 적은 수의 짧고 간단한 명령어들로 구성됨
PCI 병렬 PCI express 버스 = 직렬
ROM = 비휘발성 MEMORY
------------
ASSEMBLY LANGUAGE FOR X86 PROCESSORS CHAPTER1
assembler 는 어셈블리 언어로 작성된 소스코드 프로그램을 기계어로 변환하는 유틸리티프로그램이다
linker 는 어셈블러가 생성한 각 파일을 하나의 실행 프로그램으로 합치는 유틸리티 프로그램이다
debugger라고 하는 관련 유틸리티는 프로그램 실행 동안 프로그램을 단계적으로 실행하고 레지스터와 메모리를 살펴보게 한다
16비트 실제 주소 모드:
real-address 모드 프로그램은 MS-DOS와 MS-Window,의 콘솔 윈도우에서 수행된다.
32비트 보호 모드
이 프로그램은 실제 모드 프로그램보다 작성하고 이해하기가 쉽다
왜 어셈블리 언어를 배우는가 ?
기계어의 각 명령어는 비교적 적은 수의 전자회로를 사용하여 수행하므로 단순하다
따라서 L0이라고 부르기도 한다.
L0- 매우 상세하게 기술해야함 순수하게 숫자로만 구성됨
따라서 사용하기 더 편한 L1 이 개발됨.
1.해독 : L1의 각 명령어는 L0언어로 작성된 프로그램에 의해서 해독되어 실행됨
즉시 실행되기 시작하지만 각 명령어는 먼저 해독되어야 실행될 수 있다.
2. 변환 : L1 프로그램 전체가 프로그램에 의해 L0프로그램으로 변환된다
변환된 L0 프로그램은 컴퓨터 하드웨어에서 직접 실행 될 수 있다.
---------------------
1.3 data
8bit - byte 16bit- word 32bit- doubleword 64bit- quadword
16진수는 알파벳으로 시작할시 앞에 0을 넣어야한다.
16진수의 2의 보수
모든 비트를 반전시키고 1을 더한다
16진수에서 비트 반전시키려면 자리 숫자를 15에서 빼는것이다
ex) 6A3D ----> 95C2 +1 => 95C3
ASCII 코드는 7BIT 정수가 각 문자에 지정된다 즉 하위 7비트만 사용한다
매우 다양한 국제 언어를 표현할 필요성이 생겨 유니코드 표준이 만들어졌다
linker 는 어셈블러가 생성한 각 파일을 하나의 실행 프로그램으로 합치는 유틸리티 프로그램이다
debugger라고 하는 관련 유틸리티는 프로그램 실행 동안 프로그램을 단계적으로 실행하고 레지스터와 메모리를 살펴보게 한다
16비트 실제 주소 모드:
real-address 모드 프로그램은 MS-DOS와 MS-Window,의 콘솔 윈도우에서 수행된다.
32비트 보호 모드
이 프로그램은 실제 모드 프로그램보다 작성하고 이해하기가 쉽다
왜 어셈블리 언어를 배우는가 ?
기계어의 각 명령어는 비교적 적은 수의 전자회로를 사용하여 수행하므로 단순하다
따라서 L0이라고 부르기도 한다.
L0- 매우 상세하게 기술해야함 순수하게 숫자로만 구성됨
따라서 사용하기 더 편한 L1 이 개발됨.
1.해독 : L1의 각 명령어는 L0언어로 작성된 프로그램에 의해서 해독되어 실행됨
즉시 실행되기 시작하지만 각 명령어는 먼저 해독되어야 실행될 수 있다.
2. 변환 : L1 프로그램 전체가 프로그램에 의해 L0프로그램으로 변환된다
변환된 L0 프로그램은 컴퓨터 하드웨어에서 직접 실행 될 수 있다.
---------------------
1.3 data
8bit - byte 16bit- word 32bit- doubleword 64bit- quadword
16진수는 알파벳으로 시작할시 앞에 0을 넣어야한다.
16진수의 2의 보수
모든 비트를 반전시키고 1을 더한다
16진수에서 비트 반전시키려면 자리 숫자를 15에서 빼는것이다
ex) 6A3D ----> 95C2 +1 => 95C3
ASCII 코드는 7BIT 정수가 각 문자에 지정된다 즉 하위 7비트만 사용한다
매우 다양한 국제 언어를 표현할 필요성이 생겨 유니코드 표준이 만들어졌다
HEALTH CARE DEVICE SOURCE
-----------------------------------
#include <DHT11.h> //라이브러리 불러옴
//#include <SoftwareSerial.h>
int blueTx=3;
int blueRx=5;
//SoftwareSerial mySerial(blueRx,blueTx);
int pin=2;
DHT11 dht11(pin);
int RT=9;
int GT=10;
int BT=11;
int Buzzer=6;
int button=4;
int temp=0;
int dustpin = 8;
unsigned long duration;
unsigned long starttime;
unsigned long sampletime_ms = 30000;//sampe 30s ;
unsigned long lowpulseoccupancy = 0;
int siren=0;
float pcsPerCF = 0;
float ugm3 = 0;
float dustnum=0;
float ratio = 0;
float concentration = 0;
void setup()
{
Serial.begin(9600);
Serial.println("I'm Dr.Kim from Yonsei hospital, I guarantee that he is an asthma patient");
//mySerial.begin(9600);
pinMode(RT,OUTPUT);
pinMode(GT,OUTPUT);
pinMode(BT,OUTPUT);
pinMode(Buzzer,OUTPUT);
pinMode(button,INPUT);
pinMode(8, INPUT);
}
void loop()
{ temp=0;
//if(mySerial.available())
//Serial.write(mySerial.read());
//if(Serial.available())
//mySerial.write(Serial.read());
duration = pulseIn(dustpin, LOW);
lowpulseoccupancy = lowpulseoccupancy + duration;
if ((millis() - starttime) > sampletime_ms) //if the sampel time == 30s
{
ratio = lowpulseoccupancy / (sampletime_ms * 10.0); // Integer percentage 0=>100
concentration = 1.1 * pow(ratio, 3) - 3.8 * pow(ratio, 2) + 520 * ratio + 0.62; // using spec sheet curve
pcsPerCF = concentration * 100;
ugm3 = pcsPerCF / 13000;
dustnum=(ugm3*3528)/1000;
//Serial.print(" ");
// Serial.print(dustnum);
// Serial.print("ug/m3");
// Serial.println();
lowpulseoccupancy = 0;
}
int err;
float temp, humi;
if((err=dht11.read(humi, temp))==0) //온도, 습도 읽어와서 표시
{
// Serial.print("temperature:");
// Serial.print(temp);
// Serial.print(" humidity:");
// Serial.print(humi);
// Serial.println();
}
else //에러일 경우 처리
{
// Serial.println();
Serial.print("Error No :");
Serial.print(err);
Serial.println();
}
delay(1000); //1초마다 측정
analogWrite(RT,255);
analogWrite(GT,255);
analogWrite(BT,255);
unsigned int val;
unsigned int dat;
val=analogRead(0);
dat=(500 * val) /1024;
// Serial.print("Temp: ");
// Serial.print(dat-4);
// Serial.println(" C");
if(humi>52)
{
analogWrite(RT,30);
analogWrite(GT,255);
analogWrite(BT,0);
tone(Buzzer,100);
delay(2000);
noTone(6);
}
if(humi>56)
{
analogWrite(RT,255);
analogWrite(GT,255);
analogWrite(BT,0);
tone(Buzzer,200);
delay(2000);
noTone(6);
}
if(digitalRead(button)==0)
{
analogWrite(RT,0);
analogWrite(GT,0);
analogWrite(BT,255);
temp++;
tone(Buzzer,1050);
delay(850);
tone(Buzzer,900);
delay(850);
tone(Buzzer,1050);
delay(850);
tone(Buzzer,900);
delay(850);
noTone(6);
}
if(temp==24)
{
//tone(Buzzer,500);
delay(100);
noTone(6);
}
delay(1500);
Serial.println("I'm Dr.Kim from Yonsei hospital, I guarantee that he is an asthma patient");
}
---------------------------
bluetooth HC-06
humidity , temperature sensor ..
buzzer RGB .
#include <DHT11.h> //라이브러리 불러옴
//#include <SoftwareSerial.h>
int blueTx=3;
int blueRx=5;
//SoftwareSerial mySerial(blueRx,blueTx);
int pin=2;
DHT11 dht11(pin);
int RT=9;
int GT=10;
int BT=11;
int Buzzer=6;
int button=4;
int temp=0;
int dustpin = 8;
unsigned long duration;
unsigned long starttime;
unsigned long sampletime_ms = 30000;//sampe 30s ;
unsigned long lowpulseoccupancy = 0;
int siren=0;
float pcsPerCF = 0;
float ugm3 = 0;
float dustnum=0;
float ratio = 0;
float concentration = 0;
void setup()
{
Serial.begin(9600);
Serial.println("I'm Dr.Kim from Yonsei hospital, I guarantee that he is an asthma patient");
//mySerial.begin(9600);
pinMode(RT,OUTPUT);
pinMode(GT,OUTPUT);
pinMode(BT,OUTPUT);
pinMode(Buzzer,OUTPUT);
pinMode(button,INPUT);
pinMode(8, INPUT);
}
void loop()
{ temp=0;
//if(mySerial.available())
//Serial.write(mySerial.read());
//if(Serial.available())
//mySerial.write(Serial.read());
duration = pulseIn(dustpin, LOW);
lowpulseoccupancy = lowpulseoccupancy + duration;
if ((millis() - starttime) > sampletime_ms) //if the sampel time == 30s
{
ratio = lowpulseoccupancy / (sampletime_ms * 10.0); // Integer percentage 0=>100
concentration = 1.1 * pow(ratio, 3) - 3.8 * pow(ratio, 2) + 520 * ratio + 0.62; // using spec sheet curve
pcsPerCF = concentration * 100;
ugm3 = pcsPerCF / 13000;
dustnum=(ugm3*3528)/1000;
//Serial.print(" ");
// Serial.print(dustnum);
// Serial.print("ug/m3");
// Serial.println();
lowpulseoccupancy = 0;
}
int err;
float temp, humi;
if((err=dht11.read(humi, temp))==0) //온도, 습도 읽어와서 표시
{
// Serial.print("temperature:");
// Serial.print(temp);
// Serial.print(" humidity:");
// Serial.print(humi);
// Serial.println();
}
else //에러일 경우 처리
{
// Serial.println();
Serial.print("Error No :");
Serial.print(err);
Serial.println();
}
delay(1000); //1초마다 측정
analogWrite(RT,255);
analogWrite(GT,255);
analogWrite(BT,255);
unsigned int val;
unsigned int dat;
val=analogRead(0);
dat=(500 * val) /1024;
// Serial.print("Temp: ");
// Serial.print(dat-4);
// Serial.println(" C");
if(humi>52)
{
analogWrite(RT,30);
analogWrite(GT,255);
analogWrite(BT,0);
tone(Buzzer,100);
delay(2000);
noTone(6);
}
if(humi>56)
{
analogWrite(RT,255);
analogWrite(GT,255);
analogWrite(BT,0);
tone(Buzzer,200);
delay(2000);
noTone(6);
}
if(digitalRead(button)==0)
{
analogWrite(RT,0);
analogWrite(GT,0);
analogWrite(BT,255);
temp++;
tone(Buzzer,1050);
delay(850);
tone(Buzzer,900);
delay(850);
tone(Buzzer,1050);
delay(850);
tone(Buzzer,900);
delay(850);
noTone(6);
}
if(temp==24)
{
//tone(Buzzer,500);
delay(100);
noTone(6);
}
delay(1500);
Serial.println("I'm Dr.Kim from Yonsei hospital, I guarantee that he is an asthma patient");
}
---------------------------
bluetooth HC-06
humidity , temperature sensor ..
buzzer RGB .
CONTINUOUS AND DISCRETE SIGNALS AND SYSTEMS CHAPTER 1
DATE 161009
연속신호
이산신호
주기신호
정변함수
복소수
복소지수
두 주기 신호 합은 주기 신호 ?
평균전력
총 에너지
주기신호의 평균전력
전이연산 (shifting)
반전 (reflection)
대칭 (symmetric)
unit step signal
rectangular signal
ramp signal
sgn signal
sampling signal
Dirac delta function
--
각 정의에 대해 확실한 이해와 암기.
문제 풀기.
연속신호
이산신호
주기신호
정변함수
복소수
복소지수
두 주기 신호 합은 주기 신호 ?
평균전력
총 에너지
주기신호의 평균전력
전이연산 (shifting)
반전 (reflection)
대칭 (symmetric)
unit step signal
rectangular signal
ramp signal
sgn signal
sampling signal
Dirac delta function
--
각 정의에 대해 확실한 이해와 암기.
문제 풀기.
피드 구독하기:
글 (Atom)