一、 实验目的
掌握用汇编语言编写查找和排序程序的思路和方法。
二、 实验原理
查找与排序是非数值程序设计中两个重要的技术问题。所谓查找,就是在大量的信息量中寻找一个特定的信息元素。具体地说,就是根据给定的某个值,在表中确定一个关键字等于给定值的记录或数据元素。关键字是数据元素或记录中某个数据项的值,用它可以标识一个数据元素或记录。排序是计算机程序设计中的另一种重要运算,它的功能是将一个数据元素的无序序列调整成为一个有序序列,以提高查找的效率。
三、 实验内容
若要在有序列中,搜索是否有关键字KEY,首先可以与队列中的第一个元素相比较,若KEY小(若有序列是按升序排序,则此列中不会有此关键字;其次可与队列中段最后一个元素相比较,如KEY大,则此列中也不会有此关键字。然后就可以通过逐个比较进行查找。其流程图如图3.1所示。要求在一个有序列-90,-30,00,20,50,600,3000,15000,22000,32000中搜索是否有关键字3000。
程序框图:
请用REPNZ SCASW指令与不用该指令完成程序。
四、 实验报告
1.简述本次实验的内容。
2.画出编程流程图。
3.编写程序并注释。
4.写出自己在调试过程中遇到的难点及如何解决等心得体会。
改天再补一下详细注释,嘿嘿
;用REPNZ SCASW指令
DATAS SEGMENT
DATA1 DW -90,-30,00,20,50,600,3000,15000,22000,32000
DATAS ENDS
CODES SEGMENT
ASSUME CS:CODES,DS:DATAS
START:
MOV AX,DATAS
MOV ES,AX
LEA DI,DATA1
MOV AX,3000 ;要找的数据
MOV CX,20
b:REPNE SCASB
JNE a
a:SHR DI,1
ADD DI,30H
MOV DX,DI
MOV AH,02
INT 21H
MOV AH,4CH
INT 21H
CODES ENDS
END START
;不用REPNZ SCASW指令
DATAS SEGMENT
DATA1 DW -90,-30,00,20,50,600,3000,15000,22000,32000
DATAS ENDS
CODES SEGMENT
ASSUME CS:CODES,DS:DATAS
START:
MOV AX,DATAS
MOV DS,AX
LEA BX,DATA1
MOV BX,OFFSET DATA1
MOV CX,10
MOV AX,3000 ;要找的数据
CMP AX,[BX]
JL DOS
CMP AX,[BX+18]
JG DOS
MOV SI,0
AAAA:CMP AX,[BX+SI]
JE BBB
INC SI
INC SI
LOOP AAAA
JMP NO
BBB:
SHR SI,1
MOV AX,SI
ADD AL,30H
MOV DL,AL
JMP DONE
NO:
MOV AH,02H
MOV DL,'-'
INT 21H
MOV DL,'1'
JMP DONE
DONE:
MOV AH,02H
INT 21H
DOS:MOV AH,4CH
INT 21H
CODES ENDS
END START