在数组中查找并删除数据程序,要求:在数据段定义一个数组,其中存放若干个dw类型数据,从键盘输入一个十进制数,在数组中查找该数据,若未找到,显示“no find!!”,若找到,显示“find!!”,并在数组中删除该数据,将删除数据后的数组在屏幕显示。用8086在DOSBox 中编译
时间: 2024-12-25 15:33:58 浏览: 3
在8086汇编语言环境下编写这样一个程序,需要使用指令如`IN`、`OUT`进行键盘输入输出操作,`LEA`和`MOV`处理内存地址,以及循环结构来遍历数组。以下是简化的步骤和伪代码:
1. 定义数据段(Data Segment):
```
ARRAY DW 10 DUP (?) ; 创建一个存放dw类型数据的数组,假设大小为10个元素
```
2. 输入数据和初始化指针:
```assembly
INVOKE CLI ; 关闭中断,防止意外中断
MOV CX, 10 ; 设置循环计数器为数组长度
MOV DI, OFFSET ARRAY ; DI指向数组的起始地址
; 循环接收用户输入并查找数据
FIND_LOOP:
INVOKE STDIN ; 输入函数
CMP AL, 'Q' ; 用户输入Q退出程序
JE EXIT_PROGRAM
MOV [DI], AX ; 将输入的数据存入数组
ADD DI, 2 ; 指针向后移动两个字节(dw类型占两个字节)
LOOP FIND_LOOP
; 查找指定数值
INPUT_DATA DW ?
INVOKE STDIN ; 获取用户要查找的值
MOV INPUT_DATA, AX
```
3. 查找并删除数据:
```assembly
DELETE_FIND:
CMP [DI], INPUT_DATA ; 比较当前元素与目标值
JNE NOT_FOUND ; 如果不匹配,则跳过
OUT DX, 'find!!' ; 打印"find!!"
MOV [DI], [DI+2] ; 删除元素,将下一个元素替换当前位置
ADD DI, -2 ; 指针回退两个字节
JMP DISPLAY_ARRAY ; 跳到打印数组部分
NOT_FOUND:
OUT DX, 'no find!!' ; 打印"no find!!"
; 删除数据后继续查找剩余元素
JMP DELETE_FIND
; ... (省略其余代码)
```
4. 显示删除数据后的数组:
```assembly
DISPLAY_ARRAY:
OUT DX, 'Array after deletion: '
; 使用循环打印数组,并在遇到空位时不显示
...
EXIT_PROGRAM:
INVOKE STI ; 启用中断
EXIT ; 程序结束
```
请注意,这个示例是一个简化的伪代码表示,实际编译时还需要将其转化为完整的8086汇编代码,并结合具体的中断服务程序(例如INT 21H)来完成输入输出操作。由于篇幅限制,这里并未列出所有细节。在DOSBox中编译8086汇编程序,你需要使用一个支持8086汇编的编译器,比如Turbo Assembler (TASM)。在DOSBox中运行汇编程序,也需要相应的命令行工具。
阅读全文