본문 바로가기

컴퓨터 공학 자료(학부)/Assembly

ASSUME 디렉티브의 정의(MASM) -. All the addressing modes which use BP register for specifying offset address use SS register as the default segment register, and all other addressing modes for memory operand use DS register. -. ASSUME ASSUME은 MASM에게 뒤따르는 코드내에서 어떤 세그먼트가 세그먼트 레지스터와 연관되는지 알려주거나, 간접 메모리 참조에 사용될 크기를 알려준다. 지정하는 형태는 segreg:name 인데, 여기서 segreg는 CS, DS, SS 및 ES 중의 하나이고, name은 SEGMENT 지시어를 사용하여 정의한 세그먼트 이름이거나 GROUP 지.. 더보기
Segment란? 비트는 조각. 즉 0과 1을 말합니다. 먼저 컴퓨터는 2진수로 데이터를 저장하고 처리합니다. 16비트가 표현가능한 양의 정보는 0부터 최대 FFFFh(1111111111111111b, 65535)까지 총 65536가지입니다. 즉 2^16과 같습니다. 이것을 킬로단위로 나타내면 65536 / 1024 = 64kb(킬로비트)가 되는 것입니다. 세그먼트와 옵셋 : 세그먼트(Segment)는 사전적의미로 "부분"이라는 뜻입니다. 옵셋(Offset)은 "차감계산을 하다"라는 뜻이죠? 세그먼트는 메모리의 한 부분(최대 64KB크기)이고요. 옵셋은 그 세그먼트 내의 상대적 주소를 말합니다. 기준이 되는 세그먼트 주소값에서 얼마나 떨어져 있는지를 나타내는 값입니다. 예전에는 1M의 메모리 크기만 해도 크다고 생각해서 .. 더보기
어셈블리어 과제 개발환경: 비쥬얼 스튜디오 2008+ MASM 연동해서 프로그래밍 술취한 교수라고 어셈블리책 10장 구조체에 나오는 예제인데 시간이 없어서 무식하게 짰다. 처음시작 좌표 25,25를 지정해주고 랜덤으로 길을 한칸씩 가게해서 50,50(교수님의집) 까지 갔을때 종료하는 프로그램이다. 50,50 맵을 지정해주었고 중간중간에 전봇대를 세워줘서 교수님이 전봇대에 부딫치면 뒤로 한발짝 다시 물러서게 하였다. INCLUDE irvine32.inc walkMAX =1000 StartX = 25 StartY = 25 DrunkardWalk STRUCT path COORD WalkMax DUP() ;COORD 구조체: 윈도우 API기본 제공 구조체 pathUsed WORD 0 ;.model stdcall 오른쪽에서부터 .. 더보기
간단한 대소문자 변환 INCLUDE Irvine32.inc .data string BYTE "welcome to the ASSEMBLY world", 0 .code main PROC mov edx, OFFSET string mov esi, OFFSET string call WriteString call crlf call ChangeString mov edx, esi call WriteString exit main ENDP ChangeString PROC PUSH EBP MOV EBP, ESP PUSHAD L1: inc esi mov al, [esi] cmp al, 32 je SPACE cmp al, 0 je DONE cmp al, 'a' jb L2 jae L3 L2: add BYTE PTR [esi], 32 jmp L1 L3.. 더보기
C언어에서 인라인으로 어셈코드 이용 #include #include #include using namespace std; int main() { char container[20]; char result[20]; int count=0; ifstream fin; ofstream fout; fin.open("input.txt"); fout.open("output.txt"); fin.read(container,20); count=fin.gcount(); __asm{ cld MOV ecx, count LEA esi, container LEA edi, result REP MOVSB } for(int i =0 ; i 더보기
MASM과 비쥬얼스튜디오 2008연동 윈도우 환경에서 어셈블 할 수 있는 프로그램은 많지만(ollydebug라던지) VS2008 이 익숙하기도 하고 디버깅하기도 편해서 2008과 연동해서 어셈블러 공부하기로 했다. 절차 1. kipirvine.com/asm 사이트에가서 vs2008용 어셈블러 라이브러리를 다운받는다. 2. vs2008에서 반드시 '빈프로젝트' 생성 후 alt+f7(프로젝트 속성)에서 -구성속성-링커-일반에서 '증분링크 허용' -구성속성-링커-일반에서 추가라이브러리 디렉토리를 다운받은 어셈블러 라이브러리 폴더로 지정 -구성속성-링커-입력-추가종속성에서 'irvine32.lib'추가 -구성속성-시스템-하위시스템에서 '콘솔창에서 실행' 선택 3.메인화면에서 프로젝트-사용자지정빌드규칙에서 'microsoft macro assembl.. 더보기