如何在数组中搜索一个数字并告诉它在汇编程序中出现了多少次?

How to search inside an array for a number and tell how many times it appears in assembler?

我正在寻求帮助,因为我正在制作一个程序,用户在其中输入数组的大小和数组,然后它会询问一个数字,并且会在数组中搜索该数字,如果该号码是否找到,如果找到它会说它出现了多少次。

.model small

.data 
    
    arreglo1 db ?
    nl equ 0dh, 0ah  
    msj1 db 10,13,"Ingrese el no. de elementos","$"
    msj2 db 10,13,nl,"Ingrese los numeros","$"
    msj3 db 10,13,"Ingrese el numero", "$"
    sizeArreglo db ?
    

.code
    begin proc    
        ;segmentacion de datos
        mov ax, @data
        mov ds, ax   
        ;pregunta por el size del array
        lea dx, msj1
        mov ah, 9
        int 21h
        
        mov ah,1
        int 21h
        mov sizeArreglo, al
        sub sizeArreglo, 30h  ;convierte el input
        
        lea dx, msj2
        mov ah, 9
        int 21h
        
        lea si, arreglo1
        mov ah,1
        mov cl,sizeArreglo   
        ;pide y llena el array con el numero de datos dados por el usuario
        
        
    array_input: 
    
        int 21h
        mov [si],al
                                        
        inc si
        dec cl
        
    jnz array_input
    
        
       ; lea dx, msj3
       ; mov ah, 9
       ;int 21h 
       ;pide el numero que se quiere buscar
    
    
    
    
    terminar_programa:
    mov ah, 4ch
    int 21h

    begin endp
end
    

问题是我不确定如何让它在数组中查找数字并将它出现的次数放入其中。如果有人能向我解释如何做,我将不胜感激。

对于arreglo1 db ?,您只为数组保留一个字节,它应该类似于
arreglo1 db 10 DUP ?(或您的汇编程序喜欢的数组保留语法)。

指令SCAS专门用于在数组中查找字节|字|双字值。

    push ds
    pop es
    lea di,[arreglo1]      ; Initialize ES:DI to point at the 1st byte of array.
    movzx cx,[sizeArreglo] ; Initialize CX with populated size of the array.
    cld                    ; Tell SCASB to scan forward.
    mov al,[elNumero]      ; The digit which you search for.
    repne scasb            ; Compare AL with ES:DI, increment DI, decrement CX.
    jz NumeroFound         ; When AL=[ES:DI-1].
    jnz NumeroNotFound     ; When CX=0 and still not found.