| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 585 人关注过本帖
标题:一个简单的跳跃表问题 希望有人可以解答(有改动,详见三楼)
取消只看楼主 加入收藏
三达不溜
Rank: 1
等 级:新手上路
帖 子:4
专家分:0
注 册:2011-4-3
结帖率:100%
收藏
已结贴  问题点数:20 回复次数:3 
一个简单的跳跃表问题 希望有人可以解答(有改动,详见三楼)
就是把这几个数归类到几个等级的问题:

data    segment
grade    dw    56,69,84,82,73,88,99,63,100,80
s5    dw    0
s6    dw    0
s7    dw    0
s8    dw    0
s9    dw    0
s10    dw    0

branch    dw    a_1
    dw    a_2
    dw    a_3
    dw    a_4
    dw    a_5
    dw    a_6
data    ends
;************************************************
code    segment

main    proc    far
start:
    push    ds
    sub    ax,ax
    push    ax
    mov    ax,data
    mov    ds,ax

    sub    bx,bx
    sub    si,si
    mov    cx,10
  A:
    mov    ax,60
  B:
    cmp    ax,grade[bx]
    jl    branch[si]            ;错误就在这一行
    add    ax,10
    add    si,2
    jmp    B

    a_1:
    inc    s5
    jmp    short change_addr
    a_2:
    inc    s6
    jmp    short change_addr
    a_3:
    inc    s7
    jmp    short change_addr
    a_4:
    inc    s8
    jmp    short change_addr
    a_5:
    inc    s9
    jmp    short change_addr
    a_6:
    inc    s10

change_addr:
    add    bx,2
    loop    A

    ret

main    endp
code    ends
;************************************************
    end    start
然后在masm5.0编译的时候出现must be associated with code 问题
请问下书上跳跃表法不都是这么用的么,为什么会有这种问题











[ 本帖最后由 三达不溜 于 2011-5-28 23:03 编辑 ]
搜索更多相关主题的帖子: 100 
2011-05-28 22:26
三达不溜
Rank: 1
等 级:新手上路
帖 子:4
专家分:0
注 册:2011-4-3
收藏
得分:0 
data    segment
grade    dw    56,69,84,82,73,88,99,63,100,80
s5    dw    0
s6    dw    0
s7    dw    0
s8    dw    0
s9    dw    0
s10    dw    0

branch    dw    a_1
    dw    a_2
    dw    a_3
    dw    a_4
    dw    a_5
    dw    a_6
data    ends
;************************************************
code    segment
        assume    cs:code,ds:data    ;掉了这一行
main    proc    far
start:
    push    ds
    sub    ax,ax
    push    ax
    mov    ax,data
    mov    ds,ax

    sub    bx,bx
    sub    si,si
    mov    cx,10
  A:
    mov    ax,60
  B:
    cmp    ax,grade[bx]
    jl    branch[si]            ;错误就在这一行
    add    ax,10
    add    si,2
    jmp    B

    a_1:
    inc    s5
    jmp    short change_addr
    a_2:
    inc    s6
    jmp    short change_addr
    a_3:
    inc    s7
    jmp    short change_addr
    a_4:
    inc    s8
    jmp    short change_addr
    a_5:
    inc    s9
    jmp    short change_addr
    a_6:
    inc    s10

change_addr:
    add    bx,2
    loop    A

    ret

main    endp
code    ends
;************************************************
    end    start
哦,不是这样子的 ,版主老师,在机房弄的时候确实是那样,刚拷过来的时候不知道怎么把assume弄掉了
而且我现在用的win7的64位机 ,也没办法去运行了试啊,希望版主谅解

[ 本帖最后由 三达不溜 于 2011-5-28 22:51 编辑 ]
2011-05-28 22:47
三达不溜
Rank: 1
等 级:新手上路
帖 子:4
专家分:0
注 册:2011-4-3
收藏
得分:0 
清华大学的IBM-PC汇编语言程序设计(第二版)第五章5.2.3
2011-05-29 12:36
三达不溜
Rank: 1
等 级:新手上路
帖 子:4
专家分:0
注 册:2011-4-3
收藏
得分:0 
是的 第二版也是用的jmp 但是jmp与jl不仅仅是一个无条件一个有条件的区别么 为什么这里jmp可以的话而jl不行呢
至于那里面是si或者bx的使用应该没有问题吧 因为第二版182页的原句是jmp branch_table[si]
2011-05-29 16:51
快速回复:一个简单的跳跃表问题 希望有人可以解答(有改动,详见三楼)
数据加载中...
 
   



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

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