| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 4748 人关注过本帖
标题:有一些问题 在汇编学习中
只看楼主 加入收藏
万万切克闹
Rank: 1
等 级:新手上路
帖 子:7
专家分:0
注 册:2015-6-10
结帖率:0
收藏
 问题点数:0 回复次数:11 
有一些问题 在汇编学习中
图片附件: 游客没有浏览图片的权限,请 登录注册
如图所示 我想了好久 也编了一部分程序 但是不成功 求指导
搜索更多相关主题的帖子: 如图所示 
2015-06-10 17:03
hu9jj
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
来 自:红土地
等 级:贵宾
威 望:400
帖 子:11857
专家分:43421
注 册:2006-5-13
收藏
得分:0 
现在真先进,发贴都用不着打字了。

活到老,学到老!http://www.(该域名已经被ISP盗卖了)E-mail:hu-jj@
2015-06-10 18:57
取名字
Rank: 8Rank: 8
等 级:贵宾
威 望:21
帖 子:236
专家分:924
注 册:2015-4-27
收藏
得分:0 
不知道对于楼主的意思理解的对不对,下面是编译成功的程序:
assume  cs:code,ds:data
data    segment
        f1      db      1
        f2      db      2
        fnext   db      8       dup     (?)
        sum     db      ?
        table   dw      4       dup     (?)
data    ends
code    segment
sum_fabonaci    proc
        push    bx
        push    cx

        mov    al,[bx]
        mov    cx,7
s1:
        inc    bx
        add    al,[bx]
        loop    s1
   
        pop    cx
        pop    bx
        ret
sum_fabonaci    endp

fabonaci        proc
        push    si
        push    di
        push    ax
        push    bx
        push    cx

        mov     si,[bx]
        mov     al,[si]
        mov     si,[bx+2]
        mov     ah,[si]
        mov     di,[bx+4]
        mov     [di],al
        mov     [di+1],ah        //以上指令实现将F1,F2的值存入fnext中,方便后面计算fabonaci数列。
        inc     di
        
        mov     cx,6
s:
        mov     al,[di-1]
        add     al,[di]
        mov     [di+1],al        //从s标号到这里实现fabonaci数列。
        inc     di
        loop    s

        pop    cx
        pop    bx
        pop    ax
        pop    di
        pop    si
        ret
fabonaci        endp

start:
        mov     ax,data
        mov     ds,ax
        mov    di,0
        mov     ax,offset f1        
        mov     table[di],ax
        mov     ax,offset f2
        mov     table[di+2],ax
        mov     ax,offset fnext
        mov     table[di+4],ax
        mov     ax,offset sum
        mov     table[di+6],ax                //从start标号到这里目的是将F1,F2,fnext,sum的地址存入table中,也可以不这么麻烦,直接在数据段中将这些地址直接存入table中。
        mov     bx,offset table
        call    fabonaci                      //这里将table的地址赋给bx寄存器,然后作为参数传递给子程序fabonaci。
        mov     bx,offset fnext
        call    sum_fabonaci                 //调用求和子程序,结果由al传回。
        mov     sum,al
        mov     ax,4c00h
        int     21h

code    ends
        end     start
2015-06-10 22:16
万万切克闹
Rank: 1
等 级:新手上路
帖 子:7
专家分:0
注 册:2015-6-10
收藏
得分:0 
回复 3楼 取名字
谢谢 好人 真的很谢谢
2015-06-11 00:08
万万切克闹
Rank: 1
等 级:新手上路
帖 子:7
专家分:0
注 册:2015-6-10
收藏
得分:0 
回复 3楼 取名字
图中有个错误 f2 db 1这样才是fabonaci  数组 其实还有一个要求是 只要求前10项就可以了,并把总和放在sum里 真心谢谢你 。但是 我这样遍老是出错,求指点迷津
data     segment
         f1   db 1
         f2   db 1
         fnext db 8 dup(?)
         sum db ?
         table dw 4 dup(?)
data     ends
code     segment
         assume cs:code,ds:data
