윤성민의 홈페이지 와!
   
나의 소개
 
This property was reserved by

superyoon
on
28th Apr 1999

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
 

동서울대학


Email me at:
[email protected]

This page has been visited times.