日韩av黄I国产麻豆传媒I国产91av视频在线观看I日韩一区二区三区在线看I美女国产在线I麻豆视频国产在线观看I成人黄色短片

歡迎訪問(wèn) 生活随笔!

生活随笔

當(dāng)前位置: 首頁(yè) >

汇编语言指令详解

發(fā)布時(shí)間:2025/3/15 55 豆豆
生活随笔 收集整理的這篇文章主要介紹了 汇编语言指令详解 小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

指令(instruction)是一種語(yǔ)句,它在程序匯編編譯時(shí)變得可執(zhí)行。匯編器將指令翻譯為機(jī)器語(yǔ)言字節(jié),并且在…

指令(instruction)是一種語(yǔ)句,它在程序匯編編譯時(shí)變得可執(zhí)行。匯編器將指令翻譯為機(jī)器語(yǔ)言字節(jié),并且在運(yùn)行時(shí)由 CPU 加載和執(zhí)行。

?

一條指令有四個(gè)組成部分:

  • 標(biāo)號(hào)(可選)
  • 指令助記符(必需)
  • 操作數(shù)(通常是必需的)
  • 注釋(可選)

不同部分的位置安排如下所示:

[label: ] mnemonic [operands] [;comment]

現(xiàn)在分別了解每個(gè)部分,先從標(biāo)號(hào)字段開(kāi)始。

1) 標(biāo)號(hào)

標(biāo)號(hào)(label)是一種標(biāo)識(shí)符,是指令和數(shù)據(jù)的位置標(biāo)記。標(biāo)號(hào)位于指令的前端,表示指令的地址。同樣,標(biāo)號(hào)也位于變量的前端,表示變量的地址。標(biāo)號(hào)有兩種類型:數(shù)據(jù)標(biāo)號(hào)和代碼標(biāo)號(hào)。

數(shù)據(jù)標(biāo)號(hào)標(biāo)識(shí)變量的位置,它提供了一種方便的手段在代碼中引用該變量。比如,下面定義了一個(gè)名為 count 的變量:

count DWORD 100

匯編器為每個(gè)標(biāo)號(hào)分配一個(gè)數(shù)字地址。可以在一個(gè)標(biāo)號(hào)后面定義多個(gè)數(shù)據(jù)項(xiàng)。在下面的例子中,array 定義了第一個(gè)數(shù)字(1024)的位置,其他數(shù)字在內(nèi)存中的位置緊隨其后:

array DWORD 1024, 2048 DWORD 4096, 8192

程序代碼區(qū)(指令所在區(qū)段)的標(biāo)號(hào)必須用冒號(hào)(:)結(jié)束。代碼標(biāo)號(hào)用作跳轉(zhuǎn)和循環(huán)指令的目標(biāo)。例如,下面的 JMP 指令創(chuàng)建一個(gè)循環(huán),將程序控制傳遞給標(biāo)號(hào) target 標(biāo)識(shí)的位置:

target: mov ax,bx ... jmp target

代碼標(biāo)號(hào)可以與指令在同一行上,也可以自己獨(dú)立一行:

L1: mov ax, bx L2 :

標(biāo)號(hào)命名規(guī)則要求,只要每個(gè)標(biāo)號(hào)在其封閉子程序頁(yè)中是唯一的,那么就可以多次使用相同的標(biāo)號(hào)。

2) 指令助記符

指令助記符(instruction mnemonic)是標(biāo)記一條指令的短單詞。在英語(yǔ)中,助記符是幫助記憶的方法。相似地,匯編語(yǔ)言指令助記符,如 mov, add 和 sub,給出了指令執(zhí)行操作類型的線索。下面是一些指令助記符的例子:

助記符說(shuō)明助記符說(shuō)明
MOV傳送(分配)數(shù)值MUL兩個(gè)數(shù)值相乘
ADD兩個(gè)數(shù)值相加JMP跳轉(zhuǎn)到一個(gè)新位置
SUB從一個(gè)數(shù)值中減去另一個(gè)數(shù)值CALL調(diào)用一個(gè)子程序

3) 操作數(shù)

操作數(shù)是指令輸入輸出的數(shù)值。匯編語(yǔ)言指令操作數(shù)的個(gè)數(shù)范圍是 0?3 個(gè),每個(gè)操作數(shù)可以是寄存器、內(nèi)存操作數(shù)、整數(shù)表達(dá)式和輸入輸岀端口。

