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

歡迎訪問 生活随笔!

生活随笔

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

编程问答

汇编语言整数加减法示例

發布時間:2025/3/15 编程问答 29 豆豆
生活随笔 收集整理的這篇文章主要介紹了 汇编语言整数加减法示例 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

在《第一個匯編語言程序》一節中給出的 AddTwo 程序,并添加必要的聲明使其成為完全能運行的程序。

?

; AddTwo.asm -兩個 32 位整數相加 .386 .model flat,stdcall .stack 4096 ExitProcess PROTO, dwExitCode:DWORD .code main PROC mov eax,5 ;將數字5送入eax寄存器 add eax,6 ;eax寄存器加6 INVOKE ExitProcess,0 main ENDP END main

第 3 行是 .386 偽指令,它表示這是一個 32 位程序,能訪問 32 位寄存器和地址。第 4 行選擇了程序的內存模式(flat),并確定了子程序的調用規范(稱為 stdcall)。其原因是 32 位 Windows 服務要求使用 stdcall 規范。第 5 行為運行時堆棧保留了 4096 字節的存儲空間,每個程序都必須有。

第 6 行聲明了 ExitProcess 函數的原型,它是一個標準的 Windows 服務。原型包含了函數名、PROTO 關鍵字、一個逗號,以及一個輸入參數列表。ExitProcess 的輸入參數名稱為 dwExitCode。

可以將其看作為給 Windows 操作系統的返回值,返回值為零,則表示程序執行成功;而任何其他的整數值都表示了一個錯誤代碼。因此,程序員可以將自己的匯編程序看作是被操作系統調用的子程序或過程。當程序準備結束時,它就調用 ExitProcess,并向操作系統返回一個整數以表示該程序運行良好。

大家可能會好奇,為什么操作系統想要知道程序是否成功完成。理由如下:與按序執行一些程序相比,系統管理員常常會創建腳本文件。在腳本文件中的每一個點上,系統管理員都需要知道剛執行的程序是否失敗,這樣就可以在必要時退出該腳本。

腳本通常如下例所示,其中,ErrorLevel1 表示前一步的過程返回碼大于或等于 1 :

call program_1 if ErrorLevel 1 goto FailedLabel call program_2 if ErrorLevel 1 goto FailedLabel :SuccessLabel. Echo Great, everything worked!

現在回到 AddTwo 程序清單。第 15 行用 end 偽指令來標記匯編的最后一行,同時它也標識了程序的入口(main)。標號 main 在第 9 行進行了聲明,它標記了程序開始執行的地址。

匯編偽指令回顧

現在回顧一些在示例程序中使用過的最重要的匯編偽指令。

首先是 .MODEL 偽指令,它告訴匯編程序用的是哪一種存儲模式:

.model flat,stdcall

32 位程序總是使用平面(flat)存儲模式,它與處理器的保護模式相關聯。關鍵字 stdcall 在調用程序時告訴匯編器,怎樣管理運行時堆棧。然后是 .STACK 偽指令,它告訴匯編器應該為程序運行時堆棧保留多少內存字節:

.stack 4096

數值 4096 可能比將要用的字節數多,但是對處理器的內存管理而言,它正好對應了一個內存頁的大小。所有的現代程序在調用子程序時都會用到堆棧。首先,用來保存傳遞的參數;其次,用來保存調用函數的代碼的地址。

函數調用結束后,CPU 利用這個地址返回到函數被調用的程序點。此外,運行時堆棧還可以保存局部變量,也就是,在函數內定義的變量。

.CODE 偽指令標記一個程序代碼區的起點,代碼區包含了可執行指令。通常,.CODE 的下一行聲明程序的入口,按照慣例,一般會是一個名為 main 的過程。程序的入口是指程序要執行的第一條指令的位置。用下面兩行來傳遞這個信息:

.code main PROC

