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

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

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

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

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

3.连接器有什么做用?对象

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

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

在shell环境下运行echo $?io

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

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
相关文章
相关标签/搜索