嘿伙计们我正在尝试学习汇编,我现在正在解决这个问题,所以我试图获取字符串中每个字符的数字。
例如,如果我输入“hi”,它应该输出: A0 B0 .. H1 I1 .. Z0
但我会得到随机字符,我会给予任何帮助。
data segment
msg1 db 10,13,': $'
msg3 db 10,13,' $'
msg4 db 10,13,'no, character found in the given string $'
msg5 db ' character(s) found in the given string $'
char db 97
count db 0
p1 label byte
m1 db 0ffh
l1 db ?
auxsi db 0
p11 db 0ffh dup ('$')
data ends
display macro msg
mov ah,9
lea dx,msg
int 21h
endm
code segment
assume cs:code,ds:data
start:
mov ax,data
mov ds,ax
display msg1
lea dx,p1
mov ah,0ah
int 21h
lea si,p11
mov cl,l1
mov ch,0
check:
mov al,[si]
cmp char,al
jne skip
inc count
skip:
inc si
loop check
cmp count,0
je notfound
display msg3
mov ah,02h
mov dl,char
int 21h
mov dl,count
add dl,30h
mov ah,2
int 21h
inc char
mov count,0
cmp char,123
jne check
jmp exit
notfound:
display msg4
exit: mov ah,4ch
int 21h
code ends
end
start
答案 0 :(得分:0)
对于初学者来说,它永远不会打印零,因为您已明确检查代码中没有这样做。这甚至是你自己的代码吗?此外,非常检查将在第一个不存在的字符处停止,因此如果您的字符串不以a
开头,它将立即停止。此外,在打印计数后,您将循环回check
,但不会重新加载cx
或si
,因此它将在缓冲区后继续。最后,缓冲区中明显未使用的auxsi
标签将使代码跳过输入的第一个字符。
学习使用调试器并对代码进行注释,尤其是在您希望其他人提供帮助的情况下。