| 윤성민의 홈페이지 와! | ||||||||||||||||||||||||
| 나의 소개 | ||||||||||||||||||||||||
|
|
This property was reserved by superyoon I'm 14 years old, from South Korea (Republic Of Korea). | |||||||||||||||||||||||
| 어셈블리 숙제 난 1 | ||||||||||||||||||||||||
|
|
제 6 강 'call pr16bit'의 용법과 라이브러리의 장점을 설명하시오. < call pr16bit의 용법 > pr16bit프로시저는 MYLIB1.LIB에 있다. MYLIB1.LIB파일은 pr16.ASM의 목적 파일을 터보어셈블러의 터보라이브러리(TLIB(TUBO LIB).EXE)를 이용하여 작성하였다. 그러므로 FACTO.ASM을 정상적으로 실행하기 위해서는FACTO.ASM을 어셈블한 후에 (ASM FACTO)이를 링크를 시키되 LIB파일을 물을 때에 MYLIB1.LIB을 입력해 주면 된다. 그러면 FACTO.EXE가 만들어 짐을 알 수 있다. 만일 pr16bit의 프로시저를 다른 프로그램에서도 호출하고 싶다면, 링크를할 때에 MYLIB1.LIB를 라이브러리로 입력하면 된다. * - FACTO.ASM - ;FACTO.ASM CALCULATING FACTORIAL PROGRAM 4의 계승을 구하는 프로그램 CODE SEGMENT PUBLIC ASSUME CS:CODE, DS:DATA, SS:DATA ORG 100H EXTRN PR16BIT:NEAR ;외부참조 프로시저를 선언한다 CODE ENDS ;코드세그먼트의 일부끝 DATA SEGMENT ;데이타 세그먼트의 시작 DATA ENDS ;데이타 세그먼트의 끝 CODE SEGMENT PUBLIC ;코드 세그먼트의 재시작 ASSUME CS:CODE, DS:DATA, SS:DATA ;스택과 데이타를 동일한 이름으로 PUBLIC START: ;시작주소를 설정하고 공용으로 둠 START: ;시작주소 레이블 FACTORIAL PROC NEAR ;계승구하는 프로시저의 선언 MOV AX,1 ;계승을 구하는 준비단계 MOV CX,1 ;카운터 1부터시작 AGAIN: MUL CX ;계승 INC CX ;카운터 증가 4까지 CMP CX,4 ;카운터레지스터 CX와 4와 비교 JLE AGAIN ;4보다 같거나 작으면 AGAIN으로 분기하라 CALL PR16BIT ;PR16BIT를 불러서 AX의 내용을 출력하라 MOV AH,4CH ;종료를 하는 도스인터럽트함수호출 INT 21H ;인터럽트실행 FACTORIAL ENDP ;프로시저의 끝 RET ;프로시저의 복귀 CODE ENDS ;코드세그먼트의 끝 DATA SEGMENT ;또다른 데이타세그먼트 DATA ENDS ;또다른 데이타세그먼트의 끝 END START ;시작주소부터 시작한 코드의 종결 * - PR16.ASM - ;PR16.ASM PUBLIC PR16BIT CODE SEGMENT PUBLIC ASSUME CS:CODE,DS:DATA,SS:DATA PUBLIC _HERE _HERE: PR16BIT proc NEAR push ax ;레지스터를 저장한다 push bx push cx push dx push di ; mov cx,0 ;자리수를 0으로 설정 lea di,DIGIT_BUF+6 mov bx,10 ; 10으로 나누어야 함 DIVALL: mov dx,0 ; 피제수를 0으로 둠 div bx ; AX를 10으로 나눔 or dl,30h ; 나머지를 아스키코드화시킴 dec di mov [di],dl ; 아스키자리수를 설정하여 값을 넣음 inc cx ; 자리수를 증가시킴 or ax,ax ; 몫이 0인가? jnz DIVALL ; 0이 아니면 OK. ; PRT: mov ah,2 ; 숫자문자를 출력하라 mov dl,[di] ; 문자를 버퍼로 부터 얻을 것. int 21h inc di ; 다음 자리수로 가서 반복함 loop PRT pop di ;레지스터를 복원한다. pop dx pop cx pop bx pop ax RET PR16BIT endp CODE ENDS DATA SEGMENT DIGIT_BUF db 6 dup(' ') DATA ENDS END < 라이브러리의 장점 > LIB는 라이브러리를 구축하기 위해서 만들어진 유틸리티이다. 프로그램을 하다보면 자주 쓰이는 서브루틴(SUBROUTINE)이 있기 마련이다. 그러한 루틴을 일일이 프로그램 내에 코딩을 하는 것보다. 라이브러리 에 저장해서, 링크를 할 때에 이를 같이 목적 파일에 연결하여 사용하는 것이 좋다. 어셈블리 프로그램을 라이브러리로 만들기 위해서는 프로그램을 독립적인 프로시저로 만드는 것이 좋다. 만일 프로그램에서 문자열을 출력하고 나서 개행(캐리지 리턴)을 시키고자 한다면, 항상 INT 21H에 함수 번호 9번을 불러야 한다. | |||||||||||||||||||||||
| 어셈블리 숙제 난 2 | ||||||||||||||||||||||||
|
<간단한 매크로 프로그램> | main segment assume cs:main,ds:data mov ax,cs mov ds,ax ; putme macro arg1,arg2,arg3 mov dx,?1 mov ah,?2 int ?3 endm ; putme offset p1,09,21h putme offset p2,09,21h putme offset p3,09,21h mov ah,4ch int 21h main ends data segment p1 db '9514035$' p2 db 'yoon$' p3 db 'soung min$' data ends end
|
Favourite links
|
|
| ||||||||||||||||||||
|
This page has been visited
|