在附加数据段落中有一首址为ADDR的无序字数组,数据的第一个为字数组长充,第二个字开始存放数组各元素。在KEY单元存放一要删除的字数据。要求编一程序,在数组中查找该数,如果找到该数,将其中数组中删除,并修改数组长度。
源码:
EXTRA SEGMENT
ADDR DW 0AH,2221H,2323H,5312H,2414H,2624H,2142H,1124H,1556H,1232H,2675H
KEY = 214dH
COUNT DW 2
BUF1 DB 'NOT FOUND$'
EXTRA ENDS
STACK SEGMENT
DB 200 DUP (0)
STACK ENDS
CODE SEGMENT
ASSUME DS:EXTRA,SS:STACK,CS:CODE
START: MOV AX,EXTRA
MOV DS,AX
LEA SI,ADDR
MOV CX,[SI]
MOV BX,COUNT
LOOPA: CMP WORD PTR [BX+SI],KEY
JE LOOPB
INC BX
INC BX
DEC CX
JNE LOOPA
JMP EXIT1
LOOPB: MOV AX,WORD PTR [SI]
MOV DX,BX
SHR DX,1
SUB AX,DX
LOOPC: CMP AX,0
JE LOOPD
MOV DX,[BX+2+SI]
MOV [BX+SI],DX
INC BX
INC BX
DEC AX
JMP LOOPC
LOOPD: AND WORD PTR 20[SI],0
EXIT1: CMP CX,0
JZ FLAG
DEC WORD PTR [SI]
JMP EXIT
FLAG: LEA DX,BUF1
MOV AH,9
INT 21
EXIT: MOV AH,4CH
INT 21H
CODE ENDS
END START
水平有限,现在还不知道怎么样调用DOS系统功能释放内存,删除后只能用后面的数据覆盖被删除的数,再将最后一位清零。。。。哪果哪位会释放内存的话,请指点。。。