国产 无码 综合区,色欲AV无码国产永久播放,无码天堂亚洲国产AV,国产日韩欧美女同一区二区

匯編語(yǔ)言筆記(一)——匯編語(yǔ)言基礎(chǔ)

這篇具有很好參考價(jià)值的文章主要介紹了匯編語(yǔ)言筆記(一)——匯編語(yǔ)言基礎(chǔ)。希望對(duì)大家有所幫助。如果存在錯(cuò)誤或未考慮完全的地方,請(qǐng)大家不吝賜教,您也可以點(diǎn)擊"舉報(bào)違法"按鈕提交疑問(wèn)。

一、開(kāi)發(fā)環(huán)境

我使用visual studio 2022 preview,其他版本的設(shè)置大同小異。

第一步:

打開(kāi)visual studio,點(diǎn)擊“創(chuàng)建新項(xiàng)目”:

第二步:

visual studio并沒(méi)有專(zhuān)門(mén)的匯編項(xiàng)目,所以需要掛羊頭賣(mài)狗肉,選擇C++空項(xiàng)目

第三步:

輸入項(xiàng)目名稱(chēng),點(diǎn)擊創(chuàng)建

第四步:

鼠標(biāo)右鍵單擊項(xiàng)目名稱(chēng)——>生成依賴項(xiàng)——>生成自定義,點(diǎn)擊masm,這樣才能把masm加入到項(xiàng)目的生成工具中

匯編語(yǔ)言筆記(一)——匯編語(yǔ)言基礎(chǔ)

第五步:

鼠標(biāo)右鍵單擊源文件——>添加——>新建像,選擇C++文件,但文件擴(kuò)展名要改為.asm,編譯器才能自動(dòng)的使用masm編譯

匯編語(yǔ)言筆記(一)——匯編語(yǔ)言基礎(chǔ)

第六步:

因?yàn)?4位匯編比較簡(jiǎn)單,初學(xué)時(shí)把配置改為Release、X64,了解深入后再探索32位匯編

匯編語(yǔ)言筆記(一)——匯編語(yǔ)言基礎(chǔ)

大功告成!

如果用visual studio 2019,可以安裝AsmDude插件,輔助編寫(xiě)匯編代碼。但它目前不支持visual studio 2022

二、匯編語(yǔ)言的基礎(chǔ)知識(shí)

1、哲學(xué)思考

(1)匯編語(yǔ)言的特點(diǎn)

與硬件相關(guān),每一種處理器都有相應(yīng)的匯編語(yǔ)言;

與機(jī)器碼相關(guān),指令通常與機(jī)器碼一一對(duì)應(yīng);

家用電腦使用intel/amd處理器,對(duì)應(yīng)x86-x64匯編語(yǔ)言。

(2)匯編語(yǔ)言的作用

深入理解硬件工作原理;

充分利用計(jì)算機(jī)特性(如SIMD,即單指令多數(shù)據(jù));

開(kāi)發(fā)操作系統(tǒng)內(nèi)核、驅(qū)動(dòng)程序等;

優(yōu)化程序。

(3)匯編語(yǔ)言無(wú)用論

匯編語(yǔ)言代碼難以維護(hù);

編譯器優(yōu)化足夠先進(jìn),無(wú)需匯編語(yǔ)言(編譯器可實(shí)現(xiàn)循環(huán)展開(kāi)、內(nèi)聯(lián)展開(kāi)等,減少跳轉(zhuǎn),而匯編語(yǔ)言開(kāi)發(fā)難以實(shí)現(xiàn));

高級(jí)語(yǔ)言也可以實(shí)現(xiàn)同樣的功能,匯編語(yǔ)言與高級(jí)語(yǔ)言相比并無(wú)優(yōu)勢(shì)。

(4)匯編語(yǔ)言有害論

匯編語(yǔ)言給黑客、病毒、作弊外掛大開(kāi)方便之門(mén)(反駁一:工具價(jià)值中立;反駁二:軟件破解為普通人節(jié)省大量金錢(qián))。

(5)匯編語(yǔ)言也是高級(jí)語(yǔ)言論

在許多CPU中,匯編語(yǔ)言指令并非直接操作硬件,而需通過(guò)硬件制造商提供固件內(nèi)的程序編譯成“微指令”再執(zhí)行,這與高級(jí)語(yǔ)言沒(méi)有說(shuō)很么不同。

2、數(shù)學(xué)基礎(chǔ)

(1)二進(jìn)制、十進(jìn)制、十六進(jìn)制轉(zhuǎn)換和運(yùn)算(可借助windows計(jì)算器)。

