| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 4738 人关注过本帖
标题:有一些问题 在汇编学习中
只看楼主 加入收藏
取名字
Rank: 8Rank: 8
等 级:贵宾
威 望:21
帖 子:236
专家分:924
注 册:2015-4-27
收藏
得分:0 
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
楼主的这段程序,在main子程序中,还存在堆栈不平衡的问题,开始:
push    ds
...
push    ax
...
后面却没有相应的出栈操作,这会导致程序在返回时出错。
2015-06-11 16:56
wmf2014
Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19
等 级:贵宾
威 望:216
帖 子:2039
专家分:11273
注 册:2014-12-6
收藏
得分:0 
回复 11楼 取名字
如果是子程序,出入栈不平衡会导致ret不到正确的地址,程序会执行乱的。

能编个毛线衣吗?
2015-06-11 17:04
快速回复:有一些问题 在汇编学习中
数据加载中...
 
   



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

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