查找一行中的最大连续数字

时间:2014-09-13 15:39:06

标签: assembly masm

我的代码有些问题。我需要计算一行中连续数字的数量。我使用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 “

但我的代码不起作用。有人可以帮帮我吗?错误在哪里?

1 个答案:

答案 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