![II.C语言本质_18x86汇编程序基础_3第二个汇编程序_第1页](http://file2.renrendoc.com/fileroot_temp3/2021-4/28/509a2acc-14fc-457f-b123-7bd67929a0d5/509a2acc-14fc-457f-b123-7bd67929a0d51.gif)
![II.C语言本质_18x86汇编程序基础_3第二个汇编程序_第2页](http://file2.renrendoc.com/fileroot_temp3/2021-4/28/509a2acc-14fc-457f-b123-7bd67929a0d5/509a2acc-14fc-457f-b123-7bd67929a0d52.gif)
![II.C语言本质_18x86汇编程序基础_3第二个汇编程序_第3页](http://file2.renrendoc.com/fileroot_temp3/2021-4/28/509a2acc-14fc-457f-b123-7bd67929a0d5/509a2acc-14fc-457f-b123-7bd67929a0d53.gif)
![II.C语言本质_18x86汇编程序基础_3第二个汇编程序_第4页](http://file2.renrendoc.com/fileroot_temp3/2021-4/28/509a2acc-14fc-457f-b123-7bd67929a0d5/509a2acc-14fc-457f-b123-7bd67929a0d54.gif)
下载本文档
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、第18章x86汇编程序基础3.第二个汇编程序例18.2.求一组数的最大值的汇编程序#PURPOSE: This program finds thef maximum number of aiI #set of data items.1i #IbVARIABLES: The registers have| the following uses:Ir r# %edi - Holds the in dex of thedata item being exam ined# %ebx - Largest data item found:# %eax - Current data item! #| # T
2、he followingmemory locationsare used:! #1kI # datatems- con tai nsthe item1i data. A 0 is usedk11 # to termi nate the dataE#.secti on .datadata_items:#These are the data itemso ng3,67,34,222,45,75,54,34,44,33,22,11,66,0.secti on .text.globl _start_start:movl $0, %edi# move 0 intothe in dex registerm
3、ovl data_items(,%edi,4),%eax# load the first byte of datamovl %eax, %ebx# since thisis the first item, %eax is# the biggeststart loop:#start loopcmpl $0, %eax# check tosee if weve hit the endje loop_exitincl %edi# load n extvaluemovl data_items(,%edi,4),%eaxcmpl %ebx, %eax# comparevaluesjle start lo
4、op# jump toloop begi nning if the new# one isntbiggermovl %eax, %ebx# move thef value as the largestijmp start_loop# jump toj loop beginning j loop_exit:i # %ebx is the status code for theI I _;_exit system callj # and it already has the maximumJ movl $1, %eax#1 is the_exit() syscallj int $0 x80汇编、链
5、接、运行:这个程序在一组数中找到一个最大的数,并把它作为程序的退出状态。这组数 在.data段给出:.long指示声明一组数,每个数占32位,相当于C语言中的数组。这个数组开 头定义了一个符号data_items,汇编器会把数组的首地址作为 data_items符号 所代表的地址,data_items类似于C语言中的数组名。data_items这个标号没有用.globl声明,因为它只在这个汇编程序内部使用,链接器不需要用到这个 名字。除了ong之外,常用的数据声明还有:.byte,也是声明一组数,每个数占 8位.ascii ,例如.ascii Hello world,声明11个数,取值为相应字
6、 符的ASCII码。注意,和C语言不同,这样声明的字符串末尾是 没有0字符的,如果需要以0结尾可以声明为.ascii Hello world0。data_items数组的最后一个数是0,我们在一个循环中依次比较每个数,碰到0的时候让循环终止。在这个循环中:*edi寄存器保存数组中的当前位置,每次比较完一个数就把edi的值 加1,指向数组中的下一个数。 ebx寄存器保存到目前为止找到的最大值,如果发现有更大的数就更新ebx的值。 eax寄存器保存当前要比较的数,每次更新edi之后,就把下一个数读到eax中。sta rt:Imovl $0, %edi初始化edi,指向数组的第0个元素I movl
7、data_items(,%edi,4), %eax这条指令把数组的第0个元素传送到eax寄存器中。data_items是数组的首地 址, edi的值是数组的下标,4表示数组的每个元素占4字节,那么数组中第edi 个元素的地址应该是data_items + edi * 4,写在指令中就是data_items(,%edi,4),这种地址表示方式在下一节还会详细解释。movl %eax, %ebxebx的初始值也是数组的第0个元素。下面我们进入一个循环,循环的开头定义 一个符号start_loop ,循环的末尾之后定义一个符号 loop_exit 。比较eax的值是不是0,如果是0就说明到达数组末尾
8、了,就要跳出循环。cmpl 指令将两个操作数相减,但计算结果并不保存,只是根据计算结果改变eflags寄存器中的标志位。如果两个操作数相等,则计算结果为 0, eflags中的ZF位 置1。je是一个条件跳转指令,它检查 eflags中的ZF位,ZF位为1则发生跳 转,ZF位为0则不跳转,继续执行下一条指令。可见比较指令和条件跳转指令 是配合使用的,前者改变标志位,后者根据标志位决定是否跳转。je可以理解成“jump if equal ”,如果参与比较的两数相等则跳转。incl %edimovl data_items(,%edi,4), %eax将edi的值加1,把数组中的下一个数传送到eax寄存器中cmpl %ebx, %eaxj jle start_loop把当前数组元素eax和目前为止找到的最大值ebx做比较,如果前者小于等于后 者,则最大值没有变,跳转到循环开头比较下一个数,否则继续执行下一条指令。 jle 表示“ jump if less than or
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 股东间股权转让协议
- 月嫂家政服务合同
- 广告位租赁的合同
- 设备维护服务合同
- 停车车位租赁合同
- 模具钢材采购合同
- 一儿一女夫妻离婚协议书
- 2025年日照货运从业资格证模拟考试驾考
- 2025年德州货运从业资格证模拟考试下载安装
- 电梯管理方维修方及业主方三方合同(2篇)
- 水土保持方案中沉沙池的布设技术
- 安全生产技术规范 第25部分:城镇天然气经营企业DB50-T 867.25-2021
- 现代企业管理 (全套完整课件)
- 走进本土项目化设计-读《PBL项目化学习设计》有感
- 高中语文日积月累23
- 弹簧分离问题经典题目
- 金属材料与热处理全套ppt课件完整版教程
- 《网店运营与管理》整本书电子教案全套教学教案
- 教师信息技术能力提升培训课件希沃的课件
- 高端公寓住宅项目营销策划方案(项目定位 发展建议)
- 执业兽医师聘用协议(合同)书
评论
0/150
提交评论