어셈블리언어로 프로그램을 만들기 위해서는 두가지 방법이 있다. 한가지는 TASM 또는 Turbo Assembler(of Borland)를 사용하는것과 하나는 디버거를 쓰는것이다. 이번 섹션에서는 디버거를 사용할것이다. 왜냐하면 MS-DOS가 깔려있는 PC에는 모두 디버거가 있기 때문이다. 디버거는 아래의 특성을 가지고 사용자가 컴퓨터에 접근할수 있게한다.

디버그는 .com 파일만 만든다. 이러한 특성때문에 이 종류의 프로그램은 64kb를 넘지 못한다. 그리고 특정 세그먼트의 오프셋 0100H memory direction에서부터 시작되어야 한다.

(they also must start with displacement, offset, or 0100H memory direction inside the specific segment.)

디버그는 명령을 수행할수 있도록 몇가지 명령어를 제공한다

A 어셈블리 명령어를 기계어로 번역한다

D 메모리 영역에 있는 내용을 출력한다

E 특정 위치의 메모리에 데이터를 입력한다.(Enter data into memory, beginning at a specific location)

G 메모리에 있는 프로그램을 실행한다

N 프로그램에 이름을 지정한다

P 관련된 명령어들을 실행, 진행시킨다

Q 디버그 프로그램을 종료한다

R 하나 또는 한개 이상의 레지스터의 자료를 출력한다

T 한 명령어의 내용을 추적한다 (Trace the contents of one instruction)

U 기계어를 상징적 코드로 번역한다

W 디스크에 프로그램을 쓴다.

CPU내부의 레지스터의 내용을 디버그 프로그램을 이용해서 볼수있다. 디버그 프로그램을 실행시키려면 컴퓨터 프롬프트에 다음 명령어를 입력해라. (cmd창에서 하면 될것이다)

 

C:\>Debug [Enter]

 

다음 라인에 막대기 하나가 나타날것이다. 이것은 디버그 프로그램이 실행된것을 나타내고 여기서 다음과 같이 디버그 명령어를 사용할수있다.

 

-r [Enter]

 

AX=0000 BX=0000 CX=0000 DX=0000 SP=FFEE BP=0000 SI=0000 DI=0000
DS=0D62 ES=0D62 SS=0D62 CS=0D62 IP=0100 NV EI PL NZ NA PO NC
0D62:0100 2E CS:
0D62:0101 803ED3DF00 CMP BYTE PTR [DFD3],00 CS:DFD3=03

 

CPU내부의 모든 레지스터의 내용이 출력되었다. 이것들을 보는 또다른 방법은 보고싶은 레지스터의 이름을 파라미터로 사용해서 "r"명령어를 쓰는것이다. 예를들어,

 

-rbx

BX 0000

:

 

이 명령어는 BX레지스터만을 보여준다 그리고 디버그 지시자가 "-" 에서 ":"로 바뀐다.

프롬프트가 이런모양일때 레지스터의 내용을 바꿀수 있다는것을 의미한다. 새로운 값을 입력해서 레지스터 값을 바꿀수 있고 입력없이 엔터를 누르면 바뀌지 않는다.

 

 

CPU는 4개의 내부 레지스터를 가지고 있다. 각각은 16비트 이다. 보통 AX, BX, CX, DX로 불리고 8비트로 두개의 레지스터로 나누면 AX는 high byte인 AH와 low byte인 AL 레지스터로 나뉜다. BX, CX, DX도 마찬가지로 적용된다.

레지스터들은 각각의 고유한 이름이 있다:

AX Accumlator

BX Base register

CX Counting register

DX Data register

DS Data segment register

ES Extra segment register

SS Battery segment register

CS Code segment register

BP Base pointers register

SI Source index register

DI Destiny index register

SP Battery pointer register

IP Next instruction pointer register

F Flag register

 

1>ASCII 코드

ASCII 는 American Standard Code for Information Interchange의 약자이다. 이 코드는 각각의 알파벳과 숫자와 기호들을 2진수 7자리까지 나타내고 8번째는 0으로 처리해서 나타낸것이다. 이 방식에서는 각각의 알파벳, 숫자, 기호들은 컴퓨터 메모리 1바이트를 차지한다.

