Microsoft PowerPoint - a3.ppt [호환 모드]

Similar documents
Microsoft PowerPoint - a5a.ppt [호환 모드]

Microsoft PowerPoint - a10.ppt [호환 모드]

Microsoft PowerPoint - a8a.ppt [호환 모드]

Microsoft PowerPoint - 3ÀÏ°_º¯¼ö¿Í »ó¼ö.ppt

hlogin2

Microsoft PowerPoint - a6.ppt [호환 모드]

강의10

PowerPoint 프레젠테이션

Deok9_Exploit Technique

No Slide Title

INTRO Basic architecture of modern computers Basic and most used assembly instructions on x86 Installing an assembly compiler and RE tools Practice co

Microsoft Word - ExecutionStack

Microsoft PowerPoint - 15-MARS

Microsoft PowerPoint - a4.ppt [호환 모드]

untitled

Microsoft PowerPoint - a4.ppt [호환 모드]

Microsoft PowerPoint - Chapter_04.pptx


< E20C6DFBFFEBEEE20C0DBBCBAC0BB20C0A7C7D12043BEF0BEEE20492E707074>

Microsoft Word - FunctionCall

The_IDA_Pro_Book

PRO1_09E [읽기 전용]

PowerPoint 프레젠테이션

Microsoft Word - 1. ARM Assembly 실습_xp2.doc

untitled

Microsoft PowerPoint - Perpect C 02.ppt [호환 모드]

Microsoft PowerPoint - a2.ppt [호환 모드]

제 14 장포인터활용 유준범 (JUNBEOM YOO) Ver 본강의자료는생능출판사의 PPT 강의자료 를기반으로제작되었습니다.

강의 개요

Microsoft PowerPoint - chap06-2pointer.ppt

Microsoft PowerPoint - ch07 - 포인터 pm0415

Microsoft PowerPoint - a9.ppt [호환 모드]

9

Microsoft PowerPoint - chap02-C프로그램시작하기.pptx

Microsoft PowerPoint - o8.pptx

T100MD+

=

<322EBCF8C8AF28BFACBDC0B9AEC1A6292E687770>

비트와바이트 비트와바이트 비트 (Bit) : 2진수값하나 (0 또는 1) 를저장할수있는최소메모리공간 1비트 2비트 3비트... n비트 2^1 = 2개 2^2 = 4개 2^3 = 8개... 2^n 개 1 바이트는 8 비트 2 2

IDA 5.x Manual hwp

Microsoft PowerPoint - c2.ppt

Microsoft PowerPoint - C프로그래밍-chap03.ppt [호환 모드]

Microsoft PowerPoint - chap03-변수와데이터형.pptx

MAX+plus II Getting Started - 무작정따라하기

Microsoft PowerPoint - hw8.ppt [호환 모드]

MPLAB C18 C

금오공대 컴퓨터공학전공 강의자료

Tcl의 문법

Microsoft PowerPoint - hy2-12.pptx

A Dynamic Grid Services Deployment Mechanism for On-Demand Resource Provisioning

슬라이드 1

Microsoft PowerPoint - C++ 5 .pptx

1.2 자료형 (data type) 프로그램에서다루는값의형태로변수나함수를정의할때주로사용하며, 컴퓨터는선언된 자료형만큼의메모리를확보하여프로그래머에게제공한다 정수 (integer) 1) int(4 bytes) 연산범위 : (-2 31 ) ~ (2 31 /2)-

4. #include <stdio.h> #include <stdlib.h> int main() { functiona(); } void functiona() { printf("hihi\n"); } warning: conflicting types for functiona

Microsoft PowerPoint - chap04-연산자.pptx

OCW_C언어 기초

Microsoft PowerPoint - CHAP-03 [호환 모드]

K7VT2_QIG_v3

