7 segment 표현 예제

Programming/Assembly 2007/05/05 01:43 장인정신
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
크리에이티브 커먼즈 라이센스
Creative Commons License
2007/05/05 01:43 2007/05/05 01:43
받은 트랙백이 없고, 댓글이 없습니다.

댓글+트랙백 RSS :: http://blog.minzkn.com/rss/response/33

댓글+트랙백 ATOM :: http://blog.minzkn.com/atom/response/33

트랙백 주소 :: http://blog.minzkn.com/trackback/33

트랙백 RSS :: http://blog.minzkn.com/rss/trackback/33

트랙백 ATOM :: http://blog.minzkn.com/atom/trackback/33

댓글을 달아 주세요

댓글 RSS 주소 : http://blog.minzkn.com/rss/comment/33
댓글 ATOM 주소 : http://blog.minzkn.com/atom/comment/33