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

歡迎訪問 生活随笔!

生活随笔

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

编程问答

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

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

3.2 ?例子:整數(shù)相加減

? ? 現(xiàn)在來看一個進行整數(shù)加減操作的匯編語言小程序。寄存器用于存放中間數(shù)據(jù),我們調(diào)用一個庫函數(shù)在屏幕上顯示寄存器的內(nèi)容。下面是程序的源碼:

TITLE Add and Subtract (AddSub.asm) ;This program adds and subtracts 32-bit integers. INCLUDE Irvine32.inc .code main PROC mov eax,10000h ;EAX = 10000h add eax,40000h ;EAX = 50000h sub eax,20000h ;EAX = 30000h call DumpRegs ;display registers exit main ENDP END main

? ? 執(zhí)行結果(我用vs2012+MASM32執(zhí)行的

?

? ? 現(xiàn)在來解釋上面代碼:

TITLE Add and Subtract (AddSub.asm) ??TITLE偽指令將整行標為注釋,該行可放置任何東西。

;This program adds and subtracts 32-bit integers.??編譯器忽略分號右邊的所有文本。

INCLUDE Irvine32.inc ??INCLUDE偽指令從Irvine32.inc文件中復制必須的定義和設置信息,Irvine32.inc在匯編器的INCLUDE目錄中。

.code ??.code偽指令用來標記代碼段的開始,代碼段中存放程序中的所有可執(zhí)行語句。

Main PROC ?PROC偽指令用來標示一個過程的開始,我們?yōu)槌绦蛑形ㄒ坏倪^程選擇的名字是main.

Mov eax,10000h ?MOV指令把整數(shù)10000h送(復制)到EAX寄存器。第一個操作數(shù)(EAX)稱為目的操作數(shù),第二個操作數(shù)稱為源操作數(shù)。

add eax,40000h ?ADD指令將40000h加到EAX寄存器上。

sub eax,20000h ?SUB指令從EAX寄存器中減掉20000h

CALL調(diào)用一個現(xiàn)實CPU寄存器值的過程,這是正式程序正確運行的一種有效方法。

exit

main ENDP exit語句(間接)調(diào)用一個預定義的MS-Windows函數(shù)來終止程序。ENDP偽指令標記main過程的結束。注意,exit并不是MASM的關鍵字,而是Irvine32.inc中定義的命令,它提供了一種結束程序的簡便方法。

END main

END 偽指令表明該行是匯編程序的最后一行。編譯器將忽略該行后面的所有內(nèi)容。其后的標示符main是程序啟動過程(即程序啟動時執(zhí)行的子程序,或程序入口點)的名字。


? ? 段:程序是以段組織的,常見的段有代碼段、數(shù)據(jù)段和堆棧段等。代碼段包含程序的全部可執(zhí)行指令,通常代碼段中包含一個活多個過程,其中一個是啟動過程。在AddSub程序中,main就是啟動過程。堆棧段用于存放過程的參數(shù)和局部變量,數(shù)據(jù)段則用于存放變量。

? ? 編碼風格:由于匯編語言是大小寫不敏感的(默認情況下),因此就源代碼的大小寫而言,沒有固定的規(guī)則,單位了增強可讀性,應該再代碼中一致地使用大小寫及標示符命名。

3.2.1 ?AddSub的另一個版本

? ? AddSub程序使用了Irvine32.inc文件,該文件隱藏了一些實現(xiàn)細節(jié)。也許最終你能夠理解Irvine32.inc中所有東西,不過現(xiàn)在我們才剛剛開始學習匯編語言,所以有必要不依賴于它來一發(fā)上面那個AddSub的程序,粗體字用于標示與前一個程序的不同之處:

TITLE Add and Subtract (AddSubAlt.asm) ;This program adds and subtracts 32-bit integers. .386 .model flat,stdcall .stack 4096 ExitProcess PROTO, dwExitCode:DWORD DumpRegs PROTO .code main PROCmov eax,10000h add eax,40000h sub eax,20000h call DumpRegs INVOKE ExitProcess,0 main ENDP END main

運行結果:


解釋新增部分:

.386 ?指出了改程序要求的最低CPUIntel386)。

.model flat,stdcall ?.MDOE偽指令只是匯編器為保護模式程序生成代碼,STDCALL允許調(diào)用MS-Windows函數(shù)。

ExitProcess PROTO ,dwExitCode:DWORD

DumpRegs PROTO

兩條PROTO偽指令聲明了改程序使用的過程原型;ExitProcess是一個MS-Windows函數(shù),其作用是終止當前程序(進程);DumpRegsIrvine32連接庫中一個現(xiàn)實寄存器的過程。

INVOKE ExitProcess,0 ?程序通過調(diào)用ExitProcess來結束執(zhí)行,傳遞給該函數(shù)的參數(shù)是返回碼。取值是0.INVOKE是一個用于調(diào)用過程或函數(shù)的匯編偽指令。

3.2.2 ?程序模板

匯編語言程序有一個簡單的基本結構,這個框架隨情況不同可能略有變化。開始編寫程序的時候,讀者可借助于模板迅速創(chuàng)建具有基本元素的空程序外殼,然后只需要填寫其中缺少的部分并以新名字保存文件即可,這樣就可以避免重復鍵入相同的內(nèi)容。下面的保護莫模式程序模板,便于根據(jù)需要進行自定義。注意在文件中插入的注釋表明了何處需要加讀者自己的代碼:

TITLE Program Template (Template.asm) ;程序的描述: ;作者: ;創(chuàng)建日期 ;修改: ;日期: ;修改者 INCLUDE Irvine32.inc .data;(在此插入變量) .code main PROC;(在此插入可執(zhí)行代碼) exit main ENDP;(在此插入其他子程序) END main

使用注釋:程序的開始位置插入了幾個注釋區(qū)域。在程序中包含程序的描述、作者的名字、創(chuàng)建日期以及后續(xù)的修改信息等是一個不錯的注意。這種文檔對任何閱讀程序的人都很有用。

3.3 ?匯編、連接和運行程序

匯編器生成一個包含機器語言的文件,稱為目標文件。目標文件還不能執(zhí)行,必須把目標文件傳遞給另外一個稱為鏈接器的程序,由鏈接器生成可執(zhí)行文件。可執(zhí)行文件就可以在MS-DOS/MS-Windows命令提示符下執(zhí)行了。

3.3.1 ?匯編-鏈接-執(zhí)行

編輯、編譯、鏈接和執(zhí)行匯編語言程序的過程總結在下圖中:


下面是每個步驟的詳細說明。

1.程序員使用文本編輯器創(chuàng)建ASCII文本文件,稱為源文件(source file)。