生成內(nèi)存操作數(shù)有不同的方法,比如,使用變量名、帶方括號(hào)的寄存器等。變量名暗示了變量地址,并指示計(jì)算機(jī)使用給定地址的內(nèi)存內(nèi)容。下表列出了一些操作數(shù)示例:

示例操作數(shù)類型示例?操作數(shù)類型
96?整數(shù)常量eax寄存器
2+4整數(shù)表達(dá)式count內(nèi)存

現(xiàn)在來(lái)考慮一些包含不同個(gè)數(shù)操作數(shù)的匯編語(yǔ)言指令示例。比如,STC 指令沒(méi)有操作數(shù):

stc ;進(jìn)位標(biāo)志位置 1

INC 指令有一個(gè)操作數(shù):

inc eax ;EAX 加 1

MOV 指令有兩個(gè)操作數(shù):

mov count, ebx ;將 EBX 傳送給變量 count

操作數(shù)有固有順序。當(dāng)指令有多個(gè)操作數(shù)時(shí),通常第一個(gè)操作數(shù)被稱為目的操作數(shù),第二個(gè)操作數(shù)被稱為源操作數(shù)(source operand)。

一般情況下,目的操作數(shù)的內(nèi)容由指令修改。比如,在 mov 指令中,數(shù)據(jù)就是從源操作數(shù)復(fù)制到目的操作數(shù)。

IMUL 指令有三個(gè)操作數(shù),第一個(gè)是目的操作數(shù),第二個(gè)和第三個(gè)是進(jìn)行乘法的源操作數(shù):

imul eax,ebx,5

在上例中,EBX 與 5 相乘,結(jié)果存放在 EAX 寄存器中。

4) 注釋

注釋是程序編寫(xiě)者與閱讀者交流程序設(shè)計(jì)信息的重要途徑。程序清單的開(kāi)始部分通常包含如下信息:

  • 程序目標(biāo)的說(shuō)明
  • 程序創(chuàng)建者或修改者的名單
  • 程序創(chuàng)建和修改的日期
  • 程序?qū)崿F(xiàn)技術(shù)的說(shuō)明

注釋有兩種指定方法:

  • 單行注釋,用分號(hào)(;)開(kāi)始。匯編器將忽略在同一行上分號(hào)之后的所有字符。
  • 塊注釋,用 COMMENT 偽指令和一個(gè)用戶定義的符號(hào)開(kāi)始。匯編器將忽略其后所有的文本行,直到相同的用戶定義符號(hào)出現(xiàn)為止。

示例如下:

COMMENT ! This line is a comment. This line is also a comment. !

其他符號(hào)也可以使用,只要該符號(hào)不出現(xiàn)在注釋行中:

COMMENT & This line is a comment. This line is also a comment. &

當(dāng)然,程序員應(yīng)該在整個(gè)程序中提供注釋,尤其是代碼意圖不太明顯的地方。

5) NOP(空操作)指令

最安全(也是最無(wú)用)的指令是 NOP(空操作)。它在程序空間中占有一個(gè)字節(jié),但是不做任何操作。它有時(shí)被編譯器和匯編器用于將代碼對(duì)齊到有效的地址邊界。

在下面的例子中,第一條指令 MOV 生成了 3 字節(jié)的機(jī)器代碼。NOP 指令就把第三條指令的地址對(duì)齊到雙字邊界(4 的偶數(shù)倍):

00000000 66 8B C3 mov ax,bx 00000003 90 nop ;對(duì)齊下條指令 00000004 8B D1 mov edx,ecx

x86 處理器被設(shè)計(jì)為從雙字的偶數(shù)倍地址處加載代碼和數(shù)據(jù),這使得加載速度更快。

下一篇:匯編語(yǔ)言整數(shù)加減法示例

強(qiáng)力推薦閱讀文章

年薪40+W的大數(shù)據(jù)開(kāi)發(fā)【教程】,都在這兒!

與50位技術(shù)專家面對(duì)面20年技術(shù)見(jiàn)證,附贈(zèng)技術(shù)全景圖

總結(jié)

以上是生活随笔為你收集整理的汇编语言指令详解的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。

如果覺(jué)得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。