Assembly

2013.08.26_ASM_Constant, Instruction Operand(s) 해석

성엽이 2013. 8. 27. 09:30
_________________ASM________________________________________________________

어셈블리어에서 수(진수)의 표현 

 

hexadecimal(16진수) : 수의 뒤에 H

binary(2진수) : 수의 뒤에 B

octal(8진수) : 수의 뒤에 O 또는 Q

decimal(10진수) : 수의 뒤에 아무것도 적지 않으면 10진수 임

 

☞ - 를 붙이지 않으면 unsigned이고 - 를 붙이면 signed 임 , 즉 부호를 붙이면됨.

byte1 BYTE 255 ; value is FF

byte5 BYTE -1 ; value is FF

 

 

 

※ starsAndSpaces BYTE 24 DUP("* "), '*'   ; "* " 로 채워진 24바이트와 *의 아스키코드 값을 합한 25바이트

 

※ QWORD : 8 바이트

    TBYTE  : 10 바이트

 

 



instruction operand의 3가지 타입 

 1. constants(상수)

 2. designate CPU registers

 3. reference memory locations

 

 

 

 

 

 

 

 Mode

 Examples

 register mode

 mov al, '/' ; B0 2F                    (어셈블러에 의해 '/'의 아스키코드 값으로 바꾼뒤 mov 됨)

 immediate mode

 add eax, 135 ; 05 00000087        (상수를 바로 넣음)

 direct mode

 .DATA 

 k DWORD (?) => 4byte 크기로 변수를 잡음

 mov k,100

 => 변수에다가 값을 곧바로 넣는 것을 direct mode

 register indirect mode

 mov eax, 1000 => 주소를 1000번지 지정함

 mov [eax], 100 => 1000번지 주소지에 '100' 을 넣음

 => 간접적으로 변수에 집어넣음 indirect mode

(indirect mode 에서 사용가능한 레지스터  :  EAX, EBX, ECX, EDX, ESI, EDI, EBP, ESP)

 



PTR operator 

☞ mov [ebx], 0    ;  ebx레지스터가 가리키는 곳의 용량이 불분명함으로 이 코드는 에러임

 

☞ mov BYTE PTR [ebx], 0   ; BYTE PTR은 마치 C언어에서 캐스팅 해주듯 ebx가 가리키는 곳이 BYTE크기임을 나타내어 에러나지 않음

 

☞ add eax, [edx]  ; 이 경우 edx가 가리키는 곳의 값을 eax(DWORD)라는 4바이트 사이즈의 공간에 넣어야하는것이 분명하므로

                             add eax, DWORD PTR [edx] 이렇게 적어주지 않아도 에러나지 않음

※ mul bh ;    mul이라는 니모닉은 곱셈연산을 말함, 여기서 Operand(s)는 하나를 사용하는데, Operand(s)는 1개 이상 사용할 수 있다.


 ☞ APPENDX 를 참고하면 instruction 니모닉과 오버랜드에 따른 기계어와 명령수행에 필요한 클럭(소요시간)을 알수 있음