(2)浮點(diǎn)數(shù)的存儲(chǔ):

real4:符號(hào)1位+指數(shù)8位+小數(shù)23位(整數(shù)部分1省略);

real8:符號(hào)1位+指數(shù)11位+小數(shù)52位(整數(shù)部分1省略);

real10:符號(hào)1位+指數(shù)15位+小數(shù)64位(整數(shù)部分1省略)。

3、寄存器

匯編語(yǔ)言使用的寄存器實(shí)際上并不是物理寄存器,而是在通過(guò)一定的操作映射CPU內(nèi)部特定的物理寄存器。主要包括:

(1)通用寄存器16個(gè),可以通過(guò)通常的指令讀寫(xiě):

全部64位 0-31位 0-15位 8-15位 0-7位
rax eax ax ah al
rbx ebx bx bh bl
rcx ecx cx ch cl
rdx edx dx dh dl
rsi esi si sil
rdi edi di dil
rbp ebp bp bpl
rsp esp sp spl
r8 r8d r8w r8b
r9 r9d r9w r9b
r10 r10d r10w r10b
r11 r11d r11w r11b
r12 r12d r12w r12b
r13 r13d r13w r13b
r14 r14d r14w r14b
r15 r15d r15w r15b

以上16個(gè)寄存器,esp專(zhuān)門(mén)用于指示棧頂;此外,其他其他寄存器也有一定的功能區(qū)別,在某些指令中作為默認(rèn)操作數(shù),但這些功能區(qū)別正日益消失。

(2)專(zhuān)用寄存器有專(zhuān)門(mén)用途,并且只能通過(guò)專(zhuān)門(mén)的指令讀寫(xiě):

用途 全部64位 0-31位
標(biāo)志寄存器 rflags eflags
指令寄存器 rip

標(biāo)志寄存器各位含義:

名稱(chēng) 數(shù)值含義 主要用途
0 CF 1進(jìn)位,0無(wú)進(jìn)位 無(wú)符號(hào)數(shù)運(yùn)算是否溢出
1 置1
2 PF 1偶數(shù),0奇數(shù) 過(guò)去主要用于數(shù)據(jù)傳輸校驗(yàn),目前很少用
3 置0
4 AF 1半進(jìn)位,0無(wú)半進(jìn)位 過(guò)去主要用于BCD碼加減法,因BCD碼指令已廢除,目前很少用
5 置0
6 ZF 1結(jié)果零,0結(jié)果非零 是否相等
7 SF 1負(fù)數(shù),0正數(shù) 是否大于或小于
8 TF 1引發(fā)int 1中斷,0不引發(fā)中斷 用于調(diào)試,用戶態(tài)置0,不可更改
9 IF 1允許中斷,0不允許中斷 用于暫時(shí)屏蔽中斷,用戶態(tài)置1,不可更改
10 DF 1遞增,0遞減 確定字符串指令的執(zhí)行方向,通常置0
11 OF 1溢出,0無(wú)溢出 有符號(hào)數(shù)運(yùn)算是否溢出
12-13 IOPL 0-3,表示IN/OUT指令操作需要的特權(quán)級(jí) 操作系統(tǒng)通常置0,即用戶態(tài)不能使用IN/OUT指令
14 NT 表示當(dāng)前任務(wù)與其他任務(wù)是否關(guān)聯(lián) 由操作系統(tǒng)管理
15 置0
16 RF 確定調(diào)試異常的處理方式 由操作系統(tǒng)管理
17 VM 表示是否處于虛擬8086模式 由操作系統(tǒng)管理
18 AC 表示是否進(jìn)行內(nèi)存對(duì)齊檢查 由操作系統(tǒng)管理
19 VIF 虛擬中斷標(biāo)志 由操作系統(tǒng)管理
20 VIP 虛擬中斷掛起 由操作系統(tǒng)管理
21 ID 表示是否允許執(zhí)行CPUID指令 由操作系統(tǒng)管理
22-63 置0

不涉及系統(tǒng)編程時(shí),通常只需要注意CF、AF、SF、OF四個(gè)標(biāo)志位,并將其用于有條件跳轉(zhuǎn)指令。

需注意的是,Visual Studio 2019、2022的調(diào)試模式下,寄存器窗口的EFLAGS第1位按照0來(lái)顯示,但將EFLAGS存入堆棧后可以看出EFLAGS第1位仍然是1。Visual Studio 2017及更早版本的寄存器窗口則顯示為1。

(3)其他寄存器:

與浮點(diǎn)數(shù)或SIMD指令集相關(guān),在學(xué)習(xí)相應(yīng)的指令集時(shí)再學(xué)習(xí)。