[ 마이크로프로세서 1] 2 주차 3 차시. 포인터와구조체 2 주차 3 차시포인터와구조체 학습목표 1. C 언어에서가장어려운포인터와구조체를설명할수있다. 2. Call By Value 와 Call By Reference 를구분할수있다. 학습내용 1 : 함수 (Functi

Microsoft PowerPoint - e pptx

슬라이드 1

(1) 주소지정방식 Address Mode 메모리접근 분기주소 명령어 직접번지 Reg. 지정 Reg. 간접 Base Index 간접 Immediate 상대번지 절대번지 Long 주소 Reg. 간접 Byte Access Bit Access 내부 Data M

구문 분석

C언어 및 실습 C Language and Practice

hlogin7

<4D F736F F F696E74202D203137C0E55FBFACBDC0B9AEC1A6BCD6B7E7BCC72E707074>

SRC PLUS 제어기 MANUAL

Microsoft PowerPoint 자바-기본문법(Ch2).pptx

C# Programming Guide - Types

금오공대 컴퓨터공학전공 강의자료

10 강. 쉘스크립트 l 쉘스크립트 Ÿ 쉘은명령어들을연속적으로실행하는인터프리터환경을제공 Ÿ 쉘스크립트는제어문과변수선언등이가능하며프로그래밍언어와유사 Ÿ 프로그래밍언어와스크립트언어 -프로그래밍언어를사용하는경우소스코드를컴파일하여실행가능한파일로만들어야함 -일반적으로실행파일은다

11장 포인터

Orcad Capture 9.x

목차 포인터의개요 배열과포인터 포인터의구조 실무응용예제 C 2

13주-14주proc.PDF

DIY 챗봇 - LangCon

2. GCC Assembler와 AVR Assembler의차이 A. GCC Assembler 를사용하는경우 i. Assembly Language Program은.S Extension 을갖는다. ii. C Language Program은.c Extension 을갖는다.

JVM 메모리구조

(Asynchronous Mode) ( 1, 5~8, 1~2) & (Parity) 1 ; * S erial Port (BIOS INT 14H) - 1 -

휠세미나3 ver0.4

Microsoft PowerPoint - 기계공학실험1-1MATLAB_개요2D.pptx

C++-¿Ïº®Çؼ³10Àå

슬라이드 1

Microsoft PowerPoint - 00_(C_Programming)_(Korean)_Computer_Systems

슬라이드 1

Microsoft PowerPoint - PL_03-04.pptx

프로그램을 학교 등지에서 조금이라도 배운 사람들을 위한 프로그래밍 노트 입니다. 저 역시 그 사람들 중 하나 입니다. 중고등학교 시절 학교 도서관, 새로 생긴 시립 도서관 등을 다니며 책을 보 고 정리하며 어느정도 독학으르 공부하긴 했지만, 자주 안하다 보면 금방 잊어

PowerPoint Presentation

API 매뉴얼

C++ Programming

<4D F736F F F696E74202D20B8B6C0CCC5A9B7CEC7C1B7CEBCBCBCAD202839C1D6C2F7207E203135C1D6C2F >

U.Tu System Application DW Service AGENDA 1. 개요 4. 솔루션 모음 1.1. 제안의 배경 및 목적 4.1. 고객정의 DW구축에 필요한 메타정보 생성 1.2. 제품 개요 4.2. 사전 변경 관리 1.3. 제품 특장점 4.3. 부품화형

컴파일러

Introduction to LMC

1217 WebTrafMon II

Microsoft PowerPoint - chap01-C언어개요.pptx

PowerPoint 프레젠테이션

PowerPoint Presentation

Microsoft PowerPoint - [2009] 02.pptx

PowerPoint 프레젠테이션

Transcription:

이장의내용 3 장어셈블리언어의기초 어셈블리언어의기본구성요소 간단한어셈블리언어프로그램예 프로그램어셈블리, 링크, 실행 데이터정의 기호상수 실제주소모드프로그래밍 어셈블리언어 2 3.1 어셈블리언어기본구성요소 정수상수 정수상수 정수수식 실수상수 문자, 문자열상수 예약어, 식별자 디렉티브 (Directives) 와명령어 레이블 (Labels) 니모닉 (Mnemonics) 과피연산자 (Operands) 주석 (Comments) 부호 (+ 또는 ) 는선택사항 5 +5 5 진수 (radix): binary, decimal, hexadecimal, or octal d decimal (ex) 26, 26d h hexadecimal (ex) 2Bh, 55H, 0A3h b, y binary (ex) 10110001b o, q octal (ex) 42q, 42o 문자 (A-F) 로시작하는 16 진수앞에 0 을넣음 r encoded real ( 실수를 2 진수형태로표기, IEEE754 표준형식 ) 어셈블리언어 3 어셈블리언어 4

정수수식 (Expressions) 실수상수 연산자와우선순위 어셈블될때계산되며, 기계어로바뀌어실행시간에수행되지않음 예 10진실수 ( 예 ) 2. +3.0-44.2E+05 26.E5... 적어도한자리수와소수점이필요함 부호화실수 ( 예 ) +1.0 의 IEEE-754 32-bit 부동소수점형식 (short real) 0011 1111 1000 0000 0000 0000 0000 0000 (2진수) 3F800000r 어셈블리언어 5 어셈블리언어 6 문자상수와문자열상수 예약어와식별자 문자와문자열구분없이 " " 또는 ' ' 로둘러싸여표시 문자상수 'A' "x" ASCII 문자 = 1 byte 문자열상수 "ABC"... 3 byte 'wxyz'... 4 byte Embedded quotes: 다른따옴표에포함됨 'Say "Goodnight," Gracie' "This isn't a test" 예약어 ( 부록 A.2 참조 ) instruction mnemonics (ex) mov, add, mul register (ex) eax, ebx, esi directives (ex) proc, endp, end, include type attributes (ex) byte, word operators (ex) mod predefined symbols (ex) @data 식별자 (Identifiers) 1 247 문자 대소문자구분하지않음 (case insensitive) 어셈블할때옵션 (-Cp) 을주어구분할수도있음 첫문자는다음문자들만가능함 알파벳 (letter), underscore(_), @,? 또는 $ 예약어는사용할수없음 ( 예 ) var1 Count _main $first @@myfile 어셈블리언어 7 어셈블리언어 8

디렉티브 (Directives) 디렉티브 어셈블러가인식하여어셈블할때에처리하는명령어 기계어와관련이없으며, 실행시간에실행되지않음 대소문자를구분없음 (case insensitive) 코드, 데이터영역 ( 세그먼트 ) 선언, 메모리모델선택, 변수, 프로시저선언등과같은작업에사용됨 ( 예 ).model dword proc 디렉티브와명령어 myvar dword 26 mov eax, myvar 어셈블러와디렉티브 명령어 : 모든어셈블러가같은명령어집합을공유 디렉티브 : 어셈블러마다디렉티브집합이다름... 변수용메모리예약디렉티브... 데이터전송 ( 복사 ) 명령어 명령어 (Instructions) 명령어 형식 어셈블러에의해서 CPU 의명령어집합에속하는기계어로변환됨 (cf) 디렉티브 : 기계어와관련없음 실행시간에메모리에적재되어 CPU 에서실행됨 일반적형식 label : mnemonic operand(s) ; comment (optional) (required) (usually required) (optional) 예 : mov ax, 5 ; ax 5h code label target: inc ax ; ax ax + 1 mov myvar, ax ; myvar ax data label jmp target myvar word 100 ; 16-bit variable 어셈블리언어 9 어셈블리언어 10 레이블, 니모닉 (Mnmonics), 피연산자 피연산자수와명령어형식 레이블 (Label) 명령어또는데이터의위치를표시하는식별자 Code label (ex) target : jump 와 loop 명령어의 target ( 콜론을함께사용 ) Data label (ex) myvar byte 'A' 변수위치의식별자 ( 변수값을정의 ) 명령어니모닉 (Instruction Mnemonics) 명령어의연산의유형에대한힌트를제공하는이름 예 : MOV, ADD, SUB, MUL, INC, DEC 피연산자 (Operands) 즉시값 : 상수, 상수수식 96 2+4 레지스터 (register) eax esi 메모리 : data label,... count label: label code data No operand stc ; set Carry Flag(CF) implicit operand One operand inc eax ; register inc mybyte ; memory ( 변수 ) Two operands add ebx, ecx ; register, register sub mybyte, 25 ; memory, constant add eax, 36*25 ; register, constant-expression 어셈블리언어 11 어셈블리언어 12

주석 (Comments) 주석 한줄주석 (single-line comment) add ax, 10 ; add 10 into ax 블록주석 (block comment) 여러줄 COMMENT & This line is a comment. This line is also a comment. & NOP 명령어 NOP 명령어 1 바이트크기로아무동작도하지않음 코드를짝수또는 4 의배수주소로정렬시키기위해서사용함 x86 프로세서는 4 의배수의주소에있는코드와데이터 (32 비트크기 ) 를더빠르게읽을수있음 사용자정의기호 어셈블리언어 13 어셈블리언어 14 3.2 예제 : 정수의덧셈, 뺄셈 MS-DOS용프로그램 (real-address mode) title add and subtract... 프로그램제목을나타내는주석.model small... 메모리모델 : real (CS,DS 각 1개 )... 코드세그먼트시작 main proc... 프로시저시작 (main) mov ax, 1000h ; ax 1000h add ax, 400h ; ax ax + 400h sub ax, 200h ; ax ax 200h mov ax, 4c00h int 21h ; terminate the program main endp... 프로시저끝 (main) end main... 프로그램끝, main부터시작함 이코드는 memory operand를사용하지않음 debug를사용하여동작확인가능 (debug는 windows 7에는없음 ) 예제 : 정수의덧셈, 뺄셈 protected mode 용 32-bit 코드 TITLE Add and Subtract (AddSub.asm) ; This program adds and subtracts 32-bit integers. INCLUDE Irvine32.inc main PROC mov eax,10000h add eax,40000h sub eax,20000h call DumpRegs exit main ENDP END main... 저자제공파일을 include ; EAX = 10000h ; EAX = 50000h ; EAX = 30000h ; display registers ; macro for termination 어셈블리언어 15 어셈블리언어 16

AddSub 의다른버전 no include Program output (call DumpRegs) Call Dump Regs : 저자가제공하는출력프로시저호출 레지스터와플래그값을출력함 EAX=00030000 EBX=7FFDF000 ECX=00000101 EDX=FFFFFFFF ESI=00000000 EDI=00000000 EBP=0012FFF0 ESP=0012FFC4 EIP=00401024 EFL=00000206 CF=0 SF=0 ZF=0 OF=0 TITLE Add and Subtract (AddSubAlt.asm) ; This program adds and subtracts 32-bit integers..386... 386 명령어사용.MODEL flat,stdcall... 보호모드 ( 균일세그먼트 ).STACK 4096 ExitProcess PROTO, dwexitcode:dword... 함수원형선언 DumpRegs PROTO main PROC mov eax,10000h ; EAX = 10000h add eax,40000h ; EAX = 50000h sub eax,20000h ; EAX = 30000h call DumpRegs INVOKE ExitProcess,0... ExitProcess 함수호출 ( 반환값 0) main ENDP END main 어셈블리언어 17 어셈블리언어 18 Program 템플릿 (Template) TITLE Program Template (Template.asm) 3.3 프로그램어셈블, 링크, 실행 Assemble-Link-Execute 사이클 ; Program Description: ; Author: ; Creation Date: ; Revisions: ; Date: Modified by: INCLUDE Irvine32.inc ; (insert variables here) main PROC ; (insert executable instructions here) exit main ENDP ; (insert additional procedures here) END main 어셈블리언어 19 1. text editor 사용 source file 작성 ( 확장자.asm) 2. assembler 실행 object file 생성 ( 확장자.obj) 3. linker 실행 executable file 생성 ( 확장자.exe) 4. loader 실행 프로그램실행 어셈블리언어 20

어셈블러와링커 어셈블러 Batch 프로그램실행하기 어셈블러 (Assembler) 링커 MASM 6.xx 까지는어셈블러를별도로설치해야함 Visual C++ 2008 이후부터는어셈블러를포함하고있음 ML.EXE Microsoft Macro Assembler 9.00 LINK.EXE 32-bit code linker LINK16.EXE 16-bit code linker ( 저자제공 ) link 할 object file 과 library file 이름을인수로주어야함 어셈블리편의를위한 batch 파일 ( 저자제공 ) Assembler 와 Linker 를연속하여수행, 필요한인수제공 MAKE16.BAT 16-bit source program 용 (DOS 용 ) ASM32.BAT 32-bit source program용 (Windows용) MAKE32.BAT 저자가제공한 batch 파일을수정한것 명령어기반실행을위해서는적절한 path 설정이필요 시작 - 실행 -cmd ( 또는 command) 경로설정 C> path %path%;c:\irvine 또는 [ 제어판 > 시스템 > 고급 > 환경변수 ] 선택후 PATH 변수설정 (cf) [ 시작 -Microsoft VisualStudio2010 VistualStudioTools VisualStudio2010 명령프롬프트 ] 를선택하면명령어창을생성하면 PATH 설정불필요 source 프로그램이있는 directory 로이동 C> cd c:\user\gdhong assemble & link C> make32 asmfile 또는 C> make16 asmfile ( 확장자.asm은생략 ) 어셈블리언어 21 어셈블리언어 22 리스트파일 (Listing File) 리스트파일 ( 확장자.lst) : 다음항목을포함 source code, addresses, object code (machine language) segment names, symbols (variables, procedures, and constants) 예 : address (offset) machine language source code 어셈블리언어 23 어셈블리언어 24

3.4 데이터정의 정수자료형 BYTE, SBYTE (DB) 8-bit unsigned / signed integer WORD, SWORD (DW) 16-bit unsigned / signed integer DWORD, SDWORD (DD) 32-bit unsigned / signed integer QWORD (DQ) 64-bit integer FWORD 48-bit integer (16-bit segment:32-bit offset) TBYTE 80-bit integer DB, DW, DD, DQ는구형으로서사용을권장하지않음 실수자료형 데이터정의문 데이터정의문 예 메모리에변수용메모리공간을확보함 value1 BYTE 127 value2 SBYTE -50 value3 WORD 65535 value4 SDWORD 12345678h value5 QWORD?? : uninitialized data a a+1 a+2 a+4 a+8 value1 value2 value3 value4 value5 REAL4 4-byte(32-bit) real, single precision REAL8 8-byte (64-bit) real, double precision REAL10 10-byte (80-bit) real, extended IEEE 754 standard format 어셈블리언어 25 구식디렉티브사용 a DB 'A' b DW 55aah a+16 어셈블리언어 26 여러개의초기값정의 문자열정의 여러개의초기값정의 list1 BYTE 10,20,30,? list2 BYTE 41h, 00100010b 초기값들은서로다른진수를사용가능 레이블이없는데이터정의문 list3 BYTE 10, 20 BYTE 30, 'Z' 초기값들을계속하여정의할때에주로사용 10 20 30? 41h 22h 10 20 30 'Z' list1 list2 list3 문자열은문자의배열로구현됨 예 : 문자열은따옴표로둘러싸서표기 ( 큰따옴표또는작은따옴표 ) 대개널바이트 (0) 으로명시적으로종료함 널종료문자열 명시적사용 str1 BYTE "Enter your name",0 str2 BYTE 'Error: halting program',0 str3 BYTE 'A','E','I','O','U' greeting BYTE "Welcome to the Demo program " BYTE "created by Kip Irvine.",0 greeting1 BYTE "Welcome to the Demo program ", "created by Kip Irvine.",0 하나의문자열 어셈블리언어 27 어셈블리언어 28

End of Line 문자열 DUP 연산자 CR/LF 문자열 (end-of-line 문자열 ) 0Dh = carriage return(cr)... 커서를 line 처음으로이동 0Ah = line feed(lf)... 커서를다음 line 으로이동 ) LF CR DUP 연산자 상수를반복카운터로사용하여여러개의데이터용공간확보 배열과문자열공간할당에유용 Array byte 20 dup (0) 카운터초기값인수 카운터와초기값인수는상수또는상수수식이어야함 str1 BYTE "Enter your name: ",0Dh,0Ah BYTE "Enter your address: ",0 newline BYTE 0Dh,0Ah,0 var1 BYTE 20 DUP(0) var2 BYTE 20 DUP(?) ; 20 bytes, all equal to zero ; 20 bytes, uninitialized var3 BYTE 4 DUP("STACK") ; 20 Bytes ; "STACKSTACKSTACKSTACK" var4 BYTE 10,3 DUP(0),20 어셈블리언어 29 어셈블리언어 30 WORD, SDWORD 데이터정의 DWORD, SDWORD 데이터정의 워드 (16-bit) 데이터정의 더블워드 (32 비트 ) 데이터정의 워드배열 더블워드배열 변수의오프셋주소 (32 비트 ) 저장 어셈블리언어 31 어셈블리언어 32

