我的代码有些问题。我需要计算一行中连续数字的数量。我使用masm汇编语言。这是我的代码:
Extrn OutInt:Far
data segment
string db 100 dup ('$')
string2 db 'Input the string!', 0dh,0ah, '$'
string3 db 'Count - $'
data ends
code segment
assume cs:code,ds:data
start:
mov ax, data
mov ds, ax
mov ah,9
lea dx,string2
int 21h
mov ah,0ah
lea dx,string
int 21h
mov ah,9
lea dx,string3
int 21h
mov si,offset A
mov BX,0
mov DX,0
mov CX,100
looperunda:
lodsb
test AL,10000000b
je nosigno
cmp BX,DX
jnb neatral
mov BX,DX
xor DX,DX
jmp neatral
nosigno:
inc DX
neatral:
loop looperunda
mov ax, 16
Call OutInt
code ends
end start
OutInt:
Title OutInt
CodeSg Segment PARA 'Code'
OutInt Proc FAR
Assume CS:CodeSg
Public OutInt
aam
add ax,3030h
mov dl,ah
mov dh,al
mov ah,02
int 21h
mov dl,dh
int 21h
mov ah, 10h
int 16h
mov ax, 4c00h
int 21h
OutInt endp
CodeSg ENDS
END OutInt
程序必须像这样工作: “ 输入字符串!
aa23333c
伯爵 - 4 “
但我的代码不起作用。有人可以帮帮我吗?错误在哪里?
答案 0 :(得分:1)
这可以通过一个简单的循环完成:从字符串中取出每个字符并将其ASCII代码作为数组的索引。使用相应的数组索引计算每个字符的数量,并检查最常用的字符。假设:没有字符出现超过255次,只使用标准ASCII字符。
.data
myString byte "aa23333c", 0
countArray byte 255 DUP(0)
.code
main PROC
mov bx, 0 ;// Exchange bx with eax in this line when using a 32 bit system
mov si, -1
STRING_LOOP:
inc si
movzx ax, BYTE PTR [myString+si]
add BYTE PTR [countArray+ax], 1
cmp BYTE PTR [countArray+ax], bl
jb NEXT_CHAR
mov bl, BYTE PTR [countArray+ax]
mov bh, BYTE PTR [myString+si]
NEXT_CHAR:
and ax, 0FFh
jnz STRING_LOOP
;// character code is now in bh
;// numer of iterations is now in bl
main ENDP
END main