4、操作數(shù)(又稱(chēng)“尋址模式”)

(1)立即數(shù)

包括8位、16位、32位、64位立即數(shù)。

在masm中不能指定立即數(shù)類(lèi)型,而是由編譯器根據(jù)情況確定。如果需要指定立即數(shù)類(lèi)型,只能直接書(shū)寫(xiě)機(jī)器碼(對(duì)比:nasm可以指定)。

除mov指令外,絕大多數(shù)指令不允許使用64位立即數(shù)。要對(duì)64位數(shù)值進(jìn)行操作,通常需要用mov指令先傳入某個(gè)寄存器,再指定寄存器位操作數(shù)。

(2)寄存器

包括8位、16位、32位、64位寄存器,通過(guò)寄存器名稱(chēng)指定。

intel匪夷所思的重要規(guī)則:對(duì)通用寄存器低32位操作會(huì)導(dǎo)致高32位清零,對(duì)通用寄存器的低16位、低8位、8-15位操作均不影響其他位。

(3)內(nèi)存

內(nèi)存數(shù)據(jù)可以是8位、16位、32位、64位或128位。

內(nèi)存地址的指定方式包括:

第一,rip+偏移量,通過(guò)變量名指定內(nèi)存時(shí),編譯器自動(dòng)轉(zhuǎn)換到這種方式

第二,通用寄存器,如[rdx]

第三,通用寄存器+偏移量,如[rdx+0531h]

第四,比例索引字節(jié)(SIB),即[存放基址的寄存器+存放索引號(hào)的寄存器*比例]

第五,比例索引字節(jié)(SIB)+偏移量,即[存放基址的寄存器+存放索引號(hào)的寄存器*比例+偏移量];

第六,64位數(shù)直接指定內(nèi)存地址(僅MOV指令支持)。

其中:

比例索引字節(jié)的比例可以是1、2、4或8;

偏移量只能是8位或32位,intel不支持64位偏移量。

需要特別指定內(nèi)存的數(shù)據(jù)長(zhǎng)度時(shí),可以添加“數(shù)據(jù)類(lèi)型 ptr”前綴。

5、數(shù)據(jù)

(1)數(shù)據(jù)類(lèi)型

字節(jié)數(shù) 無(wú)符號(hào)整型 有符號(hào)整型 浮點(diǎn)型
1 db, byte
2 dw, word sword
4 dd, dword sdword real4
6 df, fword
8 dq, qword real8
10 dt, tbyte real10

SIMD指令使用的數(shù)據(jù)類(lèi)型,在SIMD部分再學(xué)習(xí)。

在匯編語(yǔ)言中,有符號(hào)整型和無(wú)符號(hào)整型實(shí)際上沒(méi)有區(qū)別,且均可以用來(lái)表示浮點(diǎn)數(shù),因此下列代碼含義完全相同:

acon dd 6.7
acon sdword 6.7
acon real4 6.7

但是,浮點(diǎn)型卻不能用來(lái)表示整數(shù),因此,下列代碼無(wú)法通過(guò)編譯:

mydata real8 35

如此修改則可以通過(guò)編譯:

mydata real8 35.0

(2)結(jié)構(gòu)體

結(jié)構(gòu)體類(lèi)型名 struct

內(nèi)容

結(jié)構(gòu)體類(lèi)型名 ends

(3)常量

十進(jìn)制數(shù),直接書(shū)寫(xiě),或以d/t結(jié)尾,如:

358
4.1

二進(jìn)制數(shù),用b結(jié)尾,如:

01011100b

八進(jìn)制數(shù),用o/q結(jié)尾,如:

401o

十六進(jìn)制數(shù),用h結(jié)尾,如果以字母開(kāi)頭,則前面加0,如:

0ah
45h

浮點(diǎn)數(shù)可以用小數(shù)或者科學(xué)計(jì)數(shù)法表示,如:

4.1
4.32398E4;(即43239.8)

浮點(diǎn)數(shù)只能用在數(shù)據(jù)初始化部分,不能用在指令中;在指令中使用浮點(diǎn)數(shù),應(yīng)轉(zhuǎn)換為浮點(diǎn)編碼。此外,MASM不支持某些教材上介紹的r后綴表示的“編碼實(shí)數(shù)”類(lèi)型。

字符和字符串常量:

以單引號(hào)或雙引號(hào)表示,MASM不區(qū)分單引號(hào)和雙引號(hào),但單引號(hào)和雙引號(hào)仍需分別配對(duì),不能混用。引號(hào)內(nèi)一個(gè)字符則為字符,多個(gè)字符則為字符串。單引號(hào)字符串中可以包含雙引號(hào),雙引號(hào)字符串可以包含單引號(hào)。如果字符串內(nèi)單引號(hào)、雙引號(hào)混用,則需要分開(kāi)寫(xiě),并以逗號(hào)分割,如:

'Hello from Luisa'
"XP"
"No. It isn't"
'app "windows"'
'app "windows"?', "No. It isn't"

為字符串。須以數(shù)值表示。

MASM只能用引號(hào)定義ansi字符串,如果需要定義unicode字符串,須逐字符書(shū)寫(xiě),例如:

dw 'H', 'e', 'l', 'l', 'o', 0;unicode字符串"Hello\0"

masm32論壇可以找到他人編寫(xiě)的unicode字符串宏,以簡(jiǎn)化unicode字符串書(shū)寫(xiě)。

整型常量表達(dá)式:

整型常量之間可以用+-*/MOD以及括號(hào)運(yùn)算符進(jìn)行計(jì)算,計(jì)算過(guò)程由編譯器進(jìn)行。

符號(hào)常量:

=:可以表示包含符號(hào)常量的常量表達(dá)式,但只能表示整數(shù),并且可以在程序中反復(fù)修改,例如:

.data
P EQU 3
count=5
d1 dw count dup(0)
count=10*2
d2 dw count dup(0)
count=10*P
d3 dw count dup(0)

EQU:可以表示包含符號(hào)常量的常量表達(dá)式,例如:

count=5
PI EQU 3.1416
PP EQU count+2
MY_NAME EQU "Luisa Amalia Ho"
d1 qword PP*PP; d1=49

EQU后面的常量表達(dá)式如果加尖括號(hào),表示將括號(hào)內(nèi)的文本原樣復(fù)制,數(shù)值可能存在差異,例如

count=5
PI EQU <3.1416>
PP EQU <count+2>
MY_NAME EQU <"Luisa Amalia Ho">
d1 qword PP*PP; d1=17

(3)標(biāo)識(shí)符

常量名、變量名、標(biāo)號(hào)、過(guò)程名等自定義的名稱(chēng),均為標(biāo)識(shí)符。

MASM的標(biāo)識(shí)符由1-247個(gè)字符組成,不區(qū)分大小寫(xiě),只能使用字母、數(shù)字、下劃線、@、?、$,且數(shù)字不能作為標(biāo)識(shí)符開(kāi)頭。

標(biāo)識(shí)符不得與MASM保留字相同。

三、第一個(gè)匯編語(yǔ)言程序

如上所述,visual studio并沒(méi)有專(zhuān)門(mén)的匯編語(yǔ)言項(xiàng)目,我們是以掛羊頭賣(mài)狗肉的方式,借助C++項(xiàng)目的名義書(shū)寫(xiě)匯編語(yǔ)言程序。在這樣的項(xiàng)目下,要想讓匯編語(yǔ)言程序運(yùn)行,有幾種選擇:

第一種選擇是,在項(xiàng)目的屬性中指定入口點(diǎn),此時(shí),windows系統(tǒng)將直接按照入口點(diǎn),調(diào)用你書(shū)寫(xiě)的匯編語(yǔ)言過(guò)程,該過(guò)程結(jié)束后,程序結(jié)束,返回windows系統(tǒng)。程序只會(huì)執(zhí)行你書(shū)寫(xiě)匯編語(yǔ)言代碼,不會(huì)執(zhí)行其他的東西。但是即便是初學(xué)者,大家也希望書(shū)寫(xiě)一個(gè)能夠通過(guò)輸入輸出實(shí)現(xiàn)某種功能的程序,而不是僅僅在調(diào)試窗口里觀察寄存器和內(nèi)存的數(shù)值變化。雖然此時(shí)我們也可以通過(guò)調(diào)用windows api實(shí)現(xiàn)輸入輸出,但實(shí)現(xiàn)過(guò)程比較復(fù)雜,對(duì)于初學(xué)者并不合適。

第二種選擇是,我們既然以掛羊頭賣(mài)狗肉的方式,假借C++的名義,創(chuàng)建了項(xiàng)目,那么我們可以創(chuàng)建C++文件,由C++的main函數(shù)調(diào)用我們書(shū)寫(xiě)的匯編代碼。然而,這種C/C++和匯編的混合編程,本應(yīng)在了解C/C++和匯編語(yǔ)言之后才能學(xué)習(xí)。對(duì)于匯編語(yǔ)言的初學(xué)者也不合適。