QWORD, TBYTE 데이터정의 64비트데이터정의 10바이트 packed BCD 데이터정의 각바이트를 10진수 1자리저장에사용함 Little Endian 순서 Little Endian 순서 예 : 여러바이트로구성된데이터자료형을메모리의연속된주소에저장되며, 최하위바이트는첫번째 ( 최하위 ) 메모리주소에저장됨 x86 프로세서는이순서를사용함 val1 DWORD 12345678h TBYTE 초기값을 16 진수로정의하는것에유의 packed BCD 에대해서는 7 장에서소개 (cf) Big Endian 순서 최상위바이트가첫번째 ( 최하위 ) 메모리주소에저장됨 어셈블리언어 33 어셈블리언어 34 AddSub2: AddSub 프로그램에변수추가 TITLE Add and Subtract, Version 2 (AddSub2.asm) ; This program adds and subtracts 32-bit unsigned ; integers and stores the sum in a variable. INCLUDE Irvine32.inc val1 DWORD 10000h val2 DWORD 40000h val3 DWORD 20000h finalval DWORD? main PROC mov eax,val1 ; start with 10000h add eax,val2 ; add 40000h sub eax,val3 ; subtract 20000h mov finalval,eax ; store the result (30000h) call DumpRegs exit main ENDP END main ; display the registers 비초기화데이터선언? 디렉티브 비초기화데이터세그먼트선언에사용함 이세그먼트에있는변수는 "?" 초기값을사용해야함 장점 : 이세그먼트를실행파일에포함시키지않아서프로그램실행파일크기를줄여줌 Example smallarray DWORD 10 DUP(0)? bigarray DWORD 5000 DUP(?) smallarray DWORD 10 DUP(0) bigarray DWORD 5000 DUP(?) 40B 실행파일에포함되지않음 40B 20KB 실행파일크기 > 20KB 어셈블리언어 35 어셈블리언어 36

