1. 程式人生 > >在DOS下如何進行組合語言程式設計

在DOS下如何進行組合語言程式設計

  組合語言是一種與機器語言最接近的語言,有三部分組成,

a:彙編指令,機器碼的助記符,有對應的機器碼。給機器識別的;

b:偽指令,沒有對應的機器碼,由編譯器執行,計算機並不執行,是為了更容易的理解程式碼,給程式設計人員看的。

c:其他符號:‘+’,‘-’,‘*’,‘/’  ,有編譯器執行,沒有對應的機器碼。

  雖說現在的程式語言多種多樣,最簡單的分為面向過程,和麵向物件。可是一切語言都源於最初的組合語言。

  要在dos環境下進行組合語言程式設計,要用到一個應用程masm,他可以使組合語言在dos環境下執行,可是光有這個不行,還要進行系統環境變數的配置,大致以java的環境變數的配置相似,在組合語言的執行結果,並不會在螢幕上顯示執行後的程式結果。因為就要用到偵錯程式debug,這樣就可以在記憶體和cpu的暫存器中看到程式執行的結果,以及內部暫存器內容的變化。

   在這兒就用一個最簡單的例子說明如何在dos下執行masm執行彙編程式,和如何用debug除錯一個程式。

;loop2.asm

assume cs:code  

code segment

mov ax,0fffh

mov dx,ax

mov bx,0        ;初始化ds:bx指向ffff:0

mov dx,0        ;初始化累加暫存器dx,(dx)=0

mov cx,12       ;迴圈累加計數器cx,(cx)=12,(cx)=12

s:mov al,[bx] 

mov ah,0

add dx,ax       ;間接向dx中加上((ds)*16+(bx))單元中的值

inc bx          ;ds:bx指向下一個單元

loop s

mov ax,4c00h

int 21h

code ends

end

現在masm下執行這個程式,先進行編譯,生成.obj檔案


生成.obj檔案後,連結.obj檔案,就可以生成可執行檔案.exe


執行完exe檔案就可以進行用debug進行除錯了。


Dos下操作時需要用命令操作,在用debug除錯時,

先輸入R 命令,觀察暫存器的的初始值,

U命令是進行反彙編,在反彙編的中就可以看到機器程式碼了;

D命令是觀看記憶體的變化。

DS:00直接可以看暫存器中的內容,以及設定暫存器的值,

E,是用於編輯

A命令可以直接在dos環境下,輸入彙編指令。

T是用於單步執行指令,可以一步步的看清記憶體中暫存器中值得變化。


在執行彙編指令的過程中,先把彙編指令翻譯成機器程式碼,儲存在記憶體中,這是在記憶體中儲存的資料不能分清是資料地址還是指令,都僅僅是二進位制程式碼。只用通過CPU的呼叫實現他們的價值,CPU和記憶體之間的通訊只要是通過匯流排。先是CPU通過CS程式碼段暫存器,IP指令暫存器。CPU先通過CS和IP暫存器通過地址匯流排給記憶體送去地址,地址的計算方法是實體地址=段地址*16+偏移地址,然後送到記憶體找到相應的地址,取出地址中的內容,通過資料匯流排送到CPU,然後對這個資料進行處理。


相關推薦

DOS如何進行組合語言程式設計

  組合語言是一種與機器語言最接近的語言,有三部分組成, a:彙編指令,機器碼的助記符,有對應的機器碼。給機器識別的; b:偽指令,沒有對應的機器碼,由編譯器執行,計算機並不執行,是為了更容易的理解程式碼,給程式設計人員看的。 c:其他符號:‘+’,‘-’,‘*’,‘/’

Windows進行Socket程式設計問題

做Windows網路程式設計經常遇到下面這種情況: c:\program files\microsoft visual studio 8\vc\platformsdk\include\winsock2.h(112) : error C2011: “fd_set”: “str

Ubuntu環境利用Python3+PyQt5+Eric6進行GUI程式設計

首先當然是要配置環境啦,這裡特別感謝@ideber的文章,安裝過程已經非常詳細了。 原文地址:http://blog.csdn.net/idber/article/details/40076821

如何在ARM進行高效的C程式設計

如何在ARM下進行高效的C程式設計? 通過一定的風格來編寫C程式,可以幫助C編譯器生成執行速度更快的ARM程式碼。下面就是一些與效能相關的關鍵點: 1.對區域性變數、函式引數和返回值要使用signed和unsigned int型別。這樣可以避免型別轉換,而且可高效地使用ARM的3

教程|使用陣列進行陣列程式設計

    訪問flyai.club,一鍵建立你的人工智慧專案   知識點4:用於布林型陣列的方法 sum經常被用來對布林型陣列中的True值計數:   另外還有兩個方法any和all,它們對布林型陣列非常有用。

學習linux環境彙編的好書《組合語言程式設計