第三種選擇是,我們既然以掛羊頭賣(mài)狗肉的方式,假借C++的名義,創(chuàng)建了項(xiàng)目,那么我們就仿照C++的方式,假裝自己是C++程序,創(chuàng)建main過(guò)程讓項(xiàng)目執(zhí)行。然后,我們可以像其他學(xué)習(xí)C/C++的人一樣,直接調(diào)用C/C++庫(kù)函數(shù)實(shí)現(xiàn)輸入輸出的目的。

按照上文方式創(chuàng)建的項(xiàng)目,在沒(méi)有指定入口函數(shù)的情況下,visual studio會(huì)指定mainCRTStartup為入口,接下來(lái)才會(huì)調(diào)用main。因此,直接生成必然是會(huì)產(chǎn)生找不到mainCRTStartup的鏈接錯(cuò)誤;如果你在visual studio項(xiàng)目中創(chuàng)建一個(gè)空的,c/.cpp文件,那么vs就會(huì)正確的加載相應(yīng)的庫(kù)函數(shù),進(jìn)而調(diào)用你用匯編寫(xiě)成的main過(guò)程。不過(guò),僅僅這么做,如果你調(diào)用printf,鏈接器依然無(wú)法找不到C/C++庫(kù)函數(shù)。

此時(shí),簡(jiǎn)單易行的做法應(yīng)該是通過(guò)INCLUDELIB,把C/C++庫(kù)文件包含在匯編代碼內(nèi),即:

INCLUDELIB libcmt

加入這一個(gè)庫(kù)文件,就不需要另外創(chuàng)建.c/.cpp空文件。vs會(huì)把你的代碼當(dāng)作C++項(xiàng)目,正確的編譯、鏈接,并且以main作為入口點(diǎn)執(zhí)行。

因此,第一個(gè)匯編語(yǔ)言程序,露易莎在這里向各位問(wèn)好了:

INCLUDELIB libcmt;包含“C運(yùn)行時(shí)庫(kù)”

EXTERN printf:PROC;聲明函數(shù)printf

.data;數(shù)據(jù)段
output_format db "Hello from Luisa",0;需要打印的字符串

.code;代碼段
main PROC;main過(guò)程開(kāi)始
	sub rsp, 28h;預(yù)留空間
	lea rcx, output_format;傳入output_format的地址作為參數(shù)
	call printf;調(diào)用printf
	add rsp, 28h;平衡堆棧
	ret;從過(guò)程返回
main ENDP;main過(guò)程結(jié)束
END;匯編代碼結(jié)束

匯編語(yǔ)言筆記(一)——匯編語(yǔ)言基礎(chǔ)

1、MASM64匯編語(yǔ)言源代碼文件的書(shū)寫(xiě)特點(diǎn)

(1)不區(qū)分大小寫(xiě);

(2)注釋以分號(hào)開(kāi)始;

(3)換行通常作為語(yǔ)句結(jié)束標(biāo)志,如一個(gè)語(yǔ)句過(guò)長(zhǎng),內(nèi)部需要換行,可以在行尾用'\'表示。

2、內(nèi)容

(1)聲明部分

include包含*.inc文件;

includelib包含*lib庫(kù)文件;

EXTERN聲明外部函數(shù)和變量;

(2)段

在64位匯編中,采用平坦模式,不涉及段。但MASM在程序結(jié)構(gòu)上仍然保留了段的概念。在運(yùn)行時(shí),不同的段會(huì)被分配到不同的頁(yè)面。

64位匯編通常以簡(jiǎn)易的方式聲明段,包括:

.data(可讀,可寫(xiě),不可執(zhí)行,段名_DATA),本段數(shù)據(jù)可以初始化,如未初始化,則編譯器自動(dòng)填入0,這些數(shù)據(jù)會(huì)存入.exe文件中

.data?(可讀,可寫(xiě),不可執(zhí)行,段名_BSS),本段數(shù)據(jù)不進(jìn)行初始化,也不會(huì)存入.exe,在運(yùn)行時(shí)才分配內(nèi)存,并全部填入0。該段中的數(shù)據(jù)若進(jìn)行初始化,編譯不會(huì)報(bào)錯(cuò),但運(yùn)行時(shí)仍然填入0。

.code(可讀,不可寫(xiě),可執(zhí)行,段名_TEXT),本段為代碼段,但在代碼之中也可以包括數(shù)據(jù),如數(shù)據(jù)未初始化,則編譯器自動(dòng)填入0,這些數(shù)據(jù)會(huì)存入.exe文件中

.const(可讀,不可寫(xiě),不可執(zhí)行,段名CONST),本段數(shù)據(jù)可以初始化,如未初始化,則編譯器自動(dòng)填入0,這些數(shù)據(jù)會(huì)存入.exe文件中