Code 와 Data 의혼합 code 세그먼트와 data 세그먼트영역을섞어서작성가능함 어셈블러가같은세그먼트끼리모아놓음 move eax, ebx temp DWORD? mov temp, eax 같은세그먼트끼리합쳐져서명령어의실행흐름을방해하지않음 move eax, ebx mov temp, eax 3.5 기호상수 기호 (symbol) 상수 정수수식또는텍스트를식별자 ( 기호 ) 와연관시켜정의 정수수식또는텍스트대신사용할수있음 기호상수와변수의비교 Symbol Variable 저장공간사용 no yes 실행시간에값의변화 no yes 기호상수정의용디렉티브 등호 (=) EQU TEXTEQU temp DWORD? 어셈블리언어 37 어셈블리언어 38 등호 (=) 디렉티브 name = expression name: 기호이름 ( 식별자 ), 기호상수 expression: a 32-bit 정수 ( 상수, 상수수식 ) COUNT = 500... mov al, COUNT ; 500 배열과문자열의크기계산 현재위치카운터 (location counter): $ 현재의프로그램문장에대한오프셋을나타냄 배열의크기계산 배열자료를정의한바로다음에서다음형태의등호디렉티브를사용하여계산 size = ($ - array 시작번지 ) / (array 원소크기 ) 값을재정의가능 상수가나중에바뀔가능성이있다면기호상수를정의하여사용하는것이프로그램유지보수에좋음 list BYTE 10,20,30,40 ListSize = ($ - list) list WORD 1000h,2000h,3000h,4000h ListSize = ($ - list) / 2 list DWORD 1,2,3,4 ListSize = ($ - list) / 4 byte array word array dword array 어셈블리언어 39 어셈블리언어 40

EQU 디렉티브 EQU 기호를정수또는텍스트와연관시킴 name EQU expression ; integer expression name EQU symbol ; existing symbol name name EQU <text> ; any text 재정의될수없음 matrix1 EQU 10 * 10 100 matrix2 EQU <10 * 10> 10 * 10 matrix3 EQU matrix1 PI EQU <3.1416> presskey EQU <"Press any key to continue...",0> prompt BYTE presskey 어셈블리언어 41 TEXTEQU 디렉티브 TEXTEQU ( 텍스트매크로 ) 3가지형식 name TEXTEQU <text> name TEXTEQU textmacro name TEXTEQU %constexpr 재정의가능 continuemsg TEXTEQU <"Do you wish to continue (Y/N)?"> rowsize = 5 prompt1 BYTE continuemsg count TEXTEQU %(rowsize * 2) ; evaluates the expression <10> move TEXTEQU <mov> setupal TEXTEQU <move al,count> setupal ; generates: "mov al,10" 어셈블리언어 42 3.6 Real-Address Mode 프로그래밍 16-bit MS-DOS 프로그램생성 장점 단점 MS-DOS 및 BIOS 함수호출가능 메모리접근제한없음 ( 가상 8086 모드에서는제한이있음 ) 세그먼트와오프셋을인식해야함 Win32 function 을호출할수없음 사용가능메모리가 640KB 에서제한됨 (DOS 사용공간포함 ) 수정사항 INCLUDE Irvine16.inc 저자가제공하는파일 DS값을프로그램의데이터세그먼트시작주소로초기화해야함 mov ax, @data mov ds, ax DS = @data make16.bat를이용하여어셈블리... 저자제공 Windows 7이상 64비트운영체제에서지원하지않음 어셈블리언어 43 AddSub2, 16-Bit Version TITLE Add and Subtract, Version 2 (AddSub2.asm) INCLUDE Irvine16.inc ; (changed) val1 DWORD 10000h val2 DWORD 40000h val3 DWORD 20000h finalval DWORD? main PROC mov ax,@data ; initialize DS (new) mov ds,ax ; (new) mov eax,val1 ; get first value add eax,val2 ; add second value sub eax,val3 ; subtract third value mov finalval,eax ; store the result call DumpRegs ; display registers exit main ENDP END main 어셈블리언어 44