免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
最近访问板块 发新帖
查看: 1219 | 回复: 0
打印 上一主题 下一主题

求最大数的汇编 [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2009-07-05 14:05 |只看该作者 |倒序浏览
   这是我的第二个汇编:
[root@bjxdurs235 c-study]# vi maximum.s
.section .data
data_items:
.long 78,23,32,33,11,67,230,0
.section .text
.globl _start
_start:
movl $0 , %edi
movl data_items(,%edi,4) , %eax
movl %eax , %ebx
start_loop:
cmpl $0 , %eax
je exit_loop
incl %edi
movl data_items(,%edi,4) , %eax
cmpl %ebx , %eax
jle start_loop
movl %eax , %ebx
jmp start_loop
exit_loop:
movl $1 , %eax
int $0x80
~                                                                                                                                   
~                                                                                                                                   
~                                                                                                                                   
~                                                                                                                                   
~                                                                                                                                   
~                                                                                                                                   
~                                                                                                                                   
~                                                                                                                                   
~                                                                                                                                   
~                                                                                                                                   
~                                                                                                                                   
~                                                                                                                                   
~                                                                                                                                   
~                                                                                                                                   
"maximum.s" 25L, 357C written                                                                                    
[root@bjxdurs235 c-study]# as maximum.s -o maximum.o
[root@bjxdurs235 c-study]# ld maximum.o -o maximum
[root@bjxdurs235 c-study]# ./maximum
[root@bjxdurs235 c-study]# echo $?
230
   昨天去青年湖游泳了,晚上回来实在太累了,倒头就睡着了,否则昨天就把这个小程序搞明白了,现在来搞(晕,现在来搞这个说法说来是出自yodao的daydayup啊,他经常说这个,弄的我现在也经常说这个啦),
   程序开始在数据段里定义一个long类型的数组,数组中每个元素占用4个字节(32位),其特征是:最后一个元素是0(这很重要,后来的loop循环就是根据这个来判断是否结束循环的)
   在正文的循环体中做了这些:
将第一个数组元素保存在寄存器%ebx中,开始循环比较,如果当前的数组元素比%ebx里的数字小,则continue,否则更新ebx寄存器里的数字,循环的结束条件是当前的元素为0了
   结束循环的时候用到了上一节学到的系统调用_exit,这里图了个巧,将最大的数保存在了ebx中,ebx寄存器正好保存的是_exit系统调用退出的状态码。
   ok,总结一下,这个小汇编比第一个只有8行的汇编入门程序是丰富了一些,最起码里面有了几个小小的逻辑判断,还有循环这样的结构,程序一步步的走下去,我学到的有:
1、汇编长啥样
2、几个简单,估计以后会经常看到的汇编指令,如jmp,cmpl,je,jle等等
3、寄存器的知识扫盲
               
               
               

本文来自ChinaUnix博客,如果查看原文请点:http://blog.chinaunix.net/u/15526/showart_1986116.html
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP