- 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
- 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
Data segment Buffer dw -80, -60,40,79, 100,130 Count equ $-buffer Char dw 79 Ptrn dw ? Data ends Stack segment para stack ‘stack’ db 100 dup(?) Stack ends Code segment assume cs:code ,ds:data Main proc far Begin: push ds mov ax,0 push ax mov ax,data mov ds, ax lea si, buffer mov cx, count shr cx, 1 mov di, si add di, cx mov ax, char conti: mov bx, si add bx, di shr bx, 1 ;取搜索区间的中间地址 cmp ax, [bx] ;将中间值与关键字比较 je found ;相等,则找到关键字 pushf cmp bx, si ;所取中间地址是否与搜索区间上限相等 je nofod ;相等,则证明区间已压至最小,找不到 关键字 popf jl Less ; 关键字小于中间值,下次搜索区间转 至上半个区间 mov si, bx ; 关键字大于中间值,下次搜索区间转 至下半个区间 jmp next Less: mov di, bx next: jmp conti nofod: mov bx, -1 ;找不到,则存入-1 Found: mov ptrn, bx ;找到,则存入关键字的地址。 ret Main endp Code ends end start si di bx si si di bx di 例6:在一个有序列中插入一项。 abcefghijklnopqrs——要求插入d abcdefghijklnopqrs ① 找到应插在何处——对分搜索; ② 所有关键值后面的元素的地址均移高一个项单元 1000 1001 1002 1003 1004 1005 1006 ······· a b c e f g h ······· 1000 1001 1002 1003 1004 1005 1006 1007 ······· a b c e f g h ······· ; ③ 插入 例:设一有序数组ARY,其中存放无符号十六位数。数组首地址为ARY_HEAD,末地址为ARY_END,编程将正数N插入该数组。 DAREA SEGMENT X DW ? ARY_HEAD DW 2,6,8,13,21,30,47,53,66,90 ARY_END DW 125
文档评论(0)