📜  线性搜索的8085程序|套装2(1)

📅  最后修改于: 2023-12-03 15:41:14.346000             🧑  作者: Mango

线性搜索的8085程序|套装2

这是一个使用8085汇编语言编写的线性搜索程序,可以在一段连续的数据中搜索指定的数据,并返回它在数组中的索引位置。

程序介绍

该程序通过循环从数据的开头开始搜索,每次比较当前位置的数据是否与要查找的值相等。如果找到了匹配的数据,程序将通过跳转到指定的地址来返回找到的索引位置。如果没有找到数据,则程序将在结束时跳转到指定的地址。

以下是该程序的流程图。

START
|
|--- Load starting address of data block
|--- Load size of data block
|--- Load search value
|
|--- Loop through the data block
|     |
|     |--- Compare current value with search value
|     |--- If found, jump to  FOUND
|     |--- If end of data block, jump to NOT_FOUND
|     |--- Increment current address
|     |--- Jump back to Loop through data block
|
|--- RETURN
|
|--- FOUND: Set the index of the found value in HL register pair
|--- RETURN
|
|--- NOT_FOUND: Set HL to 0xFFFF
|--- RETURN
程序功能

该程序能够搜索任意长度的数据块中的数据,并返回匹配值的索引位置。如果未找到匹配值,则将返回0xFFFF(-1)。

程序实现

该程序使用了8085汇编语言的基本语法和指令,并且将数据和指令存储在内存中。该程序的伪代码如下所示。

; Starting address of data block
DATA_ADDR equ D000H

; Size of data block
DATA_SIZE equ 16

; Search value
SEARCH_VALUE equ 99

; Starting address of search loop
SEARCH_START equ D100H

; Found value jump address
FOUND_ADDR equ F000H

; Not found jump address
NOT_FOUND_ADDR equ F100H

main:
    ; Load starting address of data block
    lxi h, DATA_ADDR
    ; Load size of data block
    mvi c, DATA_SIZE
    ; Load search value
    mvi a, SEARCH_VALUE

search_loop:
    ; Load current value
    mov e, m
    ; Compare current value with search value
    cmp a
    ; If found, jump to found
    jz found
    ; If end of data block, jump to not found
    jnc not_found
    ; Increment current address
    inx h
    ; Jump back to search_loop
    jmp search_loop

found:
    ; Calculate index of found value
    mov d, h
    sub DATA_ADDR
    ; Store index in HL
    shld FOUND_ADDR
    ; Jump to return
    jmp return

not_found:
    ; Set HL to 0xFFFF
    mvi h, FFH
    mvi l, FFH
    ; Jump to return
    jmp return

return:
    ; Halt
    hlt

在伪代码中,首先定义了数据块的起始地址和大小以及要搜索的数据。然后程序使用lxi指令将当前地址设置为数据块的起始地址,并使用mvi指令将数据块的大小和要搜索的数据加载到C和A寄存器中。

接下来,程序进入循环,使用mov指令将当前地址处的数据加载到E寄存器中,使用cmp指令将E寄存器中的值与要搜索的值进行比较。如果相等,则说明已经找到数据,并将程序跳转到found地址。如果不相等,则程序检查是否已经搜索了整个数据块。如果是,则程序跳转到not_found地址,否则程序将当前地址递增,并使用jmp指令跳转回循环开头。

found地址,程序使用sub指令计算出找到值的索引,将其存储在HL寄存器对中,并使用jmp指令跳转到return地址。在not_found地址,程序设置HL寄存器对为0xFFFF,并跳转到return地址。在return地址,程序终止执行。

参考链接