文档章节

深入理解程序设计使用linux汇编语言--第3章练习题

guonaihong
 guonaihong
发布于 2015/07/05 22:29
字数 555
阅读 219
收藏 14

1.程序中的某一行以字符"#"开始意味着什么?

以字符"#"开头在汇编语言中是注释,汇编程序不会对注释进行任何处理。

2.汇编语言文件和对象代码之间有何区别?

汇编语言文件里的汇编语言是方便人类阅读的机器指令形式。机器不可读,为了将其转换为机器可读需要汇编并链接 程序。对象文件是机器语言写成的代码,机器可读的。

3.链接器有什么作用?

链接器程序把多个目标文件合而为一,并且向其中添加信息,以使内核知道如何加载和运行改目标文件。

4.如何检测你最近运行的程序的结果状态吗?

在shell环境下运行echo $?

5.指令movl $1, %eax 和movl 1, %eax有何区别?

movl $1, %eax是把1加载到寄存器%eax中

movl 1, %eax是把地址1的值加载到寄存器%eax中

6.哪一个寄存器保存系统调用号?

32的寄存器是%eax 64的寄存器是%rax

7.使用索引的目的是什么?

可以使用索引寻址

8.什么索引通常从0开始?

9.条件跳转的作用是什么?

10.编写程序应计划好哪些事?


更改第一个程序使之返回值3

.section .data
.section .text

.global _start

_start:
    movl $1, %eax
    movl $3, %ebx
    int $0x80

更改最大值程序使之返回最小值。

.section .data
data_item:
    .long 2, 5, 8, 10, 7, 4, 3, 0

.section .text

.global _start

_start:

    xorl %edi, %edi
    movl data_item(, %edi, 4), %eax
    movl %eax, %ebx

loop_start:
    cmp $0, %eax
    je loop_exit
    incl %edi

    movl data_item(, %edi, 4), %eax
    cmp %eax, %ebx
    jle loop_start

    cmp $0, %eax
    je loop_exit

    movl %eax, %ebx

    jmp loop_start

loop_exit:
    movl $1, %eax
    int $0x80

更改最大值程序,使之以数字255取代0作为循环终止条件。

.section .data
.equ MY_EOF, 255
data_item:
    .long 2, 5, 8, 10, 7, 4, 3, 255

.section .text

.global _start

_start:

    xorl %edi, %edi
    movl data_item(, %edi, 4), %eax
    movl %eax, %ebx

loop_start:
    cmp $MY_EOF, %eax
    je loop_exit
    incl %edi

    movl data_item(, %edi, 4), %eax
    cmp %eax, %ebx
    jle loop_start

    cmp $MY_EOF, %eax
    je loop_exit

    movl %eax, %ebx

    jmp loop_start

loop_exit:
    movl $1, %eax
    int $0x80


© 著作权归作者所有

guonaihong

guonaihong

粉丝 6
博文 83
码字总数 27591
作品 1
徐汇
程序员
私信 提问
加载中

评论(0)

阅读《深入理解程序设计使用linux汇编语言》

以前有过,对熟悉汇编后的幻想。 如果会汇编,能打印coredmp文件里函数参数(没有用gcc -g 编译)的就好了。。 好吧,现在满足自己的心愿。 开始时间:6,30 结束时间:8,30 状态:closed 第3...

guonaihong
2015/06/30
527
2
业余爱好者的C程序设计学习之路

我学习和工作的方向都是化工,和 IT 专业一点边都不搭,属于程序设计爱好者一类。坚持了很多年了,谈谈我的认识。 一、为什么是C 汇编太难,直接下手会吓死宝宝的。 basic 不能考虑,因为“对...

四彩
2016/02/04
189
2
【计算机类】大学生计算机专业电子书汇总

版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。 https://blog.csdn.net/dengjin20104042056/article/details/95334387 00. 目录 文章目录 本...

沧海一笑-dj
2019/07/10
0
0
2020年,除了《深入理解java虚拟机》,还有哪些java书籍值得一看?

  2020年伊始,很多新粉丝立下了几大目标,其中热门目标之一就是,一年看十本技术书籍,问我有什么推荐,那我就姑且推荐一番,看看除了周志明的《深入理解java虚拟机》之外,还有哪些书籍值...

java进阶架构师
01/01
0
0
收藏|学习Python编程的6本书籍

本文与大家分享一些Python编程语言的入门书籍,其中不乏经典。有关书籍的介绍,大部分截取自官方介绍。 Python基础教程(Begining Python) 《Python基础教程(第2版·修订版)》是经典的Pyt...

诸葛玥
2017/12/28
0
0

没有更多内容

加载失败,请刷新页面

加载更多

11个默克尔树开源项目

Merkle树是一种可以有效验证部分数据存在于指定数据集并且未被篡改的高效的哈希树结构,作为一种底层技术广泛应用在各种区块链的实现当中,对于商品溯源、知识产权确认、区块链公证等区块链应...

区块链教程
6分钟前
29
0
Linux系统运维工程师入门绝招放送

运维是干嘛的?安装服务器系统?重装系统再装系统?背锅的? 我就稀里糊涂的,这样报着必死的决心,考下RHCE认证,走上了Linux运维的道路,成为了一名linux运维工程师。有些心得跟大家分享下...

linuxprobe2020
10分钟前
23
0
开源商城开发笔记4-配置MyBatis生成代码

本项目基于SpringBoot开发,引入的是mybatis-spring-boot 1、引入依赖,包括spring-boot,mybatis,druid,junit,log4j 2.配置MyBatis-Generator插件,使用Maven插件的方式生成代码 3.配置M...

土龙
58分钟前
69
0
Java深拷贝和浅拷贝

对象拷贝有哪些 对象拷贝(Object Copy)就是将一个对象的属性拷贝到另一个有着相同类类型的对象中去。在程序中拷贝对象是很常见的,主要是为了在新的上下文环境中复用对象的部分或全部数据。 ...

Onegoleya
今天
70
0
Android Binder机制 - interface_cast和asBinder讲解

研究Android底层代码时,尤其是Binder跨进程通信时,经常会发现interface_cast和asBinder,很容易被这两个函数绕晕,下面来讲解一下: interface_cast 下面根据下述ICameraClient例子进行分析...

天王盖地虎626
今天
72
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部