span class=postbody이것은 예전에 어떤분이 부탁해서 작성하게된 예제입니다.
br /
br /
* 문제: 4개의 DIP 스위치 값을 2진수로 읽어 들이고, 이 값에 대응하는 7-세그먼트 코드를 16진수로 출력하는 프로그램을 작성하시오
br /
* 예를들어 , 스위치가 0000으로 되어 있으면 7-세그먼트의 출력 코드는 X100 1000(세그먼트 a-f는 켜지고 g는
꺼진다)이다. 프로그램은 무한히 반복되어 새로운 값이 스위치에 설정되면 이것을 바로 출력하게 한다. 프로그램 개요도와 주석달린
프로그램 리스트를 작성하라
br /
* HINT: 16개의 7-세그먼트 코드로 번역 표를 만들고. 스위치에서 입력되는 2진수를 이 테이블의 인덱스로 이용하라. 명령어 XLAT를 사용하여 7- 세그먼트 출력을 구할수 있다...
br /
br /
/spantable align=center border=0 cellpadding=3 cellspacing=1 width=90%tbodytr tdspan class=genmedb코드:/b/span/td /tr tr td class=code
br /
; 실행하면 Input code: 라는 프롬프트가 뜨며
br /
; 여기에 값을 2진수(!)로 0부터 15까지의 입력을 받게 되며
br /
; Value lt;입력한 문자열gt;, lt;입력한 값을 AX로 변환후 값gt;의 형식으로 표시해주고
br /
; Segment code: lt;결과값gt; 이라고 하여 실제 결과값을 출력 합니다.
br /
br /
; 이 소스의 개선점으로는 범위 밖의 입력에 대한 에러처리가 되어 있지 않습니다.
br /
br /
.386 ; 80x386이상의 머신코드를 생성
br /
br /
nbsp; nbsp; nbsp; nbsp; nbsp; nbsp; nbsp; nbsp; ASSUME CS:CODE, DS:DATA, ES:NOTHING, SS:STACK_AREA
br /
CODEnbsp; nbsp; nbsp; nbsp; nbsp; nbsp; SEGMENT PARA PUBLIC USE16 'CLASS_CODE'
br /
; ===============================================================================
br /
L_STARTUP:
br /
nbsp; nbsp; nbsp; nbsp; nbsp; nbsp; nbsp; nbsp; ; Data segment를 DATA로 초기화
br /
nbsp; nbsp; nbsp; nbsp; nbsp; nbsp; nbsp; nbsp; MOV AX, DATA
br /
nbsp; nbsp; nbsp; nbsp; nbsp; nbsp; nbsp; nbsp; MOV DS, AX
br /
br /
nbsp; nbsp; nbsp; nbsp; nbsp; nbsp; nbsp; nbsp; ; Logo 문자열 출력
br /
nbsp; nbsp; nbsp; nbsp; nbsp; nbsp; nbsp; nbsp; MOV AH, 09H
br /
nbsp; nbsp; nbsp; nbsp; nbsp; nbsp; nbsp; nbsp; MOV DX, OFFSET DATA:D_MSG_LOGO
br /
nbsp; nbsp; nbsp; nbsp; nbsp; nbsp; nbsp; nbsp; INT 21H
br /
nbsp; nbsp; nbsp; nbsp; nbsp; nbsp; nbsp; nbsp; CALL NEAR PTR CODE:P_CRLF
br /
br /
nbsp; nbsp; nbsp; nbsp; nbsp; nbsp; nbsp; nbsp; ; Input code문자열 출력
br /
nbsp; nbsp; nbsp; nbsp; nbsp; nbsp; nbsp; nbsp; MOV AH, 09H
br /
nbsp; nbsp; nbsp; nbsp; nbsp; nbsp; nbsp; nbsp; MOV DX, OFFSET DATA:D_MSG_INPUT
br /
nbsp; nbsp; nbsp; nbsp; nbsp; nbsp; nbsp; nbsp; INT 21H
br /
br /
nbsp; nbsp; nbsp; nbsp; nbsp; nbsp; nbsp; nbsp; ; D_MSG_BUFFER에 문자열을 입력 받음
br /
nbsp; nbsp; nbsp; nbsp; nbsp; nbsp; nbsp; nbsp; MOV AH, 0AH
br /
nbsp; nbsp; nbsp; nbsp; nbsp; nbsp; nbsp; nbsp; MOV BYTE PTR DATA:[D_MSG_BUFFER], 80
br /
nbsp; nbsp; nbsp; nbsp; nbsp; nbsp; nbsp; nbsp; MOV DX, OFFSET DATA:D_MSG_BUFFER
br /
nbsp; nbsp; nbsp; nbsp; nbsp; nbsp; nbsp; nbsp; INT 21H
br /
br /
nbsp; nbsp; nbsp; nbsp; nbsp; nbsp; nbsp; nbsp; ; 입력된 문자열을 AX로 변환하여 저장해줌
br /
nbsp; nbsp; nbsp; nbsp; nbsp; nbsp; nbsp; nbsp; PUSH OFFSET DATA:D_MSG_BUFFER
br /
nbsp; nbsp; nbsp; nbsp; nbsp; nbsp; nbsp; nbsp; CALL NEAR PTR CODE:P_STRTOAX
br /
br /
nbsp; nbsp; nbsp; nbsp; nbsp; nbsp; nbsp; nbsp; PUSH AX ; 세그먼트값 저장nbsp; nbsp; nbsp; nbsp; nbsp; nbsp; lt;---------------
br /
br /
nbsp; nbsp; nbsp; nbsp; nbsp; nbsp; nbsp; nbsp; ; Segment code문자열 출력
br /
nbsp; nbsp; nbsp; nbsp; nbsp; nbsp; nbsp; nbsp; MOV AH, 09H
br /
nbsp; nbsp; nbsp; nbsp; nbsp; nbsp; nbsp; nbsp; MOV DX, OFFSET DATA:D_MSG_SEGMENT
br /
nbsp; nbsp; nbsp; nbsp; nbsp; nbsp; nbsp; nbsp; INT 21H
br /
br /
nbsp; nbsp; nbsp; nbsp; nbsp; nbsp; nbsp; nbsp; POP AX ; 세그먼트값 복원nbsp; nbsp; nbsp; nbsp; nbsp; nbsp; ----------------gt;
br /
br /
nbsp; nbsp; nbsp; nbsp; nbsp; nbsp; nbsp; nbsp; ; 여기에 XLAT를 사용해서 값을 Table에서 값을 찾아서 AL에 넣어줌
br /
nbsp; nbsp; nbsp; nbsp; nbsp; nbsp; nbsp; nbsp; MOV BX, OFFSET DATA:D_TABLE_SEGMENT
br /
nbsp; nbsp; nbsp; nbsp; nbsp; nbsp; nbsp; nbsp; XLAT ; MOV AL, [BX + AL] 과 같은 명령 (Table검색에 용이함)
br /
br /
nbsp; nbsp; nbsp; nbsp; nbsp; nbsp; nbsp; nbsp; ; 우리의 목표인 최종 세그먼트값 출력!
br /
nbsp; nbsp; nbsp; nbsp; nbsp; nbsp; nbsp; nbsp; CALL NEAR PTR CODE:P_PRINT_BIN
br /
br /
nbsp; nbsp; nbsp; nbsp; nbsp; nbsp; nbsp; nbsp; ; 'H'찍고
br /
nbsp; nbsp; nbsp; nbsp; nbsp; nbsp; nbsp; nbsp; MOV AH, 02H
br /
nbsp; nbsp; nbsp; nbsp; nbsp; nbsp; nbsp; nbsp; MOV DL, 'H'
br /
nbsp; nbsp; nbsp; nbsp; nbsp; nbsp; nbsp; nbsp; INT 21H
br /
br /
nbsp; nbsp; nbsp; nbsp; nbsp; nbsp; nbsp; nbsp; ; Bye 메세지 출력
br /
nbsp; nbsp; nbsp; nbsp; nbsp; nbsp; nbsp; nbsp; CALL NEAR PTR P_CRLF
br /
nbsp; nbsp; nbsp; nbsp; nbsp; nbsp; nbsp; nbsp; MOV AH, 09H
br /
nbsp; nbsp; nbsp; nbsp; nbsp; nbsp; nbsp; nbsp; MOV DX, OFFSET DATA:D_MSG_BYE
br /
nbsp; nbsp; nbsp; nbsp; nbsp; nbsp; nbsp; nbsp; INT 21H
br /
br /
nbsp; nbsp; nbsp; nbsp; nbsp; nbsp; nbsp; nbsp; ; Program을 종료
br /
nbsp; nbsp; nbsp; nbsp; nbsp; nbsp; nbsp; nbsp; MOV AX, 4C00H
br /
nbsp; nbsp; nbsp; nbsp; nbsp; nbsp; nbsp; nbsp; INT 21H
br /
br /
nbsp; nbsp; nbsp; nbsp; nbsp; nbsp; nbsp; nbsp; ; 만약 종료하지 못하면 시스템을 정지 (생략해도 상관없음)
br /
nbsp; nbsp; nbsp; nbsp; nbsp; nbsp; nbsp; nbsp; CLI
br /
nbsp; nbsp; nbsp; nbsp; nbsp; nbsp; nbsp; nbsp; HLT
br /
br /
nbsp; nbsp; nbsp; nbsp; nbsp; nbsp; nbsp; nbsp; ; 정지도 안되면 (NMI 발생시) 그냥 루프 (생략해도 상관없음)
br /
nbsp; nbsp; nbsp; nbsp; nbsp; nbsp; nbsp; nbsp; JMP SHORT $
br /
br /
; ===============================================================================
br /
; 개행문자를 출력
br /
P_CRLFnbsp; nbsp; nbsp; nbsp; nbsp; PROC NEAR ; void near pascal P_CRLF(void)
br /
nbsp; nbsp; nbsp; nbsp; nbsp; nbsp; nbsp; nbsp; MOV AH, 09H
br /
nbsp; nbsp; nbsp; nbsp; nbsp; nbsp; nbsp; nbsp; MOV DX, OFFSET DATA:D_MSG_CRLF
br /
nbsp; nbsp; nbsp; nbsp; nbsp; nbsp; nbsp; nbsp; INT 21H
br /
nbsp; nbsp; nbsp; nbsp; nbsp; nbsp; nbsp; nbsp; RETN
br /
P_CRLFnbsp; nbsp; nbsp; nbsp; nbsp; ENDP
br /
br /
; ===============================================================================
br /
P_STRTOAXnbsp; nbsp; nbsp; nbsp;PROC NEAR ; int near pascal P_STRTOAX(const void near *)
br /
nbsp; nbsp; nbsp; nbsp; nbsp; nbsp; nbsp; nbsp; PUSH BP
br /
nbsp; nbsp; nbsp; nbsp; nbsp; nbsp; nbsp; nbsp; MOV BP, SP
br /
br /
nbsp; nbsp; nbsp; nbsp; nbsp; nbsp; nbsp; nbsp; ; 사용될 레지스터 초기화
br /
nbsp; nbsp; nbsp; nbsp; nbsp; nbsp; nbsp; nbsp; XOR AX, AX
br /
nbsp; nbsp; nbsp; nbsp; nbsp; nbsp; nbsp; nbsp; XOR BX, BX
br /
br /
nbsp; nbsp; nbsp; nbsp; nbsp; nbsp; nbsp; nbsp; MOV BX, WORD PTR [BP + 2 + 2] ; 포인터 인자를 가져옴
br /
nbsp; nbsp; nbsp; nbsp; nbsp; nbsp; nbsp; nbsp; MOV CL, BYTE PTR DATA:[BX + 1] ; 입력된 문자열의 길이를 CL에 대입
br /
nbsp; nbsp; nbsp; nbsp; nbsp; nbsp; nbsp; nbsp; ADD BX, 02H ; 실제 문자열이 저장된 Entry로 BX를 이동
br /
br /
L_STRTOAX_0:
br /
nbsp; nbsp; nbsp; nbsp; nbsp; nbsp; nbsp; nbsp; JCXZ L_STRTOAX_1
br /
nbsp; nbsp; nbsp; nbsp; nbsp; nbsp; nbsp; nbsp; DEC CX
br /
nbsp; nbsp; nbsp; nbsp; nbsp; nbsp; nbsp; nbsp; MOV DL, BYTE PTR DATA:[BX] ; [BX]를 DL에 한바이트 꺼냄
br /
nbsp; nbsp; nbsp; nbsp; nbsp; nbsp; nbsp; nbsp; SUB DL, 30H ; 입력된 값은 ASCII이므로 '0'에 해당하는 30H를 빼줌
br /
nbsp; nbsp; nbsp; nbsp; nbsp; nbsp; nbsp; nbsp; SHL DL, CL ; Shift시킴
br /
nbsp; nbsp; nbsp; nbsp; nbsp; nbsp; nbsp; nbsp; ADD AL, DL ; AH는 항상 0으로 예상되고 (범위가 크지 않으므로)
br /
nbsp; nbsp; nbsp; nbsp; nbsp; nbsp; nbsp; nbsp; INC BX ; BX를 하나 증가시켜서 입력된 다음 문자를 가르키게 함nbsp; nbsp; nbsp; nbsp; nbsp; nbsp; nbsp; nbsp;
br /
nbsp; nbsp; nbsp; nbsp; nbsp; nbsp; nbsp; nbsp; JMP SHORT L_STRTOAX_0
br /
L_STRTOAX_1:
br /
br /
nbsp; nbsp; nbsp; nbsp; nbsp; nbsp; nbsp; nbsp; ; DEBUG CODE: 입력된 문자열을 확인하려고...
br /
nbsp; nbsp; nbsp; nbsp; nbsp; nbsp; nbsp; nbsp; PUSH AXnbsp; ; AX값을 저장
br /
nbsp; nbsp; nbsp; nbsp; nbsp; nbsp; nbsp; nbsp; PUSH WORD PTR [BP + 2 + 2]
br /
nbsp; nbsp; nbsp; nbsp; nbsp; nbsp; nbsp; nbsp; CALL P_DEBUG_INPUT
br /
nbsp; nbsp; nbsp; nbsp; nbsp; nbsp; nbsp; nbsp; POP AX ; AX값을 복원
br /
br /
nbsp; nbsp; nbsp; nbsp; nbsp; nbsp; nbsp; nbsp; POP BP
br /
nbsp; nbsp; nbsp; nbsp; nbsp; nbsp; nbsp; nbsp; RETN 2
br /
P_STRTOAXnbsp; nbsp; nbsp; nbsp;ENDP
br /
br /
; ===============================================================================
br /
; 이 함수는 AX값을 문자열로 출력하는이고 초기 BX값을 바꾸면 그에 해당하는 진수표기법으로 바뀜
br /
P_PRINT_BINnbsp; nbsp; nbsp;PROC NEAR ; void near pascal P_PRINT_BIN(AX)
br /
nbsp; nbsp; nbsp; nbsp; nbsp; nbsp; nbsp; nbsp; MOV BX, 16 ; 16진수 출력 (여기를 바꾸면 진수표기법이 바뀜 2는 2진법, 4는 4진법, 8은 8진법, ...)
br /
nbsp; nbsp; nbsp; nbsp; nbsp; nbsp; nbsp; nbsp; XOR CX, CX
br /
L_PRINT_BIN_0:
br /
nbsp; nbsp; nbsp; nbsp; nbsp; nbsp; nbsp; nbsp; XOR DX, DX
br /
nbsp; nbsp; nbsp; nbsp; nbsp; nbsp; nbsp; nbsp; DIV BX
br /
nbsp; nbsp; nbsp; nbsp; nbsp; nbsp; nbsp; nbsp; CMP DX, 10
br /
nbsp; nbsp; nbsp; nbsp; nbsp; nbsp; nbsp; nbsp; JL L_PRINT_BIN_LESS_0
br /
nbsp; nbsp; nbsp; nbsp; nbsp; nbsp; nbsp; nbsp; SUB DX, 10
br /
nbsp; nbsp; nbsp; nbsp; nbsp; nbsp; nbsp; nbsp; ADD DX, 'A'
br /
nbsp; nbsp; nbsp; nbsp; nbsp; nbsp; nbsp; nbsp; JMP L_PRINT_BIN_LESS_1
br /
L_PRINT_BIN_LESS_0:
br /
nbsp; nbsp; nbsp; nbsp; nbsp; nbsp; nbsp; nbsp; ADD DX, '0'
br /
L_PRINT_BIN_LESS_1:
br /
nbsp; nbsp; nbsp; nbsp; nbsp; nbsp; nbsp; nbsp; PUSH DX
br /
nbsp; nbsp; nbsp; nbsp; nbsp; nbsp; nbsp; nbsp; INC CX
br /
nbsp; nbsp; nbsp; nbsp; nbsp; nbsp; nbsp; nbsp; OR AX, AX
br /
nbsp; nbsp; nbsp; nbsp; nbsp; nbsp; nbsp; nbsp; JNZ L_PRINT_BIN_0
br /
br /
;nbsp; nbsp; nbsp; nbsp; nbsp; nbsp; nbsp; nbsp; PUSH CX
br /
;nbsp; nbsp; nbsp; nbsp; nbsp; nbsp; nbsp; nbsp; MOV AX, CX
br /
;nbsp; nbsp; nbsp; nbsp; nbsp; nbsp; nbsp; nbsp; MOV CX, 8
br /
;nbsp; nbsp; nbsp; nbsp; nbsp; nbsp; nbsp; nbsp; SUB CX, AX
br /
;L_PRINT_BIN_ZERO_0:
br /
;nbsp; nbsp; nbsp; nbsp; nbsp; nbsp; nbsp; nbsp; JCXZ L_PRINT_BIN_ZERO_1
br /
;nbsp; nbsp; nbsp; nbsp; nbsp; nbsp; nbsp; nbsp; DEC CX
br /
;nbsp; nbsp; nbsp; nbsp; nbsp; nbsp; nbsp; nbsp; MOV AH, 02H
br /
;nbsp; nbsp; nbsp; nbsp; nbsp; nbsp; nbsp; nbsp; MOV DL, '0'
br /
;nbsp; nbsp; nbsp; nbsp; nbsp; nbsp; nbsp; nbsp; INT 21H
br /
;nbsp; nbsp; nbsp; nbsp; nbsp; nbsp; nbsp; nbsp; JMP SHORT L_PRINT_BIN_ZERO_0
br /
;L_PRINT_BIN_ZERO_1:
br /
;nbsp; nbsp; nbsp; nbsp; nbsp; nbsp; nbsp; nbsp; POP CX
br /
br /
br /
L_PRINT_BIN_1:
br /
nbsp; nbsp; nbsp; nbsp; nbsp; nbsp; nbsp; nbsp; POP DX
br /
nbsp; nbsp; nbsp; nbsp; nbsp; nbsp; nbsp; nbsp; MOV AH, 02H
br /
nbsp; nbsp; nbsp; nbsp; nbsp; nbsp; nbsp; nbsp; INT 21H
br /
nbsp; nbsp; nbsp; nbsp; nbsp; nbsp; nbsp; nbsp; LOOP L_PRINT_BIN_1
br /
nbsp; nbsp; nbsp; nbsp; nbsp; nbsp; nbsp; nbsp; RETN
br /
P_PRINT_BINnbsp; nbsp; nbsp;ENDP
br /
br /
; ===============================================================================
br /
; DEBUG procedure
br /
P_DEBUG_INPUTnbsp; nbsp;PROC NEAR ; void near pascal P_DEBUG_INPUT(const void near *)
br /
nbsp; nbsp; nbsp; nbsp; nbsp; nbsp; nbsp; nbsp; PUSH BP
br /
nbsp; nbsp; nbsp; nbsp; nbsp; nbsp; nbsp; nbsp; MOV BP, SP
br /
br /
nbsp; nbsp; nbsp; nbsp; nbsp; nbsp; nbsp; nbsp; PUSH AX ; 변환된 값을 저장nbsp; nbsp; nbsp; nbsp; nbsp; nbsp; nbsp;lt;------------------
br /
br /
nbsp; nbsp; nbsp; nbsp; nbsp; nbsp; nbsp; nbsp; ; 1개 줄을 넘기고
br /
nbsp; nbsp; nbsp; nbsp; nbsp; nbsp; nbsp; nbsp; CALL NEAR PTR CODE:P_CRLF
br /
br /
nbsp; nbsp; nbsp; nbsp; nbsp; nbsp; nbsp; nbsp; ; Value: 문자열 출력
br /
nbsp; nbsp; nbsp; nbsp; nbsp; nbsp; nbsp; nbsp; MOV AH, 09H
br /
nbsp; nbsp; nbsp; nbsp; nbsp; nbsp; nbsp; nbsp; MOV DX, OFFSET DATA:D_MSG_CONFIRM
br /
nbsp; nbsp; nbsp; nbsp; nbsp; nbsp; nbsp; nbsp; INT 21H
br /
br /
nbsp; nbsp; nbsp; nbsp; nbsp; nbsp; nbsp; nbsp; ; 입력된값 확인을 위해서 출력
br /
nbsp; nbsp; nbsp; nbsp; nbsp; nbsp; nbsp; nbsp; MOV BX, WORD PTR [BP + 2 + 2]
br /
nbsp; nbsp; nbsp; nbsp; nbsp; nbsp; nbsp; nbsp; ADD BL, BYTE PTR DATA:[BX + 1]
br /
nbsp; nbsp; nbsp; nbsp; nbsp; nbsp; nbsp; nbsp; ADC BH, 00H
br /
nbsp; nbsp; nbsp; nbsp; nbsp; nbsp; nbsp; nbsp; MOV BYTE PTR DATA:[BX + 2], '$' ; '$'를 붙이는 것은 문자열의 끝을 알리는것 !
br /
nbsp; nbsp; nbsp; nbsp; nbsp; nbsp; nbsp; nbsp; MOV AH, 09H
br /
nbsp; nbsp; nbsp; nbsp; nbsp; nbsp; nbsp; nbsp; MOV DX, WORD PTR [BP + 2 + 2]
br /
nbsp; nbsp; nbsp; nbsp; nbsp; nbsp; nbsp; nbsp; ADD DX, 02H
br /
nbsp; nbsp; nbsp; nbsp; nbsp; nbsp; nbsp; nbsp; INT 21H
br /
br /
nbsp; nbsp; nbsp; nbsp; nbsp; nbsp; nbsp; nbsp; ; 'B'찍고
br /
nbsp; nbsp; nbsp; nbsp; nbsp; nbsp; nbsp; nbsp; MOV AH, 02H
br /
nbsp; nbsp; nbsp; nbsp; nbsp; nbsp; nbsp; nbsp; MOV DL, 'B'
br /
nbsp; nbsp; nbsp; nbsp; nbsp; nbsp; nbsp; nbsp; INT 21H
br /
br /
nbsp; nbsp; nbsp; nbsp; nbsp; nbsp; nbsp; nbsp; ; ','찍고
br /
nbsp; nbsp; nbsp; nbsp; nbsp; nbsp; nbsp; nbsp; MOV AH, 02H
br /
nbsp; nbsp; nbsp; nbsp; nbsp; nbsp; nbsp; nbsp; MOV DL, ','
br /
nbsp; nbsp; nbsp; nbsp; nbsp; nbsp; nbsp; nbsp; INT 21H
br /
br /
nbsp; nbsp; nbsp; nbsp; nbsp; nbsp; nbsp; nbsp; ; ' '찍고
br /
nbsp; nbsp; nbsp; nbsp; nbsp; nbsp; nbsp; nbsp; MOV AH, 02H
br /
nbsp; nbsp; nbsp; nbsp; nbsp; nbsp; nbsp; nbsp; MOV DL, ' '
br /
nbsp; nbsp; nbsp; nbsp; nbsp; nbsp; nbsp; nbsp; INT 21H
br /
br /
nbsp; nbsp; nbsp; nbsp; nbsp; nbsp; nbsp; nbsp; ; 실제 입력된 값을 변환하여 AX에 저장했던 것을 확인
br /
nbsp; nbsp; nbsp; nbsp; nbsp; nbsp; nbsp; nbsp; POP AX ; 변환된 값을 복원nbsp; nbsp; nbsp; nbsp; nbsp; nbsp; -----------------gt;
br /
nbsp; nbsp; nbsp; nbsp; nbsp; nbsp; nbsp; nbsp; CALL NEAR PTR CODE:P_PRINT_BIN ; AX값 확인
br /
br /
nbsp; nbsp; nbsp; nbsp; nbsp; nbsp; nbsp; nbsp; ; 'H'찍고
br /
nbsp; nbsp; nbsp; nbsp; nbsp; nbsp; nbsp; nbsp; MOV AH, 02H
br /
nbsp; nbsp; nbsp; nbsp; nbsp; nbsp; nbsp; nbsp; MOV DL, 'H'
br /
nbsp; nbsp; nbsp; nbsp; nbsp; nbsp; nbsp; nbsp; INT 21H
br /
br /
nbsp; nbsp; nbsp; nbsp; nbsp; nbsp; nbsp; nbsp; ; 1개 줄을 넘기고
br /
nbsp; nbsp; nbsp; nbsp; nbsp; nbsp; nbsp; nbsp; CALL NEAR PTR CODE:P_CRLF
br /
br /
nbsp; nbsp; nbsp; nbsp; nbsp; nbsp; nbsp; nbsp; POP BP
br /
nbsp; nbsp; nbsp; nbsp; nbsp; nbsp; nbsp; nbsp; RETN 2
br /
P_DEBUG_INPUTnbsp; nbsp;ENDP
br /
br /
CODEnbsp; nbsp; nbsp; nbsp; nbsp; nbsp; ENDS
br /
br /
nbsp; nbsp; nbsp; nbsp; nbsp; nbsp; nbsp; nbsp; ASSUME DS:DATA
br /
DATAnbsp; nbsp; nbsp; nbsp; nbsp; nbsp; SEGMENT PARA PUBLIC USE16 'CLASS_DATA'
br /
D_MSG_LOGOnbsp; nbsp; nbsp; DB BIN to Segment code convert program : Code by JaeHyuk Cho$
br /
D_MSG_INPUTnbsp; nbsp; nbsp;DB Input codenbsp; nbsp;: $
br /
D_MSG_CONFIRMnbsp; nbsp;DB Valuenbsp; nbsp; nbsp; nbsp; : $
br /
D_MSG_SEGMENTnbsp; nbsp;DB Segment code : $
br /
D_MSG_BYEnbsp; nbsp; nbsp; nbsp;DB Byenbsp; nbsp; nbsp; nbsp; nbsp; nbsp; nbsp; nbsp; nbsp; nbsp; ; 최적화를 위해서 반드시 D_MSG_CRLF의 위에 있어야 함.
br /
D_MSG_CRLFnbsp; nbsp; nbsp; DB 0DH, 0AH, '$'
br /
D_MSG_BUFFERnbsp; nbsp; DB 80 DUP (?)
br /
br /
COMMENT #
br /
*** 7 segment table ***
br /
! a b c d e f gnbsp;
br /
---------------
br /
0 0 0 0 0 0 0 1
br /
1 1 0 0 1 1 1 1
br /
2 0 0 1 0 0 1 0
br /
3 0 0 0 0 1 1 0
br /
br /
4 1 0 0 1 1 0 0
br /
5 0 1 0 0 1 0 0
br /
6 0 1 0 0 0 0 0
br /
7 0 0 0 1 1 1 1
br /
br /
8 0 0 0 0 0 0 0
br /
9 0 0 0 1 1 0 0
br /
A 0 0 0 1 0 0 0
br /
b 1 1 0 0 0 0 0
br /
br /
C 0 1 1 0 0 0 1
br /
d 1 0 0 0 0 1 0
br /
E 0 1 1 0 0 0 0
br /
F 0 1 1 1 0 0 0
br /
#
br /
br /
D_TABLE_SEGMENT DB 01000000b, 01111001b, 00100100b, 00110000b
br /
nbsp; nbsp; nbsp; nbsp; nbsp; nbsp; nbsp; nbsp; DB 00011001b, 00010010b, 00000010b, 01111000b
br /
nbsp; nbsp; nbsp; nbsp; nbsp; nbsp; nbsp; nbsp; DB 00000000b, 00011000b, 00001000b, 00000011b
br /
nbsp; nbsp; nbsp; nbsp; nbsp; nbsp; nbsp; nbsp; DB 01000110b, 00100001b, 00000110b, 00001110b
br /
br /
DATAnbsp; nbsp; nbsp; nbsp; nbsp; nbsp; ENDS
br /
br /
nbsp; nbsp; nbsp; nbsp; nbsp; nbsp; nbsp; nbsp; ASSUME SS:STACK_AREA
br /
STACK_AREAnbsp; nbsp; nbsp; SEGMENT PARA STACK USE16 'CLASS_STACK'
br /
nbsp; nbsp; nbsp; nbsp; nbsp; nbsp; nbsp; nbsp; DB 1024 DUP (?)
br /
STACK_AREAnbsp; nbsp; nbsp; ENDS
br /
nbsp; nbsp; nbsp; nbsp; nbsp; nbsp; nbsp; nbsp; END L_STARTUP
br /
br /
; End of source
/td/tr/tbody/table
받은 트랙백이 없고,
댓글이 없습니다.

글
댓글을 달아 주세요
댓글 RSS 주소 : http://blog.minzkn.com/rss/comment/33댓글 ATOM 주소 : http://blog.minzkn.com/atom/comment/33