우리는 이 데이터 표현방식이 숫자적 관점에서 볼때 매우 비효율적이라는걸 알수있다. 2진법은 1바이트로 0에서 255까지의 숫자를 나타낼수 있다. 그러나 ASCII의 1바이트는 오직 하나의 숫자만 표현할수있다. 이러한 비효율성대문에 ASCII코드는 주로 텍스트를 저장하는데에 쓰인다.

 

2> BCD 방식

BCD는 Binary Coded Decimal 의 약자이다. 이 표현방식은 4비트가 0에서 9까지의 숫자를 나타내는데에 쓰인다. 이 방식으로 1바이트당 2개의 숫자를 표현할수있다.

이 방식이 ASCII에 비해서 훨씬 효율적으로 보이지만 2진법보다 효율적이지 못하다. 왜냐하면 BCD는 0에서 99까지밖에 표현할 수 없기때문이다.

이 방식은 상업적인 어플리케이션에서 아주 큰 숫자를 나타내는데 쓰인다. 왜냐하면 이 방식은 계산에서의 오류를 방지하는데 효과적이기 때문이다.

 

3>부동 소숫점 방식

이 방식은 과학적 표기에 기초해있다. 이 방식은 숫자를 밑과 지수로 나타낸다.

예를들어 1234000은 1.234*10^6으로 나타내어진다. 여기서 지수는 원래 값을 얻기 위해 소숫점이 얼마나 움직여야할지를 가리킨다.

지수가 음수일때는 왼쪽, 양수일때는 오른쪽으로 소숫점이 이동한다

 

10진수

16진수

8진수

2진수

ASCII

10진수

16진수

8진수

2진수

ASCII

0

0×00

000

0000000

NULL

64

0×40

100

1000000

@

1

0×01

001

0000001

SOH

65

0×41

101

1000001

A

2

0×02

002

0000010

STX

66

0×42

102

1000010

B

3

0×03

003

0000011

ETX

67

0×43

103

1000011

C

4

0×04

004

0000100

EOT

68

0×44

104

1000100

D

5

0×05

005

0000101

ENQ

69

0×45

105

1000101

E

6

0×06

006

0000110

ACK

70

0×46

106

1000110

F

7

0×07

007

0000111

BEL

71

0×47

107

1000111

G

8

0×08

010

0001000

BS

72

0×48

110

1001000

H

9

0×09

011

0001001

HT

73

0×49

111

1001001

I

10

0×0A

012

0001010

LF

74

0×4A

112

1001010

J

11

0×0B

013

0001011

VT

75

0×4B

113

1001011

K

12

0×0C

014

0001100

FF

76

0×4C

114

1001100

L

13

0×0D

015

0001101

CR

77

0×4D

115

1001101

M

14

0×0E

016

0001110

SO

78

0×4E

116

1001110

N

15

0×0F

017

0001111

SI

79

0×4F

117

1001111

O

16

0×10

020

0010000

DLE

80

0×50

120

1010000

P

17

0×11

021

0010001

DC1

81

0×51

121

1010001

Q

18

0×12

022

0010010

SC2

82

0×52

122

1010010

R

19

0×13

023

0010011

SC3

83

0×53

123

1010011

S

20

0×14

024

0010100

SC4

84

0×54

124

1010100

T

21

0×15

025

0010101

NAK

85

0×55

125

1010101

U

22

0×16

026

0010110

SYN

86

0×56

126

1010110

V

23

0×17

027

0010111

ETB

87

0×57

127

1010111

W

24

0×18

030

0011000

CAN

88

0×58

130

1011000

X

25

0×19

031

0011001

EM

89

0×59

131

1011001

Y

26

0×1A

032

0011010

SUB

90

0×5A

132

1011010

Z

27

0×1B

033

0011011

ESC

91

0×5B

133

1011011

[

28

0×1C

034

0011100

FS

92

0×5C

134

1011100

\

29

0×1D

035

0011101

GS

93

0×5D

135

1011101

]

30

0×1E

036

0011110

RS

94

0×5E

136

1011110

^

31

0×1F

037

0011111

US

95

0×5F

137

1011111

_

32

0×20

040

0100000

SP

96

0×60

140

1100000

.

33

0×21

041

0100001

!

97

0×61

141

1100001

a

34

0×22

042

0100010