2.匯編器讀取源文件并生成目標文件(object file,目標文件是源文件到機器語言的翻譯。另外還可以選擇生成列表文件(listing file)。如果發(fā)生了錯誤,程序員必須回到1修正程序。

3.鏈接器讀取目標文件并檢查程序是否調(diào)用了鏈接庫中的過程,鏈接器從庫中復制所需的過程并將其同目標文件合并在一起生成可執(zhí)行文件(executable file,還可以選擇生成映像文件(map file)。

4.操作系統(tǒng)的裝載器(loader)將可執(zhí)行文件讀入內(nèi)存,并使CPU轉(zhuǎn)移到程序的其實地址開始執(zhí)行。

列表文件

列表文件的內(nèi)容包括程序源代碼及行號、偏移地址、翻譯后的機器碼和一個符號表,其格式很適合于打印。下面是例子:

測試代碼:

TITLE Add and Subtract (AddSubAlt.asm) ;This program adds and subtracts 32-bit integers. .386 .model flat,stdcall .stack 4096 ExitProcess PROTO, dwExitCode:DWORD DumpRegs PROTO .code main PROCmov eax,10000h add eax,40000h sub eax,20000h call DumpRegs INVOKE ExitProcess,0 main ENDP END main

對應的列表文件:

?

?

鏈接器創(chuàng)建或更新的文件

??映像文件:影響文件是包含被連接程序的分段信息的文本文件,主要包含以下信息:

??1.模塊名。模塊名作為鏈接器生成的可執(zhí)行文件的基本名(除擴展名外的部分)

??2.程序文件頭中(不是取自文件系統(tǒng))的時間戳。

??3.程序中各個段組的列表,包括每個段組的起始地址、長度、組名和類別信息。

??4.公共符號的列表,包括每個符號的地址、名稱、線性地址和定義符號的模塊。

??5.程序入口地址。

??程序數(shù)據(jù)庫文件:若以-ZI(調(diào)試)選項來編譯程序,MASM就會創(chuàng)建程序數(shù)據(jù)庫文件(*.PDB)。在鏈接階段,鏈接器讀取并更新它。在調(diào)試程序的時候,調(diào)試器可以根據(jù)PDB顯示程序的源代碼、數(shù)據(jù)、運行時棧以及其他附加信息。

?

總結

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

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

主站蜘蛛池模板: 99久久一区 | 日韩成人免费视频 | 丰满少妇熟乱xxxxx视频 | 亚洲欧美国产一区二区 | 日韩中出在线 | 欧美日韩99 | 九九热视频精品 | 嫩草国产精品 | 91黑人精品一区二区三区 | 一区二区三区精品视频在线观看 | 国内精品国产成人国产三级 | 亚洲免费成人在线 | 精品无码国产av一区二区三区 | 奇米91| 一区二区日本 | 成人网免费看 | 色婷在线 | 日韩av一二三区 | 开心激情五月网 | 91漂亮少妇露脸在线播放 | 久久免费一区 | 久热精品在线 | www.国产高清| 亚洲午夜一区二区 | 欧美一级特黄aaaaaa大片在线观看 | 欧洲精品久久久 | 天天爽夜夜爽夜夜爽 | 欧美黑人又粗又大的性格特点 | 欧美午夜免费 | 国产第一页在线播放 | а√天堂资源官网在线资源 | 国产人妖av | 国产欧美一区二区三区沐欲 | 欧美a√在线 | 国产日韩欧美精品一区 | 男男受被啪到高潮自述 | 国产主播自拍av | 久久人人干 | 99热这里只有精品在线观看 | 日本高清视频www夜色资源 | xxxx黄色| 欧美精品在欧美一区二区 | 色婷婷av一区二区三区gif | aaaaa级少妇高潮大片免费看 | 欧美日韩国产区 | 中国免费一级片 | 国产大片一区二区三区 | 日本不卡不卡 | 精品日本一区二区三区在线观看 | 亚洲精品国产欧美在线观看 | 国产又粗又猛又爽又黄91 | 日韩v欧美 | 叶山小百合av一区二区 | 国产男女猛烈无遮挡免费观看网站 | 日本三级吃奶头添泬无码苍井空 | 日韩欧美在线视频免费观看 | 久久精品国产网红主播 | 熟女俱乐部一区二区视频在线 | 91视频日本 | 少妇流白浆 | 蜜桃av鲁一鲁一鲁一鲁俄罗斯的 | 黄色片视频免费 | 9色av | 日本人妻伦在线中文字幕 | 99国产精品久久 | 一级少妇毛片 | 欧美日皮视频 | 国产人妖在线观看 | 国产成人在线一区二区 | 亚洲色图制服诱惑 | 一本色道久久综合 | aaa在线视频| 尤物av无码色av无码 | 日韩精品一级 | 国产一级二级毛片 | 一级性生活毛片 | 国语对白av | 午夜精品久久久久久久久久蜜桃 | 成人在线免费网站 | 在线成人福利 | 浪漫樱花动漫在线观看免费 | 插我舔内射18免费视频 | 免费在线色视频 | 一区二区三区免费在线观看 | 亚洲 国产 欧美 日韩 | 亚洲国产综合久久 | 色猫咪av| 日韩专区欧美专区 | 一边摸一边做爽的视频17国产 | 亚洲区欧美 | 久久理论| 秋霞av一区二区三区 | 黄色小电影网址 | 91亚洲国产成人精品一区二三 | 免费黄色短片 | 美女100%视频免费观看 | 超碰美女在线 | 蜜桃视频在线观看一区二区 | 国产原创在线播放 |