日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

Intel汇编语言程序设计学习-第三章 汇编语言基础-上

發布時間:2025/6/17 编程问答 30 豆豆
生活随笔 收集整理的這篇文章主要介紹了 Intel汇编语言程序设计学习-第三章 汇编语言基础-上 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

匯編語言基礎

3.1 ?匯編語言的基本元素

有人說匯編難,有人說匯編簡單,我個人不做評價,下面是一個簡單的實例(部分代碼):

main PROC

mov ?eax,5 ?;5EAX寄存器

add ?eax,6 ??;EAX寄存器加6

call ?WriteInt ;顯示EAX中的值

exit

????main ENDP

這里通過調用 writeInt 庫例程使情況稍微簡化了一些,WriteInt本身也包含了相當數量的代碼。通常來說,如果你樂于編程寫實際上并不做什么的的小程序的話,匯編語言并不難學(額...那請問作者,我學匯編干啥)。還有就是,匯編一定要注意細節。細節。

3.1.1 ?整數常量

????整數常量由符號(可選)開頭,后跟一個活多個數字(digit)以及一個表示

基數(radix)的字符后綴。

[{+|-}]數字[基數]

Radix(基數后綴)可以是一下之一(大小寫均可):

??h ??十六進制 ??????????r 編碼實數

??q/o 八進制 ????????????t 十進制(可選)

???d ?十進制 ????????????y 二進制 (可選)

???b ?二進制

如果整數常量后面沒有后綴,就默認是十進制數。下面是一些例子:

26 ??????十進制數 ???????42o ?八進制數

26d ?????十進制數 ???????1Ah ?十六進制數

1010011b 二進制數 ???????0A3h 十六進制數

42q ?????八進制數

以字母開頭的十六進制數常量前面必須加一個0,以防止匯編器將其解釋為標示符。

3.1.2 ?整數表達式

整數表達式是包含整數值和算術運算的數學表達式。整數表達式計算的結果是能夠以32個數據位存儲的整數。下圖是優先級:

?

?有兩種類型的實數常量:十進制實數和編碼(十六進制)實數。十進制實數常量由符號(sign)、整數(integer)部分、小數點、表示小數的整數和指數(exponent)部分組成。

{sign} integer.[integert][exponent]

Sign {+,-}

Exponent E[{+,-}]integer

下面是例子:2. ??+3.0 ??-44.2E+05 ?26.E5

3.1.4 ?字符常量

字符常量是以單引號或者雙引號括起來的單個字符。匯編器將其轉換為與字符對應的二進制數ASCII碼,例如:

‘A’?“d”

3.1.5 ?字符串常量

字符串常量是以單引號或者雙引號括起來的一串字符:

??‘ABC’

??‘X’

??“Goodnight, Asd”

??‘4096’

按下面例子的方式使用嵌套的引號也是可以的:

????“This isn’t a test”

????‘Say “Goodnight,”?Asd’

?

3.1.6 ?保留字

MASM中有一些有特殊含義的保留字,保留字只能用于合適的上下文環境中,有如下不同的類別的保留字:

1.指令助記符,如MOVADDMUL等。

2.偽指令,用于告訴MASM如何編譯程序。

3.屬性,用于為變量和操作數提供有關尺寸以及使用方式的信息,如BYTEWORD

4.運算符,用在常量表達式中。

5.預定義符號,如@data,在編譯時返回整數常量值。

3.1.7 ?標示符

標示符是程序員選擇的名字,用來標示變量、常量、過程或代碼標號。創建標示符時要注意一下幾點:

1.標示符可以包含1-247個字符。

2.標示符大小寫不敏感(MASM默認)。

3.標示符第一個字符必須是字母下劃線或者@、?或$,后續字符可以是數字。

4.標示符不能與匯編器的保留字符相同。

運行匯編器時,在命令行上使用-Cp選項可以使所有的關鍵字和標示符大小寫敏感。

匯編器大量使用@符號作為預定義符號的前綴,因此應盡量避免在自己等一的標示符中使用@符號作為數字符。盡量使用標示符的名字局域描述性并且易于理解,下面是一些有效的標示符:

var1 ????Conut ???&first

_main ?????MAX ????open_file

@@myfile ?xVal ?????_12345

????

3.1.8 ?偽指令