"

98

0×62

142

1100010

b

35

0×23

043

0100011

#

99

0×63

143

1100011

c

36

0×24

044

0100100

$

100

0×64

144

1100100

d

37

0×25

045

0100101

%

101

0×65

145

1100101

e

38

0×26

046

0100110

&

102

0×66

146

1100110

f

39

0×27

047

0100111

'

103

0×67

147

1100111

g

40

0×28

050

0101000

(

104

0×68

150

1101000

h

41

0×29

051

0101001

)

105

0×69

151

1101001

i

42

0×2A

052

0101010

*

106

0×6A

152

1101010

j

43

0×2B

053

0101011

+

107

0×6B

153

1101011

k

44

0×2C

054

0101100

'

108

0×6C

154

1101100

l

45

0×2D

055

0101101

-

109

0×6D

155

1101101

m

46

0×2E

056

0101110

.

110

0×6E

156

1101110

n

47

0×2F

057

0101111

/

111

0×6F

157

1101111

o

48

0×30

060

0110000

0

112

0×70

160

1110000

p

49

0×31

061

0110001

1

113

0×71

161

1110001

q

50

0×32

062

0110010

2

114

0×72

162

1110010

r

51

0×33

063

0110011

3

115

0×73

163

1110011

s

52

0×34

064

0110100

4

116

0×74

164

1110100

t

53

0×35

065

0110101

5

117

0×75

165

1110101

u

54

0×36

066

0110110

6

118

0×76

166

1110110

v

55

0×37

067

0110111

7

119

0×77

167

1110111

w

56

0×38

070

0111000

8

120

0×78

170

1111000

x

57

0×39

071

0111001

9

121

0×79

171

1111001

y

58

0×3A

072

0111010

:

122

0×7A

172

1111010

z

59

0×3B

073

0111011

;

123

0×7B

173

1111011

{

60

0×3C

074

0111100

<

124

0×7C

174

1111100

|

61

0×3D

075

0111101

=

125

0×7D

175

1111101

}

62

0×3E

076

0111110

>

126

0×7E

176

1111110

~

63

0×3F

077

0111111

?

127

0×7F

177

1111111

DEL

 

JMP 점프

 NOP 아무것도 안한다

JE -  Jump if equal 비교나 테스트의 결과가 같다면 점프

JNE 은 이거랑 만대로 생각하시면 됩니다.

Je는 Jump if equal 였죠 JNE은 N이 추가 되있네요 풀어보면 Jump if NOP equal 이네요

그럼 JNE 은 아시겠죠 ?

 

그럼 J는 Jump if 이므로 생략하겠습니다.

Jz Z는 제로입니다. 말그대로 왼쪽 인자의 값이  0이라면 점프입니다.

그럼 jNZ는 아시겟죠?

그럼 JL로 넘어시다

L은 LESS SINGED 왼쪽인자의 값이 오른쪽 인자의 값보단 작으면 점프 입니다.

JNL은 넘어가겠습니다.

JB 는 BELOW UNSIGNED 왼쪽  인자의 값이 오른쪽 인자의 값보다 작으면 점프

JNB 은 넘어값니다

JG 는 왼쪽 인자의 값이 오른쪽 인자의 값보다 크면 점프

JNG는 반대

jLE 왼쪽인자의값이 오른쪽 인자의 값보다 작거나 같으면 점프

JGE 이건 g네요 많이 안쓰니깐 JLE의 반대라고 설명하겠습니다 . 나머지는 차차 설명하겠습니다.

아래는 많이쓰는 어셈코드표입니다. 이건 꼭 외울필요는 없습니다.

JE 74 OF 0F84

JNE 75 OF  0F85

jmp eb

nop 90

일단은 이 4개만 설명하겠습니다.

 

출처 : 쿨소프트2.0

어셈블리를 시작하니 어렵게 설명하진 않겠습니다

 

명령어 대상오퍼랜드 소스오퍼랜드  이러한 구조를 가지고 있습니다.

 

MOV : 메모리나 레이스터의 값을 옴길때 쓰입니다.

 

POP :SP 레지스터를 조작하는 명령어로 스택의 데이터를 꺼냅니다.

 

dec 레지 1감소

 

inc: 레지 1증가

 

