==========================================================================================
ASSEMBLY
==========================================================================================
=STATEMENTS (소스 코드, 명령어)
name mnemonic operand(s) ;comment
: ZeroCount mov ecx, 0 ; initialize count to zero
mnemonic operand(s) => 보통 사용 형태
: add eax, 158 => name, 주석 X
: addLoop: add eax, 158 => 주석 X
: jmp addLoop ; repeat addition => name X
: EndIfBlank: => name 만 있음
=DIRECTIVE ( .~ ) : 어셈블러에게 전달
: .NOLIST
: .386 ; 이 프로그램 실행은 최소 386이상 프로세서에서 동작
: .MODEL FLAT ; 메모리 영역구분없이 나열 되어있다(<->SEGMENT)
=함수
: ExitProcess PROTO NEAR32 stdcall, dwExitCode:DWORD (정리 후 종료됨 : 반드시 사용(초보자))
= INCLUDE
: INCLUDE io.h ;#include <io.h>
=16진수
: 0~h ; 0x0~
=컴파일러 설치
80x86 assembly.zip 압축풀기 -> Software -> Setup -> SETUP.EXE 실행
-경로 : C:\asm
![](https://t1.daumcdn.net/cfile/tistory/2451DD3F55D66FD713)
=컴파일
-C:\asm\Software 에 소스파일(main.asm) 생성, 코딩
1. obj 생성
ml /c /coff 소스파일명
![](https://t1.daumcdn.net/cfile/tistory/2244D33F55D66FDC1B)
![](https://t1.daumcdn.net/cfile/tistory/2243443F55D66FDD1C)
=실행파일 생성
link /subsystem:console /entry:start /out:실행파일명 obj파일명 io.obj kernel32.lib
![](https://t1.daumcdn.net/cfile/tistory/273DC83F55D66FE020)
![](https://t1.daumcdn.net/cfile/tistory/2563883F55D66FE209)
=.CODE
1.
.CODE _start: ; entry point output prompt1 ; "io.h"에서 정의된 매크로 함수 => printf 호출 input string, 40 ; => scanf : 문자열 입력(40글자까지) atod string ; 아스키코드문자 => DWORD로 변환 => eax에 저장
|
![](https://t1.daumcdn.net/cfile/tistory/260A294455D66FE417)
2.
mov number1, eax ; (대입연산자 =) : number1 = eax;
output prompt2 input string, 40 atod string
|
![](https://t1.daumcdn.net/cfile/tistory/2208CF4455D66FE618)
3.
mov number2, eax ; number2 = eax;
mov eax, number1 ; eax = number1; add eax, number2 ; eax = eax + number2; // accumulator (ACC) |
![](https://t1.daumcdn.net/cfile/tistory/250B2C4455D66FE716)
<main.asm>
.386 .MODEL FLAT
ExitProcess PROTO NEAR32 stdcall, dwExitCode:DWORD ; 함수
INCLUDE io.h
cr EQU 0dh ; #define cr 0x0d 1byte Lf EQU 0ah ; #define cr 0x0d 1byte
.STACK 4096 ; stack 4096bytes
.DATA ; 전역변수 number1 DWORD ? number2 DWORD ? ; DWORD - 4bytes, ? - 초기화 X
prompt1 BYTE "Enter first number: ",0 ; 문자열 "~"로 초기화, ,0 - null 추가 prompt2 BYTE "Enter secont number: ",0
string BYTE 40 DUP (?) ; 배열 40bytes, 복사(? - 쓰레기 값)
label1 BYTE cr, Lf, "The sum is " sum BYTE 11 DUP (?) BYTE cr, Lf, 0 ; 이름 없이 메모리만 차지 ; 1byte + 1byte + 1byte = 3bytes .CODE _start: ; entry point output prompt1 ; "io.h"에서 정의된 매크로 함수 => printf 호출 input string, 40 ; => scanf : 문자열 입력(40글자까지) atod string ; 아스키코드문자 => DWORD로 변환 => eax에 저장 mov number1, eax ; (대입연산자 =) : number1 = eax;
output prompt2 input string, 40 atod string mov number2, eax ; number2 = eax;
mov eax, number1 ; eax = number1; add eax, number2 ; eax = eax + number2; // accumulator (ACC) dtoa sum, eax ; DWORD => 아스키코드문자로 sum에 저장 output label1 ; 변수명이 주소(위치정보)
INVOKE ExitProcess, 0
PUBLIC _start |
![](https://t1.daumcdn.net/cfile/tistory/211B0E3F55D67B980D)
![](https://t1.daumcdn.net/cfile/tistory/270BDD4455D66FEC15)
-소스코드
<main.asm>
.386 .MODEL FLAT
ExitProcess PROTO NEAR32 stdcall, dwExitCode:DWORD ; 함수
INCLUDE io.h
cr EQU 0dh ; #define cr 0x0d 1byte Lf EQU 0ah ; #define cr 0x0d 1byte
.STACK 4096 ; stack 4096bytes
.DATA ; 전역변수 number1 DWORD ? number2 DWORD ? ; DWORD - 4bytes, ? - 초기화 X
prompt1 BYTE "Enter first number: " ; 문자열 "~"로 초기화, NULL 없음 prompt2 BYTE "Enter secont number: ",0
string BYTE 40 DUP (?) ; 배열 40bytes, 복사(? - 쓰레기 값)
label1 BYTE cr, Lf, "The sum is " sum BYTE 11 DUP (?) BYTE cr, Lf, 0 ; 이름 없이 메모리만 차지 ; 1byte + 1byte + 1byte = 3bytes .CODE _start: ; entry point output prompt1 ; "io.h"에서 정의된 매크로 함수 => printf 호출 input string, 40 ; => scanf : 문자열 입력(40글자까지) atod string ; 아스키코드문자 => DWORD로 변환 => eax에 저장 mov number1, eax ; (대입연산자 =) : number1 = eax;
output prompt2 input string, 40 atod string mov number2, eax ; number2 = eax;
mov eax, number1 ; eax = number1; add eax, number2 ; eax = eax + number2; // accumulator (ACC) dtoa sum, eax ; DWORD => 아스키코드문자로 sum에 저장 output label1 ; 변수명이 주소(위치정보)
INVOKE ExitProcess, 0
PUBLIC _start |
![](https://t1.daumcdn.net/cfile/tistory/2645253F55D67B9B3F)
![](https://t1.daumcdn.net/cfile/tistory/277D793E55D66FF126)
-소스코드