main     proc far
         push ds
         sub  ax,ax
         push ax
         mov ax,data
         mov ds,ax
         mov table,offset f1
         mov table+2,offset f2
         mov table+4,offset fnext
         mov table+6,offset sum
         mov bx,offset table
         call ab
        
         ret
main endp
ab      proc  near
        mov si,[bx]
        mov cx,8
        xor ax,ax
        
p1:     mov ax,[si]
        add bx,ax
        add ax,[si+1]
        mov [si+2],ax
        inc si
        loop p1
        add bx,[si+1]
        add bx,[si+2]
        mov sum,offset bx
        
        
      
        ret
ab      endp
code    ends
        end main


[ 本帖最后由 万万切克闹 于 2015-6-11 00:15 编辑 ]
2015-06-11 00:12
万万切克闹
Rank: 1
等 级:新手上路
帖 子:7
专家分:0
注 册:2015-6-10
收藏
得分:0 
回复 2楼 hu9jj
求解答啊   搞了半天了  其中 f2 db 1  这样才是fabonaci数列 求前10项和  就行了
data     segment
         f1   db 1
         f2   db 1
         fnext db 8 dup(?)
         sum db ?
         table dw 4 dup(?)
data     ends
code     segment
         assume cs:code,ds:data
main     proc far
         push ds
         sub  ax,ax
         push ax
         mov ax,data
         mov ds,ax
         mov table,offset f1
         mov table+2,offset f2
         mov table+4,offset fnext
         mov table+6,offset sum
         mov bx,offset table
         call ab
        
         ret
main endp
ab      proc  near
        mov si,[bx]
        mov cx,8
        xor ax,ax
        
p1:     mov ax,[si]
        add bx,ax
        add ax,[si+1]
        mov [si+2],ax
        inc si
        loop p1
        add bx,[si+1]
        add bx,[si+2]
        mov sum,offset bx
        
        
      
        ret
ab      endp
code    ends
        end main这是我写的不过漏洞百出  请指教
2015-06-11 00:17
取名字
Rank: 8Rank: 8
等 级:贵宾
威 望:21
帖 子:236
专家分:924
注 册:2015-4-27
收藏
得分:0 
p1:     mov ax,[si]
        add bx,ax
        add ax,[si+1]
        mov [si+2],ax
        inc si
        loop p1
        add bx,[si+1]
        add bx,[si+2]
        mov sum,offset bx
bx是传递过来的table的地址,在这个程序段中,“add bx,ax”你用bx作累加器,中间漏了值没加,且bx作为参数本身有一个值,所以这里使用bx累加不对。而后“mov sum,offset bx”这条语句使用错误,对于寄存器不存在取地址。
2015-06-11 11:05
取名字
Rank: 8Rank: 8
等 级:贵宾
威 望:21
帖 子:236
专家分:924
注 册:2015-4-27
收藏
得分:0 
补充说明:楼主最好把遇到的问题,出现的错误都描述清楚,这样才能最快得到有效的解答。
2015-06-11 11:08
万万切克闹
Rank: 1
等 级:新手上路
帖 子:7
专家分:0
注 册:2015-6-10
收藏
得分:0 
回复 8楼 取名字
通过地址表传递地址参数的方法求斐波那契数列前十项和的通用子程序 ,并将和放在sum里面。
data segment
f1 db 1 数列第一项为1
f2 db 2  数列第二项为1
fnext db 8 dup (?) 将后8项的值根据斐波那契数列的特点计算并保存在fnext里面
sum db?   将求得的和放在sum里面
table dw 4 dup(?) 地址表
  麻烦大神 给个程序 我参考一下 我搞了一天了 还是错 麻烦了 
2015-06-11 14:47
取名字
Rank: 8Rank: 8
等 级:贵宾
威 望:21
帖 子:236
专家分:924
注 册:2015-4-27
收藏
得分:0 
我前面的程序不是完成你所列的要求了吗?
2015-06-11 14:56
快速回复:有一些问题 在汇编学习中
数据加载中...
 
   



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

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