在线二区人妖系列_国产亚洲欧美日韩在线一区_国产一级婬片视频免费看_精品少妇一区二区三区在线

鍍金池/ 教程/ Java/ Assembly 基本語法
Assembly 變量聲明
Assembly匯編 STOS指令
Assembly 條件
Assembly 尋址模式和MOV指令
Assembly匯編教程
Assembly - 什么是匯編語言
Assembly 循環(huán)
Assembly 內(nèi)存段
Assembly匯編 宏
Assembly 寄存器
Assembly匯編 遞歸
Assembly匯編 CMPS指令
Assembly匯編 內(nèi)存管理
Assembly匯編 LODS指令
Assembly 基本語法
Assembly匯編 過程
Assembly匯編 文件管理
Assembly匯編 數(shù)組
Assembly匯編 SCAS指令
Assembly 算術(shù)指令
Assembly 環(huán)境設(shè)置
Assembly匯編 字符串處理
Assembly 數(shù)字
Assembly 常量
Assembly匯編 MOVS指令
Assembly 邏輯指令
Assembly 系統(tǒng)調(diào)用

Assembly 基本語法

匯編程序可以分為三個(gè)部分:

  • 數(shù)據(jù)段

  • bss段部分

  • 文字部分

數(shù)據(jù)段

用于聲明初始化數(shù)據(jù)或常量的數(shù)據(jù)段。在運(yùn)行時(shí),此數(shù)據(jù)不改變。在本節(jié)中可以聲明不同的常量值,文件名或緩沖區(qū)大小等。

聲明數(shù)據(jù)段的語法是:

section .data

bss

BSS部分是用于聲明變量。聲明bss段段的語法是:

section .bss

文本段

文字部分用于保存實(shí)際的代碼。本節(jié)開頭必須的的聲明global_start,告訴內(nèi)核程序開始執(zhí)行。

聲明文本部分的語法是:

section .text
   global _start
_start:

注釋

匯編語言注釋以分號(hào)(;)。它可能包含任何可打印的字符,包括空白。它可以出現(xiàn)一行本身,如:

; This program displays a message on screen

或者,在同一行上的指令,如:

add eax ,ebx    ; adds ebx to eax

Assembly匯編語言語句

匯編語言程序包括三個(gè)類型的語句:

  • 可執(zhí)行指令或指令

  • 匯編指令或偽操作

可執(zhí)行指令或簡(jiǎn)單指示告訴的處理器該怎么做。每個(gè)指令由操作碼(操作碼)可執(zhí)行指令生成的機(jī)器語言指令。

匯編指令或偽操作告訴匯編有關(guān)匯編過程的各個(gè)方面。這些都是非可執(zhí)行文件,并不會(huì)產(chǎn)生機(jī)器語言指令。

宏基本上是一個(gè)文本替換機(jī)制。

匯編語言語句的語法

匯編語言語句輸入每行一個(gè)語句。每個(gè)語句如下的格式如下:

[label]   mnemonic   [operands]   [;comment]

方括號(hào)中的字段是可選的。基本指令有兩部分組成,第一個(gè)是要執(zhí)行的指令(助記符)的名稱和所述第二命令的操作數(shù)或參數(shù)的。

以下是一些典型的匯編語言語句的例子:

INC COUNT        ; Increment the memory variable COUNT
MOV TOTAL, 48    ; Transfer the value 48 in the 
                 ; memory variable TOTAL
ADD AH, BH       ; Add the content of the 
                 ; BH register into the AH register
AND MASK1, 128   ; Perform AND operation on the 
                 ; variable MASK1 and 128
ADD MARKS, 10    ; Add 10 to the variable MARKS
MOV AL, 10       ; Transfer the value 10 to the AL register

Assembly Hello World程序

下面的匯編語言代碼顯示字符串 'Hello World'在屏幕上: 

section	.text
    global _start   ;must be declared for linker (ld)
_start:	            ;tells linker entry yiibai
    mov	edx,len     ;message length
    mov	ecx,msg     ;message to write
    mov	ebx,1       ;file descriptor (stdout)
    mov	eax,4       ;system call number (sys_write)
    int	0x80        ;call kernel
	
    mov	eax,1       ;system call number (sys_exit)
    int	0x80        ;call kernel

section	.data
msg db 'Hello, world!', 0xa  ;our dear string
len equ $ - msg              ;length of our dear string

上面的代碼編譯和執(zhí)行時(shí),它會(huì)產(chǎn)生以下結(jié)果:

Hello, world!

一個(gè)匯編程序的編譯和鏈接在NASM

請(qǐng)確保已設(shè)置NASM和LD的二進(jìn)制文件的路徑在PATH環(huán)境變量中?,F(xiàn)在上述程序的編譯和鏈接采取以下步驟:

  • 使用文本編輯器,輸入上面的代碼保存為hello.asm。

  • 請(qǐng)確保hello.asm文件保存在同一目錄 

  • 要匯編程序,請(qǐng)鍵入 nasm -f elf hello.asm

  • 如果有錯(cuò)誤將提示。否則hello.o程序?qū)?chuàng)建一個(gè)對(duì)象文件。

  • 要鏈接目標(biāo)文件,并創(chuàng)建一個(gè)可執(zhí)行文件名hello,請(qǐng)鍵入 ld -m elf_i386 -s -o hello hello.o

  • 通過輸入執(zhí)行程序 ./hello

如果所做的一切都是正確的,它會(huì)顯示 Hello, world!在屏幕上。