송시혁
2013. 8. 29. 16:11
inc = +1증가 명령어
dec=-1증감 명령어
해당 operland는 한 개. 레지스터16,32를 (ex:eax, ax,...)을 쓸수 있고 변수를 선언하여 메모리로 operland로 사용가능.
inc register16/ register32
// memory byte/word/dword
dec도 inc와 동일하다.
neg 명령어

위의 표와 같이 operland는 한 개. 레지스터와 메모리를 operland로 쓸 수 있으며, neg명령어를 사용하면, 해당문자에
부호(-)를 붙인다. 예를 들어서 eax의 값이 100이라면, neg eax를 수행하면, -100이 된다.
다음그림은 예제 소스, 각각, add와 sub를 이용하여 사칙연산하는 어셈브리어이다.
C언어는 참 간단했었는데 어셈블리는 정말 어려운거라고 실감했다.
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" 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;prompt1의 내용을 화면에 출력한다. input Value, 16;키보드로 부터 입력받는다. 16개까지 가능. atoi Value ;아스키 코드를 정수로 바꾼다. atoi함수에서 'i'는 레지스터가 2byte인 경우 쓴다. mov dx, ax ;ax를 dx에 집어넣는다. 최초의 입력값을 백업의 의미.
output prompt2 input Value, 16 atoi Value add dx, ax;2번째 숫자를 입력받은 뒤에 dx에 백업해두었던 첫번째 숫자와 지금 입력받은 두 번째 숫자인 ax를 더한다. 즉, dx=dx+ax
output prompt3 input Value, 16 atoi Value add ax, ax ;ax와 ax를 더한다. *2의 효과 sub dx, ax;dx와 2를 곱한 ax를 뺀다. 그것을 dx에 넣는다. inc dx dx를 1증가. neg dx dx를 1가미소
itoa Result, dx itoa는 atoi와 마찬가지로 2byte일 때만 사용가능하며, 정수를 아스키로 바꾼다.
output Answer INVOKE ExitProcess, 0 PUBLIC _start
END
.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" 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 prompt3 BYTE "Enter value for z: ", 0 Value BYTE 32 DUP (?) Answer BYTE cr, Lf, "The result is " Result BYTE 6 DUP (?) BYTE cr, Lf, 0 .CODE _start: output prompt1 input Value, 32 atod Value mov edx, eax neg edx output prompt2 input Value, 32 atod Value add edx, eax
dec edx
add edx, edx output prompt3 input Value, 32 atod Value add edx, eax ;add ax, ax ;sub dx, ax ;inc dx ;neg dx
dtoa Result, edx
output Answer INVOKE ExitProcess, 0 PUBLIC _start
END
|