数据块移动。将一个连续存储单元的数据移动到另一个连续的存储单元,并找出其中零的个数并显示出来。(注意在编程的时候要确保数据块位置的不确定性)
1 DATA SEGMENT 2 ORG $+20H 3 VA DB '2014001002003004' ;数据块 4 LEN EQU $-VA ;数据块长度 5 V1 DW VA ;源块首址 6 V2 DW VA+1 ;目的块首址 7 DATA ENDS 8 STACK1 SEGMENT STACK 9 DW 20H DUP(0) 10 STACK1 ENDS 11 CODE SEGMENT 12 ASSUME CS:CODE,DS:DATA,SS:STACK1 13 START: MOV AX,DATA 14 MOV DS,AX 15 MOV BL,30H ;设置计数器(计0个数) 16 MOV CX,LEN ;设置计数器(传送条件) 17 MOV SI,V1 ;SI指向源块首址 18 MOV DI,V2 ;DI指向目的块首址 19 CMP SI,DI ;比较两块首址,选择不同传送方式 20 JA J2 21 ADD SI,LEN-1 22 ADD DI,LEN-1 23 J1: MOV AL,[SI] 24 MOV [DI],AL 25 CMP AL,30H 26 JNE J01 27 INC BL 28 J01: DEC SI 29 DEC DI 30 DEC CX 31 JNE J1 32 JMP DONE 33 J2: MOV AL,[SI] 34 MOV [DI],AL 35 CMP AL,30H 36 JNE J02 37 INC BL 38 J02: INC SI 39 INC DI 40 DEC CX 41 JNE J2 42 DONE: MOV AH,2 ;显示0个数 43 MOV DL,BL 44 INT 21H 45 MOV AH,4CH ;return DOS 46 INT 21H 47 CODE ENDS 48 END START
两种传送方式分别对应两种情况。