如何在数组中搜索一个数字并告诉它在汇编程序中出现了多少次?
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.
我正在寻求帮助,因为我正在制作一个程序,用户在其中输入数组的大小和数组,然后它会询问一个数字,并且会在数组中搜索该数字,如果该号码是否找到,如果找到它会说它出现了多少次。
.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.