MOV [DI],20H INC DI CMP CX,0 JNZ DO
HLT
4.18 ´Ó60H¸öÔªËØÖÐѰÕÒÒ»¸ö×î´óµÄÖµ,²¢·Åµ½ALÖУ¬¼ÙÉèÕâ60¸öÔªËØ·ÅÔÚBUF¿ªÊ¼µÄµ¥ÔªÖС£
¡¾´ð¡¿²Î¿¼³ÌÐò£º DATA SEGMENT
BUF DB 0,1,2,3,4,5,6,7,8,9 ; DATA ENDS
STACK SEGMENT
STA DB 20 DUP (?) TOP EQU $- STA STACK ENDS
CODE SEGMENT
ASSUME CS:CODE,DS:DATA,SS:STACK
START: MOV AX,DATA
MOV DS,AX MOV AX,STACK MOV SS,AX MOV AX,TOP MOV SP,AX MOV CX,10 MOV AL,0 LEA BX,BUF
AGAIN: CMP AL,[BX]
JGE NEXT ;´óÓÚµÈÓÚ×ªÒÆ MOV AL,[BX]
NEXT : INC BX
LOOP AGAIN MOV AH,4CH INT 21H
CODE ENDS
END START
4.19 ÅÅÐò³ÌÐòÉè¼Æ: °Ñ±íÖÐÔªËØ°´ÖµµÄ´óСÉýÐòÅÅÁС£ÒªÇóÏÔʾÅÅÐòǰºÍÅÅÐòºóµÄÊý¾Ý¡£ ¡¾´ð¡¿²Î¿¼³ÌÐò£º DATA SEGMENT
TAB DB '8095554'
N=$-TAB
OK DB 0DH,0AH,'OK!$' DATA ENDS
STACK SEGMENT STA DB 20 DUP(?) TOP EQU $-STA STACK ENDS
CODE SEGMENT
ASSUME CS:CODE,DS:DATA,SS:STACK
STAR: MOV AX,DATA
MOV DS,AX ;³õʼ»¯Êý¾Ý¶Î MOV AX,STACK MOV SS,AX MOV AX,TOP MOV SP,AX CALL ARRAY
DO: MOV AH,4CH
INT 21H ;·µ»ØDOS
ARRAY PROC NEAR
PUSH AX PUSH BX PUSH CX PUSH DX MOV DL,N-1 ;ÖÃÍâÑ»·´ÎÊý MOV DH,1 ;ÉèÓн»»»±êÖ¾ XOR BX, BX
UPPER: OR DH,DH ;
JZ DISP ;ÎÞ½»»»,ÒÑÅźÃÐò,Í˳ö MOV DH,0 ;ÎÞ½»»» MOV CX,N-1 SUB CX,BX ;CX=CX-IÄÚÑ»·´ÎÊý MOV SI,0 ;Ö¸Ïò±íÊ×
INNER: MOV AL,TAB[SI] ;×Ö·ûËÍAL
INC SI ;Ö¸Ïòϸö×Ö·û CMP AL,TAB[SI] ;±È½Ï±íÖÐÏàÁÚ×Ö·û JBE DON ;СÓÚ
XCHG AL,TAB[SI] ;·ñÔò½»»»,´ó×Ö·ûÏ MOV TAB[SI-1],AL ;С×Ö·ûÉϸ¡ MOV DH,1 ;Óн»»»,DH=1
DON: LOOP INNER ;ÄÚÑ»·½áÊø?CX-1
INC BX ;Ò»´ÎÄÚÑ»·Íê³É,¼ÓÒ» DEC DL ;ÍâÑ»·´ÎÊý¼õÒ» CMP DL,0 JNZ UPPER ;ÍâÑ»·´ÎÊý·ÇÁã,¼ÌÐø
DISP: MOV DX,OFFSET TAB
MOV AH,09H INT 21H ;ÏÔʾÅźÃÐòµÄ×Ö·û POP DX POP CX POP BX POP AX RET
ARRAY ENDP CODE ENDS
END STAR
4.20 ±àдһ¶Î³ÌÐò£¬½ÓÊÕ´Ó¼üÅÌÊäÈëµÄ10¸öÊý£¬ÊäÈë»Ø³µ·û±íʾ½áÊø£¬È»ºó½«ÕâЩÊý¼ÓÃܺó´æÓÚBUFF»º³åÇøÖС£¼ÓÃܱíΪ£ºÊäÈëÊý×Ö£º 0£¬1£¬2£¬3£¬4£¬5£¬6£¬7£¬8£¬9£»ÃÜÂëÊý×Ö£º7£¬5£¬9£¬1£¬3£¬6£¬8£¬0£¬2£¬4¡£ ¡¾´ð¡¿²Î¿¼³ÌÐò£º DATA SEGMENT
TABLE DB 7£¬5£¬9£¬1£¬3£¬6£¬8£¬0£¬2£¬4;ÃÜÂë±í BUFF DB 10 DUP(?) ,'$'´æ·Åת»»Êý×ֵĻº³åÇø DATA ENDS
STACK SEGMENT
STA DB 20 DUP(?)
TOP EQU LENGTH STA STACK ENDS
CODE SEGMENT
MOV AX,STACK MOV SS,AX
MOV DI , OFFSET BUFF LEA BX , TABLE MOV CX£¬0DH
INPUT: MOV AH , 1 £»´Ó¼üÅÌÊäÈë
INT 21H CMP AL£¬0DH ;0DHΪ»Ø³µ·û JZ DONE
SUB AL,30H XLAT ADD AL,30H MOV [DI] , AL INC DI LOOP INPUT
DONE: MOV DX , OFFSET BUFF
MOV AH , 09H INT 21H MOV AH,4CH INT 21H
CODE ENDS
4.21 ±à³ÌÐò´Ó¼üÅ̽ÓÊÕÒ»¸ö4λ16½øÖÆÊý£¬×ª»»Îª10½øÖÆÊýºó£¬ËÍÏÔʾ¡£
¡¾´ð¡¿Ëã·¨:£¨1£©ÏȽ«ÊäÈëµÄÊ®Áù½øÖÆÊýµÄASCIIÂ룬´¦Àí³É16½øÖÆÊý±£´æµ½BXÖУ¬BXÖеÄÊý·¶Î§ÔÚ+32767~-32768Ö®¼ä£»£¨2£©Ïȼì²éBXÖеķûºÅ룬ÒÔ¾ö¶¨Êä³ö¡°+¡±»¹ÊÇ¡°-¡±£»ÈôÊǸºÊý£¬Ó¦ÏÈÇó²¹£¬µÃµ½ÔÂëºó¼´¿ÉÓëÕýÊý×÷ͳһ´¦Àí¡£×ª»»·½·¨¿ÉÒÔµ÷ÓÃÌâ4.14ÖеÄBINASCII×Ó³ÌÐò¡£
DATA SEGMENT
ADR DB 6 DUP(0),'$' ;Ê®½øÖÆÊýÒÔASCIIÂë´æ´¢ DATA ENDS
STACK SEGMENT
STA DB 20 DUP(0) TOP EQU $- STA STACK ENDS
CODE SEGMENT
ASSUME CS :CODE,DS:DATA,SS:STACK main proc far START: MOV AX,DATA
MOV DS,AX MOV AX,STACK MOV SS,AX MOV AX,TOP MOV SP,AX MOV CX , 4 ;ÊäÈë4´Î MOV DX , CX ;ת»»4´Î MOV BX , 0 ;ÓÃBX±£´æÊäÈëÊý INPUT: MOV AH , 1 ;´Ó¼üÅÌÊäÈë INT 21H
CALL COVERT ;ͨ¹ý×Ó³ÌÐòת»» SHL BX , CL ;×éºÏ³ÉÊ®Áù½øÖÆÊý ADD BL , AL DEC DX JNZ INPUT ;Ñ»·ÊäÈëËĸöÊý MOV AX,BX LEA DI,ADR
CALL BINASCII ;Ê®Áùλ¶þ½øÖÆÊýת»»ÎªÊ®½øÖÆasciiÂë MOV AH,4CH INT 21H ;·µ»ØDOS
main endp
;-------------------------------------------------------------------
;½«ASCIIÂëת»»Îª16½øÖÆ,Èë¿Ú=AL=asciiÂ룬³ö¿ÚAL=16½øÖÆÊý COVERT PROC CMP AL, '9' ;½«ASCIIÂëת»»Îª16½øÖÆ JBE A2 ;¼üÈëÖµ¡Ü'9'£¨'0'-'9'£©Ôò¼õ30H CMP AL, 'a' ;¼üÈëÖµ£¼'a'('A'-'F') Ôò¼õ37H JB A1 SUB AL , 20H ;ÖµÔÚ'a' -'f'ÔòÏȼõ20H,ÔÙ¼õ37H A1: SUB AL, 7
A2: SUB AL ,30H RET
COVERT ENDP
;----------------------------------------------------------------------------
;×Ó³ÌÐòBINASCII¹¦ÄÜ£º½«16λ¶þ½øÖÆÊýת»»ÎªASCIIÂ룬´æÓÚADR¿ªÊ¼µÄÁ¬Ðø6¸öµ¥Ôª£¬²¢ÏÔʾ
;Èë¿Ú²ÎÊý£ºAX=´ýת»»µÄÊý, Ô¤¶¨ÒåÒ»¸ö»º´æÇøADR£¬7¸ö×Ö½Ú£¬×îÄ©×Ö½ÚΪ'$'×Ö·û¡£ ;³ö¿Ú²ÎÊý£ºDI=ת»»ºÃµÄASCIIÂëÊ×µØÖ·£¬ÏÔʾ¸ÃÊ®½øÖÆÊý¾Ý
BINASCII PROC PUSH BX PUSH CX PUSH DX TEST AX,8000H ;ÅжÏÊý¾ÝµÄ·ûºÅ JNS PLUS
MINUS: MOV BYTE PTR[DI],'-' ;½«·ûºÅ´æ´¢
NEG AX ;ÈçÊǸºÊý,È¡Ïà·´ÊýÈ¥µô·ûºÅλ JMP GO
PLUS: MOV BYTE PTR[DI],'+' ;½«·ûºÅÂë´æ´¢
GO: ADD DI,5 ;DIÖ¸Ïò¸öλ
MOV CX,5 MOV BX,10
LP: MOV DX,0
DIV BX ;Ë㷨Ϊa/10 £¬ÓàÊýΪһ¸öµÍλʮ½øÖÆÊý ADD DL,30H ;ת»»ÎªASCIIÂë MOV BYTE PTR[DI],DL ;´Ó¸öλ¿ªÊ¼´æ´¢ DEC DI LOOP LP MOV DX,DI MOV AH,09H INT 21H ;ÏÔʾ POP DX POP CX POP BX RET
BINASCII ENDP
;------------------------------------------------------ CODE ENDS
END START