深刻理解程序設計使用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
相關文章
相關標籤/搜索