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