1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56
| STACKS SEGMENT STACK DW 100H DUP(?) TOP LABEL WORD STACKS ENDS --定义栈
DATAS SEGMENT LINK DW 10,1,2,3,4,5,6,0FFFFh,8,9,0FFFFh BUFF DW 11 DUP(?) DATAS ENDS --定义变量
CODES SEGMENT ASSUME CS:CODE,SS:STACKS,DS:DATAS MAIN PROC FAR
MOV AX,STACKS MOV SS,AX LEA SP,TOP MOV AX,DATAS MOV DS,AX
MOV BX,0 --BX用于记录BUFF的长度 LEA SI,LINK --将LINK的首地址传到SI MOV CX,[SI] --将LINK字符串的长度传入CX LEA DI,BUFF+2 --将BUFF串的第二个位置地址传给DI,第一位用来存长度,因为是DW,所以要加2 L1: ADD SI,2 --指向LINK中的存的元素 MOV AX,[SI] --将元素存入AX中 MOV [SI],0 --将该元素变为零,之后会存入新的元素作为替代 CMP AX,0FFFFH --和0FFFFH比较,如果不相同则跳转至CUN JNZ CUN LOOP L1 --循环L1 JMP FUZHI CUN: MOV [DI],AX --将LINK中不与0FFFFH相同的值存入BUFF ADD DI,2 --地址加2 INC BX --BX用于记录其长度 LOOP L1 FUZHI: --将BUFF中的元素存入LINK达到题目的目的 LEA SI,BUFF MOV [SI],BX LEA DI,LINK MOV CX,BX L2: ADD SI,2 ADD DI,2 MOV AX,[SI] MOV [DI],AX LOOP L2
EXIT: MOV AH,4CH INT 21H
MAIN ENDP CODES ENDS END MAIN
|