求一段完整的汇编语言程序

已知字符串STR放在数据段中,长度为100,编程查找字符串“ABCDE”在该字符串STR中的位置,第n位输出n,没有找到输出0;将结果输出到显示器中。

调试通过!
DATAS SEGMENT
STR db 'anfasdfABCDEKbMDNFKH',80 dup(0)
m1 db 0dh,0ah,'$'
m2 db 'ABCDE'
num db 0,0,0
DATAS ENDS
CODES SEGMENT
ASSUME CS:CODES,DS:DATAS
START:
MOV AX,DATAS
MOV DS,AX

lea si,STR ;查找 返回cx字符起地址 cx=0没找到
mov cx,100
s1:
lea di,m2
mov bp,0 ;bp为一个dx循环查找失败后dx的循环次数
mov dx,5 ;一个dx循环失败后再由cx减去它
s2: ;使终让cx指向没比较过的字符个数
cmp dx,0 ;如果比较成功cx指向以0开始的字符串的位置
jz s3
mov al,[si]
inc si
cmp al,[di]
jnz s4
inc di
inc bp
dec dx
jmp s2
s3:
mov ax,100
sub ax,cx
mov cx,ax
jmp s5
s4:
sub cx,bp
loop s1
s5:
cmp cx,0 ;判断cx的值 0为没找到
jz s8 ;如果为非零转换为十进制输出
mov ax,cx ;cx里的地址以0开始
xor cx,cx
lea si,num+3
s6: ;每次将余数倒序存入num
mov bl,10
div bl
add ah,30h
mov [si],ah
mov ah,0
dec si
inc cx
cmp al,0
jnz s6

inc si
s7: ;然后依次显示num里的值
mov dl,[si]
inc si
mov ah,2
int 21h
loop s7
jmp s9
s8:
mov dl,30h ;没找到显示0
mov ah,2
int 21h
s9:
mov ah,0 ;等待输入
int 16h

MOV AH,4CH
INT 21H
CODES ENDS
END START
温馨提示:答案为网友推荐,仅供参考
相似回答