64位匯編不能自己定義堆棧段。堆棧段由操作系統(tǒng)提供,堆棧段大小可以在項(xiàng)目屬性中設(shè)置。

違反段的權(quán)限規(guī)定,會(huì)報(bào)異常。

完整方式聲明段的方式是:

段名 segment [read|write|execute]

段名 ends

同名的段可以多次定義,但權(quán)限不得改變,鏈接器將把同名的段鏈接在一起。

通常僅在需要運(yùn)行時(shí)修改代碼等有特殊用途的情況下,才會(huì)用完整方式聲明段

(3)變量定義

變量定義格式為[變量名] 類(lèi)型 初始化數(shù)值;未初始化的數(shù)值用?表示。

dup偽指令表示重復(fù)同樣數(shù)值或?,例如:mydata db 300 dup(0),表示定義300個(gè)db類(lèi)型的0,每個(gè)占用1字節(jié)。

定義大型數(shù)組(例如500k以上),無(wú)論是否初始化,masm64編譯都會(huì)顯著變慢,這是一個(gè)長(zhǎng)久的bug,原因不明(GoAsm等其他編譯器不存在此類(lèi)問(wèn)題)。

一種替代方法使用org偽指令指定下一個(gè)數(shù)據(jù)的地址,之前的內(nèi)存會(huì)全部置0且可以讀寫(xiě)。

例如定義會(huì)導(dǎo)致編譯極慢:

array db 500000 dup(?)

可以考慮改為

org 0
array db ?
org 500000
db ?; 這一行必須有,否則操作系統(tǒng)不會(huì)分配這部分內(nèi)存

此時(shí)地址0~500000均可正常讀寫(xiě)。

(4)文件結(jié)束

END是匯編代碼文件結(jié)束的標(biāo)志。END之后無(wú)論寫(xiě)什么,編譯器一律忽略。

因此,這樣的代碼也是可以編譯運(yùn)行的:文章來(lái)源地址http://www.zghlxwxcb.cn/news/detail-450403.html

INCLUDELIB libcmt;包含“C運(yùn)行時(shí)庫(kù)”

EXTERN printf:PROC;聲明函數(shù)printf

.data;數(shù)據(jù)段
output_format db "Hello from Luisa",0;需要打印的字符串

.code;代碼段
main PROC;main過(guò)程開(kāi)始
	sub rsp, 28h;預(yù)留空間
	lea rcx, output_format;傳入output_format的地址作為參數(shù)
	call printf;調(diào)用printf
	add rsp, 28h;平衡堆棧
	ret;從過(guò)程返回
main ENDP;main過(guò)程結(jié)束
END;匯編代碼結(jié)束
Nichts hier ist für immer
Auch wenn es so scheint
Pl?tzlich wachst Du auf
Und bist allein
Die Stra?en sind noch grau
Es ist wie jedes Jahr
Die Uhr sie bleibt nicht stehen
Du bist allein
Eben noch
Warst Du ein Teil der sch?nen Welt
Der Unendlichkeit
Gerade noch
Warst Du ein Stück der Ewigkeit
Schon Vergangenheit
Es ist vorbei
Es ist vorbei
Es ist vorbei
Wieder stehst Du auf
Und schaust zum Fenster raus
Alles ist noch so
Wies früher war
Der Tag lacht viel zu laut
Und will in Dein Gesicht
Du ziehst den Vorhang zu
Und Du bleibst da
Eben noch
Warst Du ein Teil der sch?nen Welt
Der Unendlichkeit
Gerade noch
Warst Du ein Stück der Ewigkeit
Schon Vergangenheit
Es ist vorbei
Es ist vorbei
Es ist vorbei
Eben noch
Warst Du ein Teil der sch?nen Welt
Der Unendlichkeit
Gerade noch
Warst Du ein Stück der Ewigkeit
Schon Vergangenheit
Es ist vorbei
Es ist vorbei
Es ist vorbei
Es ist vorbei
Es ist vorbei
Es ist vorbei

到了這里,關(guān)于匯編語(yǔ)言筆記(一)——匯編語(yǔ)言基礎(chǔ)的文章就介紹完了。如果您還想了解更多內(nèi)容,請(qǐng)?jiān)谟疑辖撬阉鱐OY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!

