汇编的基础题目,因为是新手,都不知道错哪里。。。。

来源:百度知道 编辑:UC知道 时间:2024/07/03 12:55:08
查找str1中‘ab’的组合有多少个,可是我怎么都没有办法输出,请问是怎么回事啊?都搞了一天了,怎么都没个结果。。。。。。

data segment
result db 0
str1 db 'ababababa',0dh,0ah,'$'
data ends
stack segment stack
db 100 dup(0)
stack ends
code segment
Assume cs:code,ds:data,ss:stack ;确认cs、ds、ss指向的逻辑段
start:
cld
mov ax,data ;设置数据短的段地址DS
mov ds,ax
mov dx,0
mov cx, 0bh ;size str1,把长度放到CX
lea SI,str1 ;把string首地址放到SI寄存器中

again:
lodsb
cmp al, 'a'
JZ action
dec cx
jmp next
action :
lodsb
cmp al, 'b'
inc dx ;自加一,用来计数
jz next ;如果'b'相同,返回again继续查找
cmp al,'$'
jz output ;跳出。输出result的值

next: loop again

output:

;add dx, 30h
mov ah, 2
int 21h

mov ax,4c00h
int 21h
code ends
end start
可是我这个程序在调试的

data segment
str1 db 'ababababa',0dh,0ah,'$'
data ends

code segment
Assume cs:code,ds:data ;确认cs、ds指向的逻辑段
start:
cld
mov ax,data ;设置数据段的段地址DS
mov ds,ax
mov dl,0 ;用来计数
mov cx, 0bh ;size str1,把长度放到CX
lea SI,str1 ;把string首地址放到SI寄存器中

again:
lodsb
cmp al,'$'
jz output ;跳出,输出个数

cmp al, 'a'
Jnz next

lodsb
cmp al,'$'
jz output ;跳出,输出个数

cmp al, 'b'
jnz next
inc dl ;如果与'ab'相同,个数加1

next: loop again

output:
add dl,30h
mov ah, 2
int 21h

mov ah,1
int 21h
mov ax,4c00h
int 21h
code ends
end start

这里不对:
cmp al, 'b'
inc dx ;自加一,用来计数
怎么比较完了,也不管结果相不相等就加一了呢?
另外;add dx, 30h为什么要注释掉呢?