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

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

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值