本文來(lái)自互聯(lián)網(wǎng)用戶投稿,該文觀點(diǎn)僅代表作者本人,不代表本站立場(chǎng)。本站僅提供信息存儲(chǔ)空間服務(wù),不擁有所有權(quán),不承擔(dān)相關(guān)法律責(zé)任。如若轉(zhuǎn)載,請(qǐng)注明出處: 如若內(nèi)容造成侵權(quán)/違法違規(guī)/事實(shí)不符,請(qǐng)點(diǎn)擊違法舉報(bào)進(jìn)行投訴反饋,一經(jīng)查實(shí),立即刪除!

領(lǐng)支付寶紅包贊助服務(wù)器費(fèi)用

相關(guān)文章

  • Keil MDK配置ARM匯編/C語(yǔ)言混合開(kāi)發(fā)環(huán)境

    Keil MDK配置ARM匯編/C語(yǔ)言混合開(kāi)發(fā)環(huán)境

    1. 安裝Keil MDK 安裝方法這里不再說(shuō)明,懂得都懂!?? 2. 安裝ARM開(kāi)發(fā)包 在Keil MDK5之后,不再原生支持ARM7/9,需要自行安裝軟件包,鏈接在這,注意安裝與自己MDK版本對(duì)應(yīng)的那個(gè)包 我的版本是5.18,下載之后傻瓜式安裝,因?yàn)樗鼤?huì)自動(dòng)檢測(cè)你MDK所在的位置。 3. 新建工程 注意:選

    2024年02月02日
    瀏覽(28)
  • 匯編語(yǔ)言學(xué)習(xí)筆記四

    匯編語(yǔ)言學(xué)習(xí)筆記四

    字符是以ASCII碼的形式存儲(chǔ)的,一個(gè)字符對(duì)應(yīng)著8為二進(jìn)制數(shù),2位16進(jìn)制數(shù)。 所以可以得到對(duì)應(yīng)的字符地址。 根據(jù)ASCII碼,字符的大寫(xiě)和小寫(xiě)相差一個(gè)0010 0000,比如a對(duì)應(yīng)的ASCII碼是0110 0001,那么A則對(duì)應(yīng)的是0100 0001,對(duì)比可以發(fā)現(xiàn)他們只是第5位不同,第5位為1,則是小寫(xiě),否則

    2024年02月03日
    瀏覽(23)
  • 匯編語(yǔ)言學(xué)習(xí)筆記六

    匯編語(yǔ)言學(xué)習(xí)筆記六

    CF:進(jìn)位標(biāo)志位,產(chǎn)生進(jìn)位CF=1,否則為0 PF:奇偶位,如010101b,則該數(shù)的1有3個(gè),則PF=0,如果該數(shù)的1的個(gè)數(shù)為偶數(shù),則PF=1。 0也是偶數(shù) ZF:在相關(guān)指令執(zhí)行后(運(yùn)算和邏輯指令,傳送指令不影響ZF的值),其結(jié)果為0,則ZF=1,否則為0。 SF:符號(hào)標(biāo)志位,如果結(jié)果為負(fù),則SF=1,否則為

    2024年02月03日
    瀏覽(22)
  • 從零學(xué)習(xí)開(kāi)發(fā)一個(gè)RISC-V操作系統(tǒng)(四)丨RISC-V匯編語(yǔ)言編程

    從零學(xué)習(xí)開(kāi)發(fā)一個(gè)RISC-V操作系統(tǒng)(四)丨RISC-V匯編語(yǔ)言編程

    ?? 本系列是博主參考B站課程學(xué)習(xí)開(kāi)發(fā)一個(gè)RISC-V的操作系統(tǒng)的學(xué)習(xí)筆記,計(jì)劃從RISC-V的底層匯編指令學(xué)起,結(jié)合C語(yǔ)言,在Ubuntu 20.04上開(kāi)發(fā)一個(gè)簡(jiǎn)易的操作系統(tǒng)。一個(gè)目的是通過(guò)實(shí)踐操作學(xué)習(xí)和了解什么是操作系統(tǒng),第二個(gè)目的是為之后學(xué)習(xí)RISC-V的集成電路設(shè)計(jì)打下一定基礎(chǔ)

    2024年01月25日
    瀏覽(42)
  • 【C語(yǔ)言基礎(chǔ)】01環(huán)境安裝 Windows下的CLion開(kāi)發(fā)環(huán)境的安裝

    【C語(yǔ)言基礎(chǔ)】01環(huán)境安裝 Windows下的CLion開(kāi)發(fā)環(huán)境的安裝

    資源:放在評(píng)論區(qū)中 把壓縮包拖拽到C盤(pán)根目錄,一鍵解壓壓縮包,得到文件夾mingw64 點(diǎn)擊CLion.exe,運(yùn)行安裝程序 路徑為默認(rèn)安裝,如需更改,注意路徑中不要帶有中文. Installation Options 全部勾選 選擇我想要之后重啟電腦 點(diǎn)擊CLion,進(jìn)入內(nèi)部設(shè)置 點(diǎn)擊下方continue 繼續(xù) 存放在D盤(pán),不要有中

    2024年02月01日
    瀏覽(45)
  • 【Go】Go語(yǔ)言開(kāi)發(fā)0基礎(chǔ)7天入門(mén) - 筆記

    【Go】Go語(yǔ)言開(kāi)發(fā)0基礎(chǔ)7天入門(mén) - 筆記

    課程來(lái)源:【路飛學(xué)城】-黑金年卡VIP課程 課程名稱(chēng):GO語(yǔ)言開(kāi)發(fā)0基礎(chǔ)7天入門(mén) 講師:【 前汽車(chē)之家架構(gòu)師 】Wusir-銀角大王 官網(wǎng):點(diǎn)擊進(jìn)入 集python簡(jiǎn)潔 + C語(yǔ)言性能 詳情點(diǎn)擊 編程語(yǔ)言 實(shí)戰(zhàn)經(jīng)驗(yàn) 源碼 并發(fā)架構(gòu) 新語(yǔ)言觸類(lèi)旁通 1.1 開(kāi)篇介紹(必看) 1.2 環(huán)境搭建前戲 1.3 mac系統(tǒng)G

    2024年02月16日
    瀏覽(30)
  • 匯編語(yǔ)言—常見(jiàn)匯編指令匯總

    mov? ? 寄存器 ,數(shù)據(jù)? ? ? ? ? ? ? ? 如:mov ax ,8 mov? ?寄存器,寄存器? ? ? ? ? ? ? 如:mov ax,bx mov? ?寄存器,內(nèi)存單元????????? 如:mov ax,[0] mov? ?內(nèi)存單元,寄存器? ????????如:mov [0],ax mov? ?段寄存器,寄存器? ????????如:mov ds,ax add? ?寄存器,數(shù)據(jù)

    2024年02月10日
    瀏覽(15)
  • 5.6 匯編語(yǔ)言:匯編高效數(shù)組尋址

    數(shù)組和指針都是用來(lái)處理內(nèi)存地址的操作,二者在C語(yǔ)言中可以互換使用。數(shù)組是相同數(shù)據(jù)類(lèi)型的一組集合,這些數(shù)據(jù)在內(nèi)存中是連續(xù)存儲(chǔ)的,在C語(yǔ)言中可以定義一維、二維、甚至多維數(shù)組。多維數(shù)組在內(nèi)存中也是連續(xù)存儲(chǔ)的,只是數(shù)據(jù)的組織方式不同。在匯編語(yǔ)言中,實(shí)現(xiàn)

    2024年02月11日
    瀏覽(26)
  • 5.8 匯編語(yǔ)言:匯編高效除法運(yùn)算

    通常情況下計(jì)算除法會(huì)使用 div/idiv 這兩條指令,該指令分別用于計(jì)算無(wú)符號(hào)和有符號(hào)除法運(yùn)算,但除法運(yùn)算所需要耗費(fèi)的時(shí)間非常多,大概需要比乘法運(yùn)算多消耗10倍的CPU時(shí)鐘,在Debug模式下,除法運(yùn)算不會(huì)被優(yōu)化,但Release模式下,除法運(yùn)算指令會(huì)被特定的算法經(jīng)過(guò)優(yōu)化后轉(zhuǎn)

    2024年02月11日
    瀏覽(16)
  • 5.7 匯編語(yǔ)言:匯編高效乘法運(yùn)算

    乘法指令是一種在CPU中實(shí)現(xiàn)的基本算術(shù)操作,用于計(jì)算兩個(gè)數(shù)的乘積。在匯編語(yǔ)言中,乘法指令通常是通過(guò) mul(無(wú)符號(hào)乘法) 和 imul(有符號(hào)乘法) 這兩個(gè)指令實(shí)現(xiàn)的。由于乘法指令在執(zhí)行時(shí)所消耗的時(shí)鐘周期較多,所以編譯器在優(yōu)化代碼時(shí)通常會(huì)嘗試將乘法操作轉(zhuǎn)換為更

    2024年02月11日
    瀏覽(20)

覺(jué)得文章有用就打賞一下文章作者

支付寶掃一掃打賞

博客贊助

微信掃一掃打賞

請(qǐng)作者喝杯咖啡吧~博客贊助

支付寶掃一掃領(lǐng)取紅包,優(yōu)惠每天領(lǐng)

二維碼1

領(lǐng)取紅包

二維碼2

領(lǐng)紅包