偽指令是內嵌在程序源碼中,由匯編器識別并執行響應動作的命令。與真正的指令不同,偽指令在程序運行時并不執行。偽指令可以用于定義變量、宏以及過程,可用于命名段以及執行許多其他與匯編器相關的簿記任務。MASM中偽指令大小寫不敏感,如.data,.DATA和。Data是等價的。

下面的例子有助于說明偽指令在運行時并不執行。DWORD偽指令告知匯編器要在程序中給一個雙字節變量保留空間。MOV指令在運行時真正執行,把myVar的內容復制到EAX寄存器:


??myVar ?DWORD 26 ?;DWORD 偽指令

??Mov ???eax,myVar ?;MOV指令

??每個匯編器都有一套不同的偽指令。例如,TASMBorland)以及NASMMASM的偽指令有一個公共的交集子集,而GNU匯編器與MASM的偽指令幾乎完全不同。

定義段:匯編偽指令的一個重要功能就是定義程序的節(section)或者段(segment)。

.DATA偽指令標識了程序中包含變量的區域: ????.data

.CODE偽指令標識了程序中包含質量你開個的區域 .code

.STACK偽指令標識了程序中包含運行時棧的區域,并設定了運行時棧的大小:

.stack 100h

3.1.9 ?指令

匯編語言中的指令是一條匯編語句,在程序被匯編后就變成可執行的機器指令了。匯編器把匯編指令翻譯成機器語言字節碼,在運行時可以加載至內存由處理器執行。一條匯編指令包含4個基本部分:

1.標號(可選)

2.指令助記符(必須)

3.操作數(通常是必須的)

4.注釋(可選)

基本格式如下:

?

?

標號:

數據標號:數據標號標識了變量的地址,為在代碼中應用蓋變量提供了方便。例如下例就定義了一個名為countde 變量:

Count DWORD 100

匯編為每個標號分配一個數字地址。在一個標號后定義多個數據項是可以的。在下面的例子中,array標示了第一個數字(1024)的位置,其他在內存中相鄰數字緊接其后:

Array DWORD 1024 ,2048

?????DWORD 4096,8192

?????代碼標號:程序代碼區(存放指令的地方)中的標號必須以冒號(:)結尾。代碼標號通常用做跳轉和循環指令的目標地址。例如,下面的JMP(跳轉)指令將控制權轉到標號target標示的位置,從而構成了一個循環:


Target :

Mov ?ax,bx

...

Jmp ?target

??代碼標號可以和指令在同一行,也可以獨立成行:

??L1: mov ?ax,bx

??L2:

??數據標號不能以冒號結尾,標號命名遵循3.1.7節中討論的標示符名的規則。

?

指令助記符:

指令助記符(instruction mnemonic)是一個簡單的單詞,用于表示一條指令。在英文中,mnemonic是輔助記憶的方法的意思。與此非常相似,匯編語言指令助記符如movaddsub等給出了關于指令要執行何種類型操作的提示:

mov ?將一個值移動(賦值)到另外一個中

add ??兩個值相加

sub ??從一個值中減去另外一個值

mul ??兩個值相乘

?????Jmp ??跳轉到一個新位置

?????call ???調用一個過程

操作數:
?????
一條匯編語言指令可以有0~3個操作數,每個操作數都可能是寄存器、內存操作數、常量表達式或I/O端口。在第2章中討論過寄存器的名字;在3.1.2節中,討論了常量表達式。內存操作數由變量的名字或包含變量地址的一個活多個寄存器制定,變量名字表明了變量的地址,并且指示計算機引用給定內存地址的內容。下表包含了幾個實例操作數。

?

下面是一些帶不同數目操作數的匯編語言指令的例子。例如,STC指令沒有操作數:

?STC ?;設置進位標志

?INC指令有一個操作數:

?Inc ??eax ??; eax 1

?????MOV指令有兩個操作數:

?????mov count,ebx ;EBX送變量count

?????在有兩個操作數的指令中,第一個操作數稱為目的(標)操作數,第二個操作數稱為源操作數。通常,指令會修改目的操作數的內容。例如,在mov指令中,源操作數中的數據被復制到目標操作數中。

注釋:

注釋是程序作者同程序源代碼的閱讀者交流有關程序如何工作的信息的一條重要途徑,程序清單頂部通常包含如下典型的信息:

1.程序功能的描述。

2.程序創建者/修改者的名字。

3.程序創建/修改的日期。

4.程序實現的技術注解。

注釋可以用下面兩種方法制定:

單行注釋: 以分號(;)字符開始

塊注釋:以COMMENT偽指令以及一個用戶定義的符號開始,編譯器忽略后面所有的文本行,直到另一個相同的用戶定義符號出現。例如:

COMMENT ?!

???????Dasdads

???????Asdasd asdas das asd

!

也可使用任何其他符號:

COMMENT ?$

???????Dasdads

???????Asdasd asdas das asd

$

3.1.10 ?NOP(空操作)指令

最安全的指令時NOPno operation,一條NOP指令占用一個字節的存儲,什么也不做。有事編譯器或匯編器使用NOP指令把代碼對齊到偶數地址邊界。在下面的例子中,第一個MOV指令生成三個機器字節碼,NOP指令將第三條指令的地址對齊到雙字節(4的倍數)邊界上。

00000000 mov ax,bx

00000003 nop ???????;對齊下一條指令

00000004 mov edx,ecx


總結

以上是生活随笔為你收集整理的Intel汇编语言程序设计学习-第三章 汇编语言基础-上的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。

主站蜘蛛池模板: 天天插天天操天天干 | 国产精品夜色一区二区三区 | 手机看片日韩久久 | 免费看一级黄色大全 | 亚洲综合久久网 | 天天插天天爽 | 在线一区 | 亚洲爆爽av| 97超碰碰 | 国产一区二区视频免费观看 | 国产99在线观看 | 99精品视频一区二区三区 | 男生坤坤放进女生坤坤里 | 国产在线无 | 综合色站导航 | 日本黄色xxxxx| 性色视频网站 | 日韩va视频 | 国产综合区 | 欧美一区二区三区免费在线观看 | 91视频成人免费 | 免费三级黄| 97视频国产 | 大尺度做爰呻吟舌吻情头 | 亚洲第一视频在线播放 | 极品久久久久久 | 一区二区三区在线免费 | 成人a级大片 | 91学生片黄 | 国产成人av一区二区三区 | 日韩无码专区 | 久久国产片 | 一区二区三区视频在线观看免费 | 热热热av| 国产麻豆网 | 一区二区视频免费看 | 亚洲综合99| 国产一级黄色录像 | 嫩草社区 | 国产一区二区三区观看 | 国产偷怕| 99riav1国产精品视频 | 国产黄片一区二区三区 | 欧美久久一级 | 人妻互换一二三区激情视频 | 欧美黑人一区二区三区 | 天天想你在线观看完整版高清 | 亚洲国产婷婷香蕉久久久久久99 | av免费观看入口 | 在线观看免费人成视频 | 亚洲无码久久久久久久 | 草草福利视频 | 精品日韩制服无码久久久久久 | 成人精品网址 | 黄色三级三级三级 | 免费一区二区三区四区 | 国产精品国产精品国产专区不片 | 涩涩爱在线 | 在线成人一区二区 | 中文字幕在线观看一区二区三区 | 就操成人网 | 久久久18禁一区二区三区精品 | 亚洲精品一区三区三区在线观看 | 欧美在线v | 五月婷综合网 | 开心激情站 | 亚洲h在线观看 | 亚洲一级二级三级 | 丁香婷婷久久 | 操极品美女 | 精品动漫一区二区三区的观看方式 | 在线视频免费观看你懂的 | 一区二区三区日韩视频 | 欧美一级做 | 在线观看亚洲国产 | 91色视频在线 | 自拍一区在线 | 国产一区视频在线观看免费 | 久久精品a | 国产一区二区在线播放视频 | 狠狠干欧美 | 亚洲欧美日韩国产一区 | 欧美黑人一区 | a视频免费观看 | 在线高清免费观看 | 性活交片大全免费看 | 无码任你躁久久久久久老妇 | 污污免费视频 | 欧美性猛交xxxⅹ富婆 | www.av免费 | 污视频网站入口 | av资源库| 国产超碰在线 | 久久亚洲国产成人精品性色 | 精品欧美一区二区三区久久久 | 天天摸夜夜 | 日本成人社区 | 不许穿内裤随时挨c调教h苏绵 | 久久电影一区二区 |