Operand Addressing 방법 mov eax, 1// OK mov [eax], 1// OK mov eax, ebx// OK mov eax, [ebx]// OK mov [eax], [ebx]// ERROR M-to-M 타입은 없음!! operand의 형태에 따라 addressing 방법이 달라진다. 이때 M-to-M(메모리-to-메모리) 타입은 불가능하다. 메모리 접근시 시스템 버스를 타게되는데, 이 시스템 버스는 한번에 하나씩만 사용이 가능하다. 따라서 M-to-M 타입의 경우 동시에 operand 두개가 동시에 시스템 버스를 사용해야하므로 불가능하다. #include int main() { int i = 0; __asm { mov ss:[esp], 0x12345678 mov eax, [esp]..
어셈블리어 기계어의 비트 형식을 mnemonic code로 나타낸 것 Mnemonic code 기계어의 비트 형식이 나타내는 의미를 symbol로 표현한 것으로 프로그램을 이해하거나 작성하기가 쉽다. 어셈블리 프로그래밍을 하는 이유 컴퓨터 하드웨어의 구성 요소들을 직접 액세스하려고 할 때 컴파일러를 설계하거나 시스템 프로그램을 작성하려고 할 때 빠른 수행이 필요한 프로그램을 작성하려고 할 때 기억 장소를 적게 차지하거나 입출력 장치를 보다 효율적으로 사용하려 할 때 Assembler 어셈블리어를 기계어로 변환하는 프로그램 → 어셈블리어와 기계어는 1:1 mapping 관계로 disassemble이 가능하며 이를 통해 코드가 동작하는 로직을 이해할 수 있다. Assebly 데이터 타입 Byte = 1 by..
해시 값 얻기 fun hashSHA256(msg: String) { val hash: ByteArray1 try { val md = MessageDigest.getInstance("SHA-256") md.update(msg.toByteArray()) hash = md.digest() } catch (e: CloneNotSupportedException) { throw DigestException("couldn't make digest of partial content"); } return bytesToHex(hash) } hashSHA256("블랙핑크") // F8012FD952BA45AFE2942C061610F471BF047B43AF736AA65A28ABF692BED23E hashSHA256("리사")..
private val digits = "0123456789ABCDEF" fun bytesToHex(byteArray: ByteArray1): String { val hexChars = CharArray(byteArray.size * 2) for (i in byteArray.indices) { val v = byteArray[i].toInt() and 0xff hexChars[i * 2] = digits[v shr 4] hexChars[i * 2 + 1] = digits[v and 0xf] } return String(hexChars) } val bytes = byteArrayOf(10, 2, 15, 11) val s = bytesToHex(bytes) println(s) // output: 0A020F0..
Anko 라이브러리 추가 하기!! 1. 모듈 수준의 build.gradle(Module) 파일의 dependecies 항목에 Anko 라이브러리를 추가한다. dependencies { implementation "org.jetbrains.anko:anko:$anko_version" } 라이브러리 의존성 추가 안드로이드 스튜디오는 이렇게 build.gradle(Module) 파일의 dependencies 항목에 각 라이브러리를 추가하면 그레이들이 빌드 시스템에서 자동으로 라이브러리를 다운로드받아서 프로젝트에서 사용할 수 있다. 2. 프로젝트 수준의 build.gradle(Project) 파일에서 Anko 라이브러리 버전을 변수에 지정한다. buildscript { ext.anko_version = '0.1..
이미지에는 PNG, JPG 등의 비트맴 이미지 파일과 SVG, EPS 등의 벡터 이미지가 있다. 벡터 이미지 안드로이드에서 벡터 이미지는 벡터 드로어블(VectorDrawable) 리소스로 분류된다. 벡터 드로어블이 동작하는 버전은 안드로이드 5.0부터이다. 안드로이드 5.0 미만 버전의 기기에서도 벡터 드로어블 이미지가 표시되게 하려면 모듈 수준의 build.gradle(Module) 파일에 다음 코드를 추가해야 한다. 현재 진행 중인 프로젝트는 SDK 19로 안드로이드 4.4를 사용하고 있다. defualtConfig { vectorDrawables.useSupportLibrary = true } 벡터 드로어블 생성 방법 프로젝트 창에서 res 폴더에서 우클릭 -> New -> Vector Asset..
x86 or 08x06 인텔이 개발한 마이크로프로세서 계열을 부르는 말이자, 이들과 호환되는 프로세서들에서 사용한 명령어(instruction) 집합 구조들을 통칭하는 말이다. 초기의 프로세서들의 이름이 모두 80으로 시작해서 86으로 끝났기 때문에 이러한 이름으로 불린다. 마이크로프로세서(microprocessor, microprocessing unit, 초소형 연산 처리 장치) 기계어 코드를 실행하기 위해 실행과정을 단계별로 나누어 처리를 위한 마이크로 코드를 작성하고, 이 마이크로 코드에 의해 단계적으로 처리하는 논리회로를 말한다. CPU(중앙 처리 장치)가 컴퓨터 전체 시스템의 위치와 입장에서 나온 말이라면, 마이크로프로세서는 동작 방식에서 나온 말로 서로 같은 것이다. https://ko.wik..