Add: 레지스터의 메모리의 값을 더할떄 쓰인다.

 

sub: 레지스터의 메모리의 값을 뺼떄 쓰인다.

 

Lea : 대상 오퍼랜드의 값을 오퍼랜드의 값으로 만듬

 

return: 돌아감

 

Nop:동작안함

 

Call :호출

 

cmp :비교

 

출처 : 쿨소프트2.0



파티션 분할/병합 프로그램

파티션 매직 8.0 한글판 정품버전

 

파티션매직 8.0 (Partition Magic 8.0) 사용법

 

파티션 크기 변경 및 이동하기

1. 파티션 매직을 실행하고 디스크 정보가 표시된 오른쪽 창에서 크기를 변경할 파티션을 선택한다.

 만약 시스템 파일이 있는 부팅 드라이브에서 파티션을 잘못 옮기거나 변경하면

부팅이 되지 않을 수 있으니 주의한다.    

2. 왼쪽의 ‘파티션 작업’ 메뉴에서 ‘파티션 크기 변경/이동’을 선택한다.

이 작업은 까다롭고 위험성이 높은 만큼 설명서를 잘 읽고 작업 내용을 숙지한 후 시작해야 한다.  

3. ‘파티션 크기 조정/이동’ 창이 열리면 파티션 영역이 막대로 표시되어 나타난다.

 먼저 크기를 줄이는 방법부터 알아보자.

막대 오른쪽의 화살표를 클릭해 커서 모양이 ‘↔’로 바뀌면 천천히 왼쪽으로 드래그한다.

그래프와 아래쪽의 상세 정보를 확인하면서 크기가 적당하다 싶으면 ‘확인’ 버튼을 누른다.

파티션을 옮길 때에는 마우스로 드래그하기만 하면 된다. 

4. 설정한 내용이 오른쪽의 디스크 정보 화면에 나타난다.

줄어든 파티션 크기만큼 ‘할당되지 않음’으로 표시된 파티션 영역이 생겨났을 것이다.  

5. 화면 위쪽의 그래프로 표시된 정보 영역에서 ‘할당되지 않음’으로 표시된 파티션을

마우스 오른쪽 버튼으로 클릭하고 나타나는 팝업 메뉴에서 ‘작성’을 선택한다. 

6. 새로 만들 파티션의 크기와 레이블, 유형 등을 선택하고 ‘다음’을 클릭한다.

작성 유형은 ‘논리(권장)’를 선택하는 것이 무난하다.   

7. 화면 위쪽의 그래프로 표시된 정보 영역에서 ‘할당되지 않음’으로 표시되었던 부분이

새로 설정한 파티션 정보로 변경되었으면 화면 왼쪽 하단에서 ‘적용’을 선택한다. 

8. ‘변경 사항 적용’ 창이 열리면 ‘자세히’ 버튼을 누른다. 설정한 작업 내용이 정확한지

다시 한 번 확인하기 위한 과정이다. 

9. 목록에서 현재 대기 중인 작업 목록을 확인한다. 설정이 제대로 되었으면 ‘닫기’를 클릭한다.

 아직까지는 실제로 작업이 이루어진 것이 아니라, 작업 후의 결과를 미리 보여준 것에 불과하다.

다시 ‘변경 사항 적용’ 창으로 돌아가 ‘예’를 선택해야 비로소 작업이 완료된다.  

10. 시스템을 재부팅한다는 안내 창이 열리면 다시 ‘예’를 선택한다. 

11. PC가 다시 부팅되면서 앞서 지정한 작업이 수행된다. 파티션의 크기와

저장된 데이터의 용량에 따라 변경 내용과 이동 시간 등이 달라진다.

사용법 출처 : Tong - 남산님의 네트워크/운영체제/보안통



사용 방법

 

실행한뒤 우측 하단에 트레이아이콘이 추가 된지 확인한다.

설정을 원하는 창을 활성화 시킨다.

'항상 위'를 설정하고 싶다면 Shift + F2를 누른다.

'항상 위'를 해제하고 싶다면 Shift + F3를 누른다.

'화면크기, 위치'를 설정하고 싶다면 Shift + F4를 누른다.

'투명도'를 설정하고 싶다면 Shift + F5를 누른다.

TLY Files.../Theme... 2009. 10. 10. 18:51