汇编语言程序设计:在附加段中有一数组,数地址为BUFF,数组中第一个字存放了数组的长度。编写程序,在数组中查找0,若找到则将其从数组中删去,后续项向前压缩,其余部分补0.
源程序:
DATA SEGMENT<?xml:namespace prefix = o ns = "urn:schemas-microsoft-com:office:office" />
ST1 DB 50H
BUFF DB ?
DB 50H DUP("0")
DB "$"
DATA ENDS
CODE SEGMENT
MAIN PROC FAR
ASSUME CS:CODE,DS:DATA
START: MOV AX,DATA
MOV DS,AX
MOV AH,0AH
MOV DX,OFFSET ST1
INT 21H ;输入一串数
MOV AH,2
MOV DL,0DH
INT 21H
MOV DL,0AH
INT 21H
MOV CH,"0" ;ch中放"0"作为比较对象
MOV DI,OFFSET BUFF+1
MOV CL,BUFF ;用cl记录尚需处理的位数
MOV BH,0
MOV BL,CL
ADD BL,2
MOV [BX],CH
NEXT1: CMP CL,0 ;cl为0说明所有数据都处理完了
JZ NEXT2
CMP CH,[DI] ;di指向正在处理的数
JNZ NEXT3
CALL MOVES_XC
JMP NEXT6
NEXT3: INC DI ;注意,当0时只让dl减1,而cl不变
NEXT6: DEC CL
JMP NEXT1
NEXT2: MOV AH,9
MOV DX,OFFSET ST1+2
INT 21H
MOV AH,4CH
INT 21H
MAIN ENDP
MOVES_XC PROC
MOV BL,CL
MOV SI,DI
NEXT4: CMP BL,0
JZ NEXT5
MOV BH,[SI+1]
MOV [SI],BH
INC SI
DEC BL
JMP NEXT4
NEXT5: RET
MOVES_XC ENDP
CODE ENDS
END START
说明:
程序需要改进,欢迎留言提供改进方法,不胜感激.