标题:Intel 8086下的查表方法,对表的遍历方法
只看楼主
hlmzrdongdong
Rank: 16Rank: 16Rank: 16Rank: 16
来 自:湖北武汉
等 级:版主
威 望:1
帖 子:99
专家分:145
注 册:2008-10-24
结帖率:100%
 问题点数:0 回复次数:1 
Intel 8086下的查表方法,对表的遍历方法
下面的代码是一个查表程序,通过数值表table2查其对应的table1表内的数据。
下面的程序是查询数值表table2中0ch对应于table1中的数据1eh。
其中有一段很有用的代码即表的遍历方法,摘在下面:

mov si,0h
    mov cx,4h
    cld
c1: lodsb
    cmp al,dl
    jz c2   
    loop c1  
上面的代码通过源变址SI和循环次数寄存器CX,以及方向控制CLD共同来完成表的遍历。

data1 segment     
    table1 db 2h,1eh,3ch,5ah ;段码表   
data2 segment   
    table2 db 0h,0ch,17h,1h  ;查询数值表
data3 segment
    table3 db "Error,try again!....$"
data4 segment
    table4 db "Succeed!....$"
ends


code segment
start:
    mov ax, data2 ;获得数值表table2的段地址
    mov ds,ax     ;代码段寄存器指向table2
    mov dl, 0h   ;查询数为0ch

;遍历数值表,以找出所要查询的数值相对数值表表首的相对地址   
    mov si,0h
    mov cx,4h
    cld
c1: lodsb
    cmp al,dl
    jz c2   ;相等则跳转至c2以查询对应段码
    loop c1  
   
    jmp c3  ;无匹配值着跳转至c3以执行显示错误操作提示

; 根据cx值计算的相对地址作为段码表table1的偏移量加table1表首地址确定相应段码
c2: mov ax,data1 ;获得数值表table2的段地址
    mov ds,ax    ;代码段寄存器指向table2
    mov ax,4h
    sub ax,cx    ; 计算偏移量为3-cx并送bx
    mov bx,ax
    mov cl,[bx]  ;查出相应段码送dl   
    jmp c4

c3: mov ax,data3
    lea dx,table3
    mov ds, ax
    mov es, ax
    jmp c5   

c4: mov ax,data4
    lea dx,table4
    mov ds, ax
    mov es, ax           
   
c5: mov ah, 9
    int 21h      ; output string at ds:dx
   
     ; wait for any key....   
    mov ah, 1
    int 21h
   
    mov ax, 4c00h ; exit to operating system.
    int 21h   

ends                  
end start
收到的鲜花
  • zklhp2008-10-26 08:53 送鲜花  50朵   附言:好文章
搜索更多相关主题的帖子: Intel 遍历 
2008-10-25 22:25
zklhp
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
来 自:china
等 级:贵宾
威 望:254
帖 子:11485
专家分:33241
注 册:2007-7-10
得分:0 
学习了
2008-10-26 09:05



参与讨论请移步原网站贴子:https://bbs.bccn.net/thread-240602-1-1.html




关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.693333 second(s), 8 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved