------------------------ 4장 Basic Instruction -------------------------
inc and dec instructions |
- inc 와 dec 명령어
=> C 언어에서 ++ or -- 와 동일, 7F FF FF FF 가 양수의 가장 큰 수 이므로, 여기서 ++ 을 하면 Overflow 되면서 음수가 되기 때문에 EFLAGS의 SF , OF 가 1이 됨 - neg Instruction => 2의 보수를 취한 것과 같음. |
연산 해보기 예제 소스 |
.386 .MODEL FLATExitProcess PROTO NEAR32 stdcall, dwExitCode:DWORD include io.h cr equ 0dh Lf equ 0ah .STACK 4096 .DATA Prompt1 BYTE "This program will evaluate the expression", cr,Lf,Lf BYTE " - (x + y - 2z + 1)", 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 Prompt3 BYTE "Enter value for z: ", 0 Value BYTE 16 DUP (?) Answer BYTE cr,Lf,"The result is " Result BYTE 6 DUP (?) BYTE cr,Lf, 0 .CODE _start: output Prompt1 input Value, 16 atoi Value mov dx,ax output Prompt2 input Value, 16 atoi Value add dx,ax output Prompt3 input Value, 16 atoi Value add ax,ax sub dx,ax itoa Result,dx output Answer INVOKE ExitProcess, 0 PUBLIC _start |
Macros in IO.H |
=> atod 는 아스키를 숫자로 바꿔주는 매크로이며, 바꾼 숫자는 자동으로 EAX 레지스터에 저장이 된다. => atoi 도 마찬가지로 아스키를 숫자로 바꿔주는 매크로이고, atod 와는 크기의 차이가 있다. atod 와 마찬가지로 이 값은 자동으로 AX 레지스터에 저장이 된다. => output 은 Null 을 만나면 종료됨. |
Multiplication Instructions |
||||||||||||||
=> DX 가 변화가 없이 0 이므로 CF, OF 가 0 이다. => 별 특이한 점 없음. => Operand(s) 를 3개 썼을 때, Carry 값은 무시하고 정해준 값의 자리수 만큼만 나온다. 실제로 08F2 * 1000 을 하면 22 F1 50 이 나오는데 22 는 버림
|
'Assembly' 카테고리의 다른 글
2013.09.02_ASM_Convering Instruction (0) | 2013.09.02 |
---|---|
2013.08.29_Division Instructions (0) | 2013.08.29 |
2013.08.27_EFLAGS레지스터의구조 (0) | 2013.08.27 |
2013.08.27_ASM_APPENDIX 활용하기 and 4장 Basic Instruction (0) | 2013.08.27 |
2013.08.26_ASM_Constant, Instruction Operand(s) 해석 (0) | 2013.08.27 |