상태 비트의 종류
이름 | 역할 |
SF(Sign Flag) |
|
CF(Carry Flag) |
|
OF(Overflow Flag) |
|
ZF(Zero Flag) |
|
오늘의 명령어
Mnemonic |
Operand |
역할 |
INC(Increase) |
A |
A의 값을 1 증가 |
DEC(Decrease) |
A |
A의 값을 1 감소 |
NEG(Negative) |
A |
A의 값에 2의 보수를 취하여 값을 반전시킴(양수->음수, 음수->양수) |
SHL(Shift Left) | A, B | A의 값을 왼쪽으로 B만큼 쉬프트. (2의 B승 만큼 곱하는 효과) |
SHR(Shift Right) | A, B | A의 값을 오른쪽으로 B만큼 쉬프트. (2의 B승 만큼 나누는 효과) |
MUL(Multiplication) | A, B A | A와 B를 곱해 eax(Accumulator)에 저장. 피연산자가 한개인 경우 eax의 값에 곱한다. 곱셈은 자릿수가 늘어날 수 있기 때문에 용량이 부족할 수 있어 저장시 1*1=2, 2*2=4 등으로 용량이 확장된다. |
연습 문제(Introduction to 80x86 Assembly Language and Computer Architecture pdf 120p)
소스 코드
.386
.MODEL FLAT
ExitProcess PROTO NEAR32 stdcall, dxExitCode:DWORD
INCLUDE io.h
cr EQU 0dh ; 캐리지 리턴
Lf EQU 0ah ; 라인 피드
.STACK 4096
.DATA
Prompt1 BYTE "This program will evaluate the expression", cr, Lf, Lf ; 출력할 문장1 시작
BYTE " 2 ( - x + y - 1 ) + z", cr, Lf, Lf
BYTE "for your choice of integer values.", cr, Lf, Lf
BYTE "Enter value for x : ", 0 ; 여기까지 출력됨
Prompt2 BYTE "Enter value for y : ", 0 ; 출력 문장 2
Prompt3 BYTE "Enter value for z : ", 0 ; 출력 문장 3
Value BYTE 16 DUP( ? ) ; 계산 결과 값
Answer BYTE cr, Lf, "The result is " ; 결과 출력 문장 시작
Result BYTE 6 DUP( ? )
BYTE cr, Lf, 0 ; 결과 출력 문장 끝
.CODE
_start:
output Prompt1 ; 문장 1 출력
input Value, 16 ; x값 입력
atoi Value ; ASCII to Integer
neg ax ; 값 반전(-, 2의 보수)
mov dx, ax ; dx에 반전된 x값을 넣음
output Prompt2 ; 문장 2 출력
input Value, 16 ; y값 입력
atoi Value ; ASCII to Integer
add dx, ax ; dx에 y값을 더함( -x+y )
dec dx ; dx에서 1을 뺌( -x+y-1 )
add dx, dx ; dx에 dx의 값을 더함( 2(-x+y-1) )
output Prompt3 ; 문장 3 출력
input Value, 16 ; z값 입력
atoi Value ; z값을 정수형으로 변환
add dx, ax ; dx에 변환된 z값을 더함( 2(-x+y-1))+z )
itoa Result, dx ; 결과 값이 저장된 dx의 값을 ASCII로 바꾸어 Result에 넣음
output Answer ; Answer 문장 출력, 값도 함께 출력됨.
INVOKE ExitProcess, 0 ; 끝
PUBLIC _start
END
io.h는 어셈블리 컴파일에 필요하고(컴파일만 하여 obj파일로 만들어야함)
io.obi는 링크시 함께 있어야 합니다.
실행 결과
'Programming > Assembly' 카테고리의 다른 글
[Assembly] CPU의 정보를 저장해둔 정보로 바꿔치기 하기(문맥 교환) (0) | 2013.09.24 |
---|---|
[Assembly] C언어의 if 문, switch 문을 어셈블리로 분석해 보기 (2) | 2013.09.04 |
[Assembly] 컴파일 (0) | 2013.08.27 |
PC Assembly Language(Paul A. Carter) - 머리말(Preface) (0) | 2013.08.20 |
[Assembly] C 코드를 어셈블리로 분석해 보기 (0) | 2013.08.20 |