1、Linux汇编——初识汇编

news/2024/7/5 4:19:05

2019独角兽企业重金招聘Python工程师标准>>> hot3.png

前序

    本来想Qt能继续坚持下来,可是绕了一大圈,最终还是选择回到学期伊始的Linux汇编编程上来。鉴于图书馆只能借到这本书,虽然不厚,但是内容还是比较实用丰富,作为入门教程相当不错。以后将不断更新其阅读内容、个人感悟和相关汇编代码。一方面和大家分享,另一方面,也锻炼我写博文的能力和培养记录的良好习惯。为以后工作做铺垫。至于Qt,我想先推推——C++11正在看,所以还是希望有一个比较好的铺垫。基础夯实了,后面的路感觉会好走一些。

正文

第二章 内存详解

    这里的内存就先不详细说了,可以参考其他资料。

    主要说下环境:该书使用32位X86汇编,所以默认一个字=4Bytes

寻址方式

    1、立即数寻址:指令中包含传输的数字,如 :movl  $1, %eax,表示将数“1”存储到寄存器eax中。

    2、寄存器寻址:指令中给出要访问的寄存器号,如:movl $1, %eax,寻找的为eax寄存器

    3、直接寻址: 指令中直接给出内存的段内偏移地址。如 movl $1, 2 表示将数“1”存入内存ds:2中

    4、变址寻址:基址用常数表示,偏移量存储在寄存器中。同时可以固定某个整数作为比例因子(步进)。(数组的遍历)

    5、间接寻址:寄存器中存储要访问的内存偏移量。

    6、基址寻址:寄存器存储基址,一个常数表示偏移量。(访问结构性数据)   

第三章 编写第一个程序

程序1;

#目的:退出程序,向Linux内核返回一个状态码
#输入:无
#输出:想Linux内核返回状态码,程序运行结束后,用shell命令:echo $? 查看返回的状态码
#变量:%eax 系统调用号%ebx 返回状态吗
.section .data 
.section .text
.globl _start
_start: movl $1, %eax #系统调用号movl $0, %ebx #返回操作码int 0x80        #中断调用

如上为汇编程序exit.s,编译程序:    as exit.s -o exit.o

链接程序 :   ld exit.o -o exit

运行程序:./exit

查看返回码:echo $?

知识点:

1、.section .data :“.”表示汇编程序的伪指令,指导编译器的行为。该段为数据段。

2、.section .text:该段为代码段,本段存放需要执行的命令。

3、.globl _start:表示标号_start后面的代码段为全局,其表示为程序的入口。

4、前缀“e”表示32位寄存器,前缀“r”表示64位寄存器,如“rax”

5、通用寄存器有以下几个:%eax, %ebx, %ecx ,%edx, %edi, %esi

        专用寄存器有以下几个:%ebp,%esp,%eip,%eflags

6、当进行系统调用时,%eax存系统调用号,%ebx存向系统返回的状态码,int表示中断,此指令将调用终端程序。

程序2:

#目的:寻找一维数组中最大值
#变量:    %edi——当前数组元素的下表(索引)
#          %ebx——当前最大值
#          %eax——当前数据项
#数据段:data_items:0表示数组结束
.section .datadata_items: .long 3,67,32,222,45,75,54,33,22,11,66.section .text
.globl _start
_start: movl $0, %edi                     #索引值从0开始movl data_items(,%edi,4), %eax    #使用变址寻址法,给出步进长度为4movl %eax, %ebx                   #初始时第一项为最大值start_loop: cmpl $0, %eax    #判断是否到达数组末尾je loop_exit     #到达数组末尾,退出循环,作收尾工作incl %edi            #未到达末尾,索引加1movl data_items(,%edi,4), %eaxcmpl %ebx, %eax    #与当前最大值进行比较jle start_loop     # %eax <= %ebxmovl %eax, %ebx    # %eax > %ebx,则进行交换jmp start_loop
loop_exit:movl $1, %eax      # 1为系统调用exit()的调用号int $0x80          #中断调用

编译:as maximum.s -o maximum.o

链接:ld maximum.o -o maximum

运行:./maximum

查看返回结果:echo $?

知识点

1、data_items中的“.long”表示数据类型,汇编语言中有以下数据类型可供使用:

(1).byte:占1 byte, 范围0~255

(2).int  :占2 byte,范围:0~65535

(3).long :占4 byte, 范围:0~4 294 967 295

