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