5 장프로시저 (1) 책의라이브러리사용
5 장전반부 : 책의링크라이브러리 외부링크라이브러리개요 라이브러리프로시저호출 라이브러리링크 라이브러리프로시저 예제 연세대학교컴퓨터정보통신어셈블리언어 2
저자제공링크라이브러리 라이브러리파일 어셈블된프로시저를포함하고있는 OBJ 파일들을모아놓은파일 ( 확장자.LIB) 각 OBJ file 에는하나이상의 procedure 가들어있음 LIB 명령어를사용하여 library file 을생성하며 OBJ file 들을 LIB 파일에추가하거나,LIB 파일에서삭제가능 저자제공라이브러리 ( 비표준 ) irvine32.lib 32-bit protected mode용 (make32로어셈블 ) irvine16.lib 16-bit DOS 용 (make16으로어셈블 ) 이라이브러리에서제공하는함수에대한선언은다음파일에포함됨 INCLUDE irvine32.inc ; protected mode INCLUDE irvine16.inc ; real address mode 연세대학교컴퓨터정보통신어셈블리언어 3
라이브러리프로시저호출 프로시저호출 CALL 명령어사용 CALL procname 일부 procedure는 input argument를필요로함 argument는 register 또는 stack을통해서전달 예 : 화면에 1234 를출력 INCLUDE Irvine32.inc main proc mov eax,1234h call WriteHex main endp end main ; input argument ; show hex number ; end of line 연세대학교컴퓨터정보통신어셈블리언어 4
라이브러리에링크하기 사용자프로그램을 library와함께링크하여실행파일생성 link user.obj irvine32.lib kernel32.lib link명령어실행은 make32.bat에포함되어있음 kernel32.lib MS-Windows OS에서제공하는 kernel32.dll과의 bridge역할 Your program links to Irvine32.lib links to can link to kernel32.lib executes kernel32.dll 연세대학교컴퓨터정보통신어셈블리언어 5
교과서의링크라이브러리 Procedure Description Clrscr Clears the console ( 커서는왼쪽상단에위치 ) Crlf Writes CR-LF (new line) Delay Pauses execution for a n msec interval (EAX:delay시간) DumpMem Writes a block of memory to standard output in hex. DumpRegs GetCommandtail GetMaxXY(32) GetMseconds GetTextColor(32) Displays the EAX, EBX, ECX, EDX, ESI, EDI, EBP, ESP, EFLAGS, and EIP registers in hex and flags (CF,SF,ZF,OF) Copies the program s command-line arguments into an array of bytes. (EDX: buffer 주소 ) Get number of cols, rows in console window buffer (DH: 행, DL: 열 ) Returns # of milliseconds that have elapsed since midnight. (EAX: 결과 ) Returns active foreground/background text colors in console. (AL: bgcolor 4 bits fgcolor 4 bits) 연세대학교컴퓨터정보통신어셈블리언어 6
Book's Libraries ( 계속 ) Procedure Gotoxy IsDigit MsgBox MsgBoxAsk ParseDecimal32 Description Locates cursor at row and column on the console. (DL: X 좌표,0-79, DH: Y 좌표,0-24) Sets Zero flag if AL contains ASCII code for decimal digit Display popup message boxes (EBX: caption, EDX, msg) (EAX: 결과 6(yes), 7(no)) Converts unsigned integer string to binary (EDX, ECX) ParseInteger32 Converts signed integer string to binary (EDX, ECX) Random32 Generates a 32-bit pseudorandom integer (EAX: 결과 ) Randomize Seeds the random number generator. (ECX:seed) RandomRange Generates a pseudorandom integer within a specified range (EAX: size입력, 결과 range는 0 to size-1) ReadChar Reads a single character (AL: 결과 ) ReadHex Reads a 32-bit hex integer, terminated by Enter. (EAX: 결과 ) 연세대학교컴퓨터정보통신어셈블리언어 7
Book's Libraries ( 계속 ) Procedure ReadDec ReadInt ReadString Description Reads a 32-bit unsigned/signed decimal integer, terminated by Enter. (EAX: 결과 ) Reads a string, terminated by Enter and insert a null terminator. (EDX: buffer 주소, ECX: buffer 의크기 ) SetTextColor Sets the foreground and background colors of all subsequent text output to the console. (EAX: bgcolor 4 bits fgcolor 4 bits) WaitMsg Displays message, waits for Enter key to be pressed. WriteBin Writes an unsigned 32-bit integer in binary format. (EAX: 정수 ) WriteBinB Writes binary integer in byte/word/doubleword format(ebx: 크기 ) WriteChar Writes a single character. (AL: 문자 ) WriteDec Writes an unsigned 32-bit integer in decimal format. (EAX: 정수 ) WriteHex Writes an unsigned 32-bit integer in hex format. (EAX: 정수 ) WriteInt Writes a signed 32-bit integer in decimal format. (EAX: 정수 ) WriteString Writes a null-terminated string. (EDX: buffer주소 ) 연세대학교컴퓨터정보통신어셈블리언어 8
Example 1 화면을지우고, 500 msec 지연후, 레지스터와플래그출력 출력 main proc call Clrscr mov eax,500 call Delay call DumpRegs main endp end main EAX=00000613 EBX=00000000 ECX=000000FF EDX=00000000 ESI=00000000 EDI=00000100 EBP=0000091E ESP=000000F6 EIP=00401026 EFL=00000286 CF=0 SF=1 ZF=0 OF=0 연세대학교컴퓨터정보통신어셈블리언어 9
Example 2 널종료문자열출력후, 커서를다음줄앞으로이동 1.data str1 BYTE "Assembly language is easy!",0 mov edx,offset str1 call WriteString 2 ; use embedded CR and LF.data str1 BYTE "Assembly language is easy!",0dh,0ah,0 mov edx,offset str1 call WriteString 연세대학교컴퓨터정보통신어셈블리언어 10
Example 3 unsigned integer 를 2 진수, 10 진수, 16 진수로분리된줄에각각출력함 IntVal = 35 mov eax,intval call WriteBin call WriteDec call WriteHex ; display binary ; display decimal ; display hexadecimal 출력 0000 0000 0000 0000 0000 0000 0010 0011 35 23 연세대학교컴퓨터정보통신어셈블리언어 11
Example 4 문자열입력하여버퍼에저장함.data filename BYTE 80 DUP(0) mov edx,offset filename mov ecx,sizeof filename 1 call ReadString ReadString 프로시저는널바이트를입력문자열뒤에자동적으로추가함 연세대학교컴퓨터정보통신어셈블리언어 12
Example 5 0 99 범위에있는 10 개의 random integer 를생성하여출력 eax mov ecx,10 ; loop counter L1: mov eax,100 ; ceiling value call RandomRange ; generate random int call WriteInt ; display signed int ; goto next display line loop L1 ; repeat loop -50 49 범위에있는 10 개의 random integer 를생성하여출력 mov ecx,10 ; loop counter L1: mov eax,100 ; ceiling value call RandomRange ; generate random int sub eax,50 call WriteInt ; display signed int ; goto next display line loop L1 ; repeat loop 연세대학교컴퓨터정보통신어셈블리언어 13
Example 6 파란배경에노란색글씨로널종료문자열을출력 배경색은상위 4 비트 (16 을곱하여표시 ), 전경색 ( 글씨색 ) 은하위 4 비트 ( 그대로사용 ) 에나타냄..data str1 BYTE "Color output is easy!",0 mov eax, yellow + (blue * 16) call SetTextColor mov edx, OFFSET str1 call WriteString 연세대학교컴퓨터정보통신어셈블리언어 14
Example 7 성능타이밍 - 특정부분의소요시간측정 종료시점과시작시점의자정이후경과시간의차이를계산...... call GetMSeconds mov starttime, eax... call GetMSeconds sub eax, starttime ; Elapsed msec mov edx, offset msg call WriteString call WriteDec 연세대학교컴퓨터정보통신 어셈블리언어 15