.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 find the area of a rectangle", cr,Lf, Lf BYTE "Width of rectangle? ", 0 prompt2 BYTE "Length of rectangle? ", 0 prompt3 BYTE "height of rectangle: ", 0 value BYTE 16 DUP (?) answer BYTE cr, Lf, "The area of the rectangle is " area BYTE 11 DUP (?) BYTE cr, Lf, 0 length1 DWORD ? width1 DWORD ? height1 DWORD ? .CODE _start: Prompt: output prompt1 input value, 16 atod value mov length1, eax ;length // 처음 키보드로부터 입력받은 eax(length)를 변수 length1에 백업. output prompt2 input value, 16 atod value mov width1, eax ;width, 두번째 키보드로 부터 입력받은 eax를 width1로 백업 mul length1 ;eax=length*width, 백업해 두었던 length1과 eax를 곱한다. mov ebx, eax ;eax를 ebx에 저장. //ebx=length*widtd의 값을 가지고 있다.
output prompt3 input value, 16 atod value mov height1, eax ;height를 백업 mul length1 ;eax=length*height mov ecx, eax ;eax를 ecx에 대입 add ebx, ecx ;ebx=ebx+ecx mov eax, width1 ; mul height1 add ebx, eax add ebx, ebx
dtoa area, ebx 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 find the area of a rectangle", cr,Lf, Lf BYTE "Width of rectangle? ", 0 prompt2 BYTE "Length of rectangle? ", 0 prompt3 BYTE "height of rectangle: ", 0 value BYTE 16 DUP (?) answer BYTE cr, Lf, "The area of the rectangle is " area BYTE 11 DUP (?) BYTE cr, Lf, 0
.CODE _start: Prompt: output prompt1 input value, 16 atod value mov edx, eax ;length를 먼저 백업한다. output prompt2 input value, 16 atod value mov ecx, eax ;width를 ecx에 백업 mov ebx, edx ;ebx=width ,ebx에 width를 백업 imul edx, eax ;edx=length*width output prompt3 input value, 16 atod value imul ecx, eax ;ecx=length*height, imul명령어를 사용하여 곱한다. add edx, ecx ;edx=edx+eax , edx=(length*width)+(length*height) imul ebx, eax ;eax=height*width, 백업해두었던 ebx와 현재 eax(height값)를 곱한다. add edx, ebx ;최종적으로 edx=(length*width)+(length*height)와 eax=height*width를 더한다. add edx, edx ;그리고 2개를 더한다. 곱하기 2의 효과이다. dtoa area, edx ;정수를 아스키코드로 변환하여 화면에 출력한다. output answer INVOKE ExitProcess, 0 PUBLIC _start
END
| |