(4).ascii:用于将字符输入内存,每个字符占一个byte,如:.ascii "hello world\0",“\0”表示字符串末尾

2、对于数组,可以有如下方式表示:

(1)数组长度作为第一个元素

(2)数组末尾用特殊符号标记

3、注意上面的最大值不能超过255,因为程序的退出状态码最大为255。

4、条件跳转指令:当使用条件跳转指令时,需要使用cmpl指令对两个数进行比较:cmpl a , b。条件跳转指令有:

(1)je :当 a==b时,跳转到目标地址

(2)jg:当 b>a时,则跳转。

(3)jge:当 b >= a时,则跳转

(4)jl : 当 b <a 时,则跳转

(5)jle :当 b<=a时,则跳转

(6)jmp:无条件跳转

5、寻址方式:

(1)索引寻址方式:地址或偏移(%基址寄存器,%索引寄存器,比例因子),

结果地址=地址或偏移+%基址或偏移量寄存器+比例因子 * %索引寄存器

需要注意:地址或偏移量、比例因子必须为常数,其余两个必须为寄存器,若省略任何一项可用0代替。地址和偏移量寄存器可省略,但需加后面的“逗号”。

(2)其他寻址方式参考第二章内容

6、关于指令中数据的字长:

(1)movl表示传输一个“字”的数据,若只想传输一个“字节”,则使用指令movb,

(2)%eax的低字节为%ax,%ax的高一字节为%ah,低一字节为%al。

 













转载于:https://my.oschina.net/u/438386/blog/541802


http://lihuaxi.xjx100.cn/news/258072.html

相关文章

Java 8 中的这个接口真好用!

在开发过程中经常会使用if...else...进行判断抛出异常、分支处理等操作。这些if...else...充斥在代码中严重影响了代码代码的美观&#xff0c;这时我们可以利用Java 8的Function接口来消灭if...else...。if (...){throw new RuntimeException("出现异常了")&#xff…

博士生制毒被抓,只因得不到家人认可,想快速致富...

点击上方“视学算法”&#xff0c;选择加"星标"或“置顶”重磅干货&#xff0c;第一时间送达本文来源&#xff1a;环球时报、天台县公安局等近期&#xff0c;内蒙古通辽市警方成功侦破一起公安部毒品目标案件&#xff0c;捣毁制毒窝点2处&#xff0c;缴获冰毒 407 克…

windows远程桌面如果超出最大连接数, 使用命令行mstsc /console登录即可

远程桌面如果超出最大连接数, 使用命令行mstsc /console登录即可。 &#xff08;也可以用 mstsc /admin&#xff09; 可以在运行里使用mstsc /console /v:IP:远程端口即可强制登录; 如果直接在远程桌面连接端使用就直接输入/console /v:IP:远程端口. 如&#xff1a;mstsc /cons…

lemon的简单使用

lemon概述 lemon是LALR(1)的用于c或c的解析器与生成器&#xff0c;与大名鼎鼎的bison与yacc做类似的工作&#xff0c;但又不是简单复制它们的功能&#xff0c;lemon使用了设计了不同的语法格式来减少编码的错误&#xff0c;lemon还使用了比yacc和bison更快的更复杂的解析引擎&…

为何我的BLOG不能DIY?

今天想把MODULE调整一下&#xff0c;居然搞不定。估计是服务器又出问题了........不知道51CTO有没有备份我们的博克呀&#xff1f;

如何利用神经网络结合遗传算法进行非线性函数极值寻优(2)

如何利用神经网络结合遗传算法进行非线性函数极值寻优

阿里云发布第四代神龙架构云计算首次进入5微秒时延时代

10月20日&#xff0c;2021云栖大会上&#xff0c;阿里云宣布推出第四代神龙架构&#xff0c;这是飞天云操作系统新一代虚拟化技术&#xff0c;首次搭载全球唯一的大规模弹性RDMA加速网络&#xff0c;网络延迟整体降低80%以上。神龙4.0带来的计算架构革新&#xff0c;将云计算首…

王茂霖:特征工程方法总结!

↑↑↑关注后"星标"Datawhale每日干货 & 每月组队学习&#xff0c;不错过Datawhale干货 作者&#xff1a;王茂霖&#xff0c;华中科技大学&#xff0c;Datawhale成员内容概括1.经典特征工程构造2.特征工程案例实践PPT完整下载&#xff1a;后台回复“210501”可获…