1. 程式人生 > >介面技術實驗五、查詢實驗

介面技術實驗五、查詢實驗

一、 實驗目的
掌握用匯編語言編寫查詢和排序程式的思路和方法。
二、 實驗原理
查詢與排序是非數值程式設計中兩個重要的技術問題。所謂查詢,就是在大量的資訊量中尋找一個特定的資訊元素。具體地說,就是根據給定的某個值,在表中確定一個關鍵字等於給定值的記錄或資料元素。關鍵字是資料元素或記錄中某個資料項的值,用它可以標識一個數據元素或記錄。排序是計算機程式設計中的另一種重要運算,它的功能是將一個數據元素的無序序列調整成為一個有序序列,以提高查詢的效率。
三、 實驗內容
若要在有序列中,搜尋是否有關鍵字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