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