.2.2 ia-32的高階特性 2.2.1 x87浮點單元 2.2.2 多媒體擴充套件 2.2.3 流化simd擴充套件 2.2.4 超執行緒 2.3 ia-32處理器系列 2.3.1 intel處理器 2.3.2 非intel處理器 2.4 小結 第3章 相關的工具 3.1 開發工具 3.1.1 彙編器 3

如何在dos連接進入mysql對數據庫進行操作

內部 分享 net 分享圖片 其他 命令 round 添加數據 rdquo 一、:windows+R 進入命令命令提示符 輸入 net start mysql 若出現系統錯誤,要將命令提示符以管理員身份運行 若出現不是內部指令,進入下面環境變量設置界面,配置path

Linux進行硬盤掛載、分區、刪除分區,格式化,掛載,卸載方法

硬盤 訪問 9.png dir 輸入 str 創建 指定 命令 本文簡單介紹了下文件系統及其操作(df命令),磁盤分區、格式化,還有最主要是掛載操作。 在這裏對“掛載”做個說明,我們都知道文件系統是創建在磁盤上面的,每個文件系統都有獨立的inode、block等信息,而這

dos命令記錄以及dos通過進程id查找工作路徑

當前 tom com 這樣的 exec 連接 roc 找到 ble 摘自:http://www.cnblogs.com/lisuyun/p/5880815.html dos命令 tasklist |findstr "1696" 通過進程id查看進程名 tasklist 列

linux SFTP用戶創建 不允許用戶登錄,並且連接只允許在制定的目錄進行操作

重啟 login mil shell man 權限 directory end roo 1.創建用戶 groupadd sftp 2.添加用戶並設置為sftp組 useradd -g sftp -s /sbin/nologin -M sftp (/sbin/nolo

dos【mysql】的基礎操作

password 查看數據庫 ren class first 錯誤 rop log mysql 【基本操作】 查看幫助 (help ?)\h \? 退出(exit quit) \q 如果寫錯了命令,想要清除當前輸入命令的語句,在錯誤的命令之後加(clear)

dos用fc比較文件

fc 文件比較fc: 1.fc是什麽: fc是file compare的縮寫,即文件比較 2.fc可以用來幹什麽: 官方解釋:比較兩個文件或兩個文件集並顯示它們之間的不同 個人理解:fc打印出兩個文件之間的內容,讓命令使用者可以直觀的看到兩文件之間的區別,但是看不到兩個文件之間功能的地方;所以可以用來查

windows7進行ubuntu U盤啟動盤的制作

ref 刻錄軟件 u盤啟動盤制作工具 gpo 解決方法 步驟 先後 進行 開始 原來的電腦系統是windows7旗艦版,下載的iso鏡像是Ubuntu17.04,鏡像大小為1.5G 用的U盤是SanDisk 16G (感覺用來刻錄1.5G的鏡像有點浪費) 刻錄軟件用萬

dos怎麽運行java程序

gpo exp 完成 打開 源程序 編輯 檢測 註意 list 打開開始,運行cmd,進入dos界面。 或用快捷鍵win +R,輸入cmd,按Enter進入dos界面 2.分別運行java,和javac,檢測jdk是否已經配置好,如果沒有配置好需先配置好JDK。

linux進行base64編碼解碼

image 分享 clas 技術分享 post blog div img 技術 1.編碼 2.解碼 linux下進行base64編碼解碼

django進行項目的部署

ngs http read sudo 運行 訪問服務器 創建目錄 添加 生產 -------------------Django下進行對應的服務器配置1、服務器購買本人在阿裏雲購買了一個服務器,操作系統為windows server2008/Linux(ubuntu)2、服

如何在DOS以管理員身份執行命令?

管理員 info -s ont window 命令 com 管理 轉換 原創 普通User的DOS窗口: 以管理員身份運行的DOS窗口: 轉換(Windows10系統下): 13:11:55 2018-10-18如何在DOS下以管理員身份執行命令?

DOS批量處理檔案指令碼

@echo off set SOURCE_DIR=e:\download\src set TARGET_DIR=e:\download\dst set CONVERT_TOOL=convert.exe for /r %SOURCE_DIR% %%i in (*) do if not exist %T

魯賓遜非標準微積分全面覆蓋國內高等數學課程內容 此時此刻,“預告:電子版微積分投放安排,陽光事業在陽光進行”,2018年08月05日發表, 11:58:31 yuanmeng001 此刻閱讀數:

魯賓遜非標準微積分全面覆蓋國內高等數學課程內容   此時此刻,“預告:電子版微積分投放安排,陽光事業在陽光下進行”,2018年08月05日發表, 11:58:31 yuanmeng001 此刻閱讀數:10101。這裡的“10101”是一個好數字,不拐彎抹角,有話直說。 我

組合語言程式設計( 利用c語言快速理解彙編)

文章目錄 組合語言程式設計 一 操作碼和運算元 1 操作碼 2 運算元 3 語句格式 4 源程式框架 庫函式 二 資料定址方式 子程式