xin微机原ç�†ä¸Žæ±‡ç¼–语言程åº�设计 - 百度文库 ÏÂÔØ±¾ÎÄ

inc bx jmp next

exit: mov [bx]£¬al

mov di£¬offset buffer mov al£¬'5' call del

mov si£¬offset buffer call disp ret

main endp

del proc near

cld

loop1: mov ah£¬[di]

cmp ah£¬20h jz exit0 cmp al£¬[di] jz loop2 inc di jmp loop1

loop2: mov al£¬[di+1]

mov [di]£¬al cmp al£¬20h jz exit0 inc di jmp loop2

exit0: ret del endp

disp proc near

disp0: mov dl£¬[si]

mov ah£¬02h int 21h inc si

mov al£¬[si] cmp al£¬20h jnz disp0 ret disp endp code ends

end start

¼üÈë³ÌÐò £¬µ÷ÊÔÔËÐÐ £¬³ÌÐò¼ÓÒÔ×¢ÊÍ¡£

Èôδ³öÏÖÔ¤ÆÚ½á¹û £¬Óà DEBUG ¼ì²éÓзñ´íÎ󣬲¢½« 49

4.ʹÓõݹé×Ó³ÌÐò Çó 1+2+...+(num)! ÒÔÊ®½øÖÆÐÎʽÏÔʾ½á¹û. .386

STACK SEGMENT USE16 STACK DB 2000 DUP(0) STACK ENDS

DATA SEGMENT USE16 NUM DD 100

OUTPUT DB 0DH,0AH,'SUM 0F 1 .. (NUM) IS : ' RESULT DB 16 DUP (' '),'$' DATA ENDS

CODE SEGMENT USE16

ASSUME CS:CODE,DS:DATA,SS:STACK START:

MOV AX, DATA MOV DS, AX MOV EBX, NUM PUSH EBX

CALL SUM_P CALL F2T10 LEA DX, OUTPUT MOV AH, 9 INT 21H EXIT: MOV AH,4CH INT 21H

SUM_P PROC

MOV BP,SP

MOV EBX, [BP+2] cmp EbX, 0 JNZ LP MOV EAX,0 RET 4 LP: DEC EBX PUSH EBX CALL SUM_P INC EBX ADD EAX,EBX RET 4 SUM_P ENDP

; ½« (EAX) ÖеÄÄÚÈÝ£¬×ª»»³É Ê®½øÖÆÊý´®

50

F2T10 PROC

MOV EBX, 10

LEA SI, RESULT+15 L1: MOV EDX, 0 DIV EBX ADD DL,30H MOV [SI],DL DEC SI CMP EAX, 0 JZ F_EXIT JMP L1 F_EXIT: RET F2T10 ENDP

CODE ENDS

END START ʵÑé½á¹û

SUM 0F 1 .. (NUM) IS :5050

¼üÈë³ÌÐò £¬µ÷ÊÔÔËÐÐ £¬ Èôδ³öÏÖÔ¤ÆÚ½á¹û £¬Óà DEBUG ¼ì²éÓзñ´íÎ󣬲¢½«³ÌÐò¼ÓÒÔ×¢ÊÍ¡£

¡¾Ô¤Ï°ÒªÇó¡¿

1£®×ÐϸÔĶÁ¿Î±¾¼°ÏàÓ¦½Ì²Ä¡£

2£®²ÎÕÕ³ÌÐò¿òͼ±àÖÆÔ´³ÌÐò£¬×¼±¸ºÃ¶à×éÔËËãÊý¾Ý£¬ÒÔ¹©Ð£Ñé¡£

¡¾ÊµÑé²½Öè¡¿

1¡¢È·¶¨Ëã·¨£¬»­³ö³ÌÐòÁ÷³Ìͼ¡£ 2¡¢ÀûÓÃÎı¾±à¼­³ÌÐò£¬½¨Á¢Ô´Îļþ¡£

3¡¢ÀûÓûã±à³ÌÐòMASM¶ÔÔ´³ÌÐò»ã±à£¬ÐγÉÄ¿±êÎļþ 4¡¢ÀûÓÃLINK¶ÔÄ¿±êÎļþ½øÐÐÁ´½Ó£¬ÐγɿÉÖ´ÐÐÎļþ¡£ 5¡¢¼üÈë³ÌÐò £¬µ÷ÊÔÔËÐÐ £¬ Èôδ³öÏÖÔ¤ÆÚ½á¹û £¬Óà DEBUG ¼ì²éÓзñ´íÎó ¡£

¡¾Ë¼¿¼Ìâ¡¿

1¡¢¸øÏÂÁгÌÐò¼Ó×¢ÊÍ£¬²¢Ð´³öÔËÐнá¹û DATA SEGMENT

MESS1 DB 'MATCH',0DH,0AH,'$' MESS2 DB 'NO MATCH',0DH,0AH,'$'

MESS3 DB 'INPUT STRING1!',0DH,0AH,'$' MESS4 DB 'INPUT STRING2!',0DH,0AH,'$' MAXLEN1 DB 81

STRING1 DB 81 DUP(?) MAXLEN2 DB 81

STRING2 DB 81 DUP(?)

51

DATA ENDS CODE SEGMENT

ASSUME CS:CODE,DS:DATA,ES:DATA START: MOV AX,DATA MOV DS,AX MOV ES,AX MOV AH,09H

MOV DX,OFFSET MESS3

INT 21H MOV AL,MAXLEN1

MOV BX,OFFSET STRING1

MOV [BX],AL MOV AH,0AH

MOV DX,OFFSET STRING1 INT 21H CRLF

MOV AH,09H

MOV DX,OFFSET MESS4

INT 21H MOV AL,MAXLEN2

MOV BX,OFFSET STRING2 MOV [BX],AL MOV AH,0AH

MOV DX,OFFSET STRING2 INT 21H CRLF CLD

LEA SI,STRING1 MOV CL,[SI+1] MOV CH,0

KKK: LEA DI,STRING2 MOV DL,[DI+1] MOV DH,0

ZJ2: MOV AL,[SI+2] CMP [DI+2],AL

JE ZJ3 ZJ1: INC DI DEC DX

JZ GGG JMP ZJ2 ZJ3: DEC CX

JZ MMM DEC DX

JZ GGG

52