ENDP 偽指令標記一個過程的結束。如果程序有名為 main 的過程,則 endp 就必須使用同樣的名稱:

main ENDP

最后,END 偽指令標記一個程序的結束,并要引用程序入口:

END main

如果在 END 偽指令后面還有更多代碼行,它們都會被匯編程序忽略。程序員可以在這里放各種內容一一程序注釋,代碼副本等等,都無關緊要。

運行和調試 AddTwo 程序

使用 Visual Studio 可以很方便地編輯、構建和運行匯編語言程序。下面的步驟,按照 Visual Studio 2012,說明了怎樣打開示例項目,并創建 AddTwo 程序:

1) 啟動計算機上安裝的最新版本的 Visual Studio。

2) 打開 Visual Studio 中 Solution Explorer 窗口。它應該已經是可見的,但是程序員也可以在 View 菜單中選擇 Solution Explorer 使其可見。

3) 在 Solution Explorer 窗口右鍵點擊項目名稱,在文本菜單中選擇 Add,再在彈出菜單中選擇 New Item。

4) 在 Add New File 對話窗口中(如下圖所示 ) ,將文件命名為 AddTwo.asm,填寫 Location 項為該文件選擇一個合適的磁盤文件夾。

5) 單擊 Add 按鈕保存文件。

6) 鍵入程序源代碼,如下所示。這里大寫關鍵字不是必需的:

; AddTwo.asm - adds two 32-bit integers. .386 .model flat,stdcall .stack 4096 ExitProcess PROTO,dwExitCode:DWORD .code main PROC mov eax, 5 add eax, 6 INVOKE ExitProcess,0 main ENDP END main

7) 在 Project 菜單中選擇 Build Project,查看 Visual Studio 工作區底部的錯誤消息。這被稱為錯誤列表窗口。注意,當沒有錯誤時,窗口底部的狀態欄會顯示 Build succeeded。

調試演示

下面將展示 AddTwo 程序的一個示例調試會話。演示使用的是 Visual Studio 2012,不過,自 2008 年起的任何版本的 Visual Studio 都可以使用。

運行調試程序的一個方法是在 Debug 菜單中選擇 Step Over。按照 Visual Studio 的配置,F10 功能鍵或 Shift+F8 組合鍵將執行 Step Over 命令。

開始調試會話的另一種方法是在程序語句上設置斷點,方法是在代碼窗口左側灰色垂直條中直接單擊。斷點處由一個紅色大圓點標識出來。然后就可以從 Debug 菜單中選擇 Start Debugging 開始運行程序。

如果試圖在非執行代碼行設置斷點,那么在運行程序時,Visual Studio 會直接將斷點前移到下一條可執行代碼行。

當調試器被激活時,Visual Studio 窗口底部的狀態欄變為橙色。當調試器停止并返回編輯模式時,狀態欄變為藍色。可視提示是有用的,因為在調試器運行時,程序員無法對程序進行編輯或保存。

自定義調試接口

在調試時可以自定義調試接口。例如,如果想要顯示 CPU 寄存器,實現方法是,在 Debug 菜單中選擇 Windows,然后再選擇 Registerso, 其中 Registers 窗口可見,同時還關閉了一些不重要的窗口。EAX 數值顯示為 0000000B,是十進制數 11 的十六進制表示。

Registers 窗口中,EFL 寄存器包含了所有的狀態標志位(零標志、進位標志、溢出標志等)。如果在 Registers 窗口中 右鍵單擊,并在彈出菜單中選擇Flags,則窗口將顯示單個的標志位值。

Registers 窗口的一個重要特點是,在單步執行程序時,任何寄存器,只要當前指令修改了它的數值,就會變為紅色。盡管無法在打印頁面(它只有黑白兩色)上表示出來,這種紅色高亮確實顯示給程序員,使之了解其程序是怎樣影響寄存器的。?

在 Visual Studio 中運行一個匯編語言程序時,它是在控制臺窗口中啟動的。這個窗口與從 Windows 的 Start 菜單運行名為 cmd.exe 程序的窗口是相同的。或者,還可以打開項目 DebugBin 文件夾中的命令提示符,直接從命令行運行應用程序。如果采用的是這個方法,程序員就只能看見程序的輸出,其中包括了寫入控制臺窗口的文本。查找具有相同名稱的可執行文件作為 Visual Studio 項目。

下一篇:匯編器

強力推薦閱讀文章

年薪40+W的大數據開發【教程】,都在這兒!

總結

以上是生活随笔為你收集整理的汇编语言整数加减法示例的全部內容,希望文章能夠幫你解決所遇到的問題。

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

主站蜘蛛池模板: 最新中文字幕一区 | 欧洲精品久久久久毛片完整版 | 欧美成人久久 | 中文字幕xxx | porn亚洲| 久久久久久久久久久久久女国产乱 | 久久一二三区 | 国产免费一区二区三区在线播放 | 337p粉嫩日本欧洲亚洲大胆 | 中文字幕在线视频免费 | 色综合成人| 欧美一级爆毛片 | 国产高清在线视频 | 国产视频在线观看免费 | 91中文字幕永久在线 | 一本久道久久综合 | 黄色录像a| 欧美特级黄色片 | 国产一区一一区高清不卡 | 777欧美| 国产高清在线视频观看 | 秋霞在线一区二区 | 亚洲日本视频 | 教练含着她的乳奶揉搓揉捏动态图 | 日本全黄裸体片 | 在线观看视频国产 | 久久黄色av| www.在线观看麻豆 | 欧美高清性xxxxhdvideosex | 黄色免费网站在线观看 | 波多野 在线 | 国产毛片毛片毛片毛片 | 国产成人精品一区二区三区免费 | 性欧美jzjz2 九草影院 | 久久精品在这里 | 日韩爽片 | 欧美一区二区三区四区五区 | 95看片淫黄大片一级 | 久久久久久久久久久久久国产 | 有奶水的迷人少妇 | 激情专区 | 亚洲最大在线视频 | 欧美级毛片| 禁断介护av一区二区 | 91中文字幕在线视频 | 国产ts系列| 国产无限制自拍 | 日韩欧美www | 黄色av网站免费观看 | 国产精品自拍小视频 | 人人看人人模 | 美日韩丰满少妇在线观看 | 黄色片地址 | 啪啪av导航 | 国产一区二区三区免费 | 欧美在线视频免费播放 | 国av在线 | 又大又粗弄得我出好多水 | 一区二区三区爱爱 | 青青伊人精品 | 综合网亚洲 | 日日操天天操夜夜操 | 一本之道高清无码视频 | 久久88| 黄色91免费观看 | 亚洲4区| 国产精品高潮呻吟 | 国产校园春色 | 日韩喷潮| 熟女人妇 成熟妇女系列视频 | 国内精品视频在线播放 | 爽爽窝窝午夜精品一区二区 | 性猛交娇小69hd | 一女二男一黄一片 | 樱桃成人精品视频在线播放 | 亚洲精品无吗 | 久久久久久国产精品三级玉女聊斋 | 色综合天天 | 在线免费观看国产精品 | 国产精品二区一区二区aⅴ污介绍 | 老牛影视av牛牛影视av | 超碰97成人 | 伊人激情在线 | 好男人影视www | 精品久久久中文字幕人妻 | www.在线看| 91色国产 | 中文字幕一区二区三区四区不卡 | 欧洲精品视频在线观看 | cao在线| 少妇高潮灌满白浆毛片免费看 | 国产精品久久久久久久9999 | 九九精品免费视频 | 在线高清免费观看 | 亚洲精品高清视频在线观看 | 日本一区二区在线播放 | 人人妻人人爽人人澡人人精品 | 福利在线观看 | 老熟妇一区二区三区啪啪 |