❶ 使用8086匯編語言編寫程序 編寫程序實現:將從鍵盤輸入的小寫字母轉換成大寫字母輸出。 程序流程圖,程序
data segment
chars db 200 p(?) ;開辟200位元組的緩沖區
data ends
;---------------------------------
code segment
assume cs:code,ds:data
start :
push ds
mov ax,0
push ax
mov ax,data
mov ds,ax
lea bx ,chars
mov si,0
mov ch,0
;----------------------輸入字元子程序
scanf:
mov ah,1
int 21h
cmp al,0dh
jz crt
cmp al,61h
jnb L1 ;al>='a'
mov [bx],al
inc bx
inc ch
jmp scanf
;--------------------------
;-----------------------輸出字元
crt:
mov dl,chars[si]
mov ah,2
int 21h
inc si
dec ch
jz exit
jmp crt
;----------------------
exit:
mov ah,4ch
int 21h
;----------------------
L1:
cmp al,7ah ;al<='z'
jbe L2
mov [bx],al
inc bx
inc ch
jmp scanf
;---------------------
L2:
sub al,20h
mov [bx],al
inc bx
inc ch
jmp scanf
;---------------------
code ends
end start
或者
data segment
a db 'abcd$'
b db 'abcd$'
data ends
stack segment stack
db 200 p(?)
stack ends
code segment
assume cs:code,ds:data,ss:stack
a1 proc far
start:mov ax,data
mov ds,ax
mov cx,10
call upper
mov dx,offset b
mov ah,9h
int 21h
mov ah,4ch
int 21h
a1 endp
upper proc near
mov si,0
mov cx,4
l1: mov dl,a[si]
mov al,20h
sub dl,al
mov b[si],dl
inc si
loop l1
ret
upper endp
code ends
end start
❷ 匯編語言程序是什麼
問題一:什麼是匯編語言? 計算機程序設計語言的發展,經歷了從機器語言、匯編語言到高級語言的歷程。
1. 機器語言
電子計算機所使用的是由「0」和「1」組成的二進制數,二進制是計算機的語言的基礎。計算機發明之初,人們只能降貴紆尊,用計算機的語言去命令計算機干這干那,一句話,就是寫出一串串由「0」和「1」組成的指令序列交由計算機執行,這種語言,就是機器語言。使用機器語言是十分痛苦的,特別是在程序有錯需要修改時,更是如此。而且,由於每台計算機的指令系統往往各不相同,所以,在一台計算機上執行的程序,要想在另一台計算機上執行,必須另編程序,造成了重復工作。但由於使用的是針對特定型號計算機的語言,故而運算效率是所有語言中最高的。機器語言,是第一代計算機語言。
2. 匯編語言
為了減輕使用機器語言編程的痛苦,人們進行了一種有益的改進:用一些簡潔的英文字母、符號串來替代一個特定的指令的二進制串,比如,用「A D D」代表加法,「M O V」代表數據傳遞等等,這樣一來,人們很容易讀懂並理解程序在干什麼,糾錯及維護都變得方便了,這種程序設計語言就稱為匯編語言,即第二代計算機語言。然而計算機是不認識這些符號的,這就需要一個專門的程序,專門負責將這些符號翻譯成二進制數的機器語言,這種翻譯程序被稱為匯編程序。
匯編語言同樣十分依賴於機器硬體,移植性不好,但效率仍十分高,針對計算機特定硬體而編制的匯編語言程序,能准確發揮計算機硬體的功能和特長,程序精煉而質量高,所以至今仍是一種常用而強有力的軟體開發工具。
3. 高級語言
從最初與計算機交流的痛苦經歷中,人們意識到,應該設計一種這樣的語言,這種語言接近於數學語言或人的自然語言,同時又不依賴於計算機硬體,編出的程序能在所有機器上通用。經過努力,1 9 5 4年,第一個完全脫離機器硬體的高級語言―F O RT R A N問世了,4 0多年來,共有幾百種高級語言出現,有重要意義的有幾十種,影響較大、使用較普遍的有F O RT R A N、A L G O L、C O B O L、B A S I C、L I S P、S N O B O L、P L / 1、P a s c a l、C、P R O L O G、A d a、C + +、V C、V B、D e l p h i、J AVA 等。
高級語言的發展也經歷了從早期語言到結構化程序設計語言,從面向過程到非過程化程序語言的過程。相應地,軟體的開發也由最初的個體手工作坊式的封閉式生產,發展為產業化、流水線式的工業化生產。
6 0年代中後期,軟體越來越多,規模越來越大,而軟體的生產基本上是人自為戰,缺乏科學規范的系統規劃與測試、評估標准,其惡果是大批耗費巨資建立起來的軟體系統,由於含有錯誤而無法使用,甚至帶來巨大損失,軟體給人的感覺是越來越不可靠,以致幾乎沒有不出錯的軟體。這一切,極大地震動了計算機界,史稱「軟體危機」。人們認識到:大型程序的編制不同於寫小程序,它應該是一項新的技術,應該像處理工程一樣處理軟體研製的全過程。程序的設計應易於保證正確性,也便於驗證正確性。1 9 6 9年,提出了結構化程序設計方法,1 9 7 0年,第一個結構化程序設計語言―P a s c a l語言出現,標志著結構化程序設計時期的開始。
8 0年代初開始,在軟體設計思想上,又產生了一次革命,其成果就是面向對象的程序設計。在此之前的高級語言,幾乎都是面向過程的,程序的執行是流水線似的,在一個模塊被執行完成前,人們不能幹別的事,也無法動態地改變程序的執行方向。這和人們日常處理事物的......>>
問題二:什麼是匯編語言 匯編語言它是計算機語言,計算機語言說通俗點就是人類與計算機(CPU)溝通的橋梁,計算機它不認識人類的語言,聽不懂也讀不懂,要讓計算機替我們去完成我們的工作,就需要我們將要交給計算機完成的任務翻譯為計算機語言。匯編語言是各種語言中的一種,它屬於低級的計算機語言,這是相對於面向過程的C語言,以及面向對象的C++,java而言。它是除機器語言以外最接近硬體的計算機語言,而且可以通過學習匯編語言深入的了解操作系統的底層運行機制,並以CPU的角度思考問題。這樣可以讓你在編寫高級語言的程序的時候避免很多錯誤,並且能更深入理解高級語言的執行 原理。因為匯編語言屬於低級語言,所以既然低級就肯定不容易被普通用戶認識,這需要一定的硬體基礎知識和一些計算機工作原理的知識。以前在大學階段學過匯編語言,但沒有當回事兒,連作業都是復制加粘貼完成的(像這樣的不在少數吧:))。工作以後才發現這個語言是個好東西,它其實是個非常重要的基礎課程。所以現在有時間就把書打開多看一點,學一點。匯編語言目前常見的有兩種:一個是基於8086/88架構的DOS下的16位匯編語言,還有就是基於80386架構及其以後型號的windows下32位匯編語言。我不知道linux下有沒有匯編語言。順便說一下,不管什麼匯編語言它所編出來的程序都屬於軟體,所以不管什麼軟體都需要依賴操作系統這個基礎平台,它才可以被硬體CPU所執行,因為操作系統就是提供硬體與用戶之間的介面,所有軟體都要通過它來分配到硬體資源(不知道對不對哈:)才可以被執行)。一般先學習16位的DOS匯編,然後再學32位的windows匯編。所以我們先談談16位的DOS匯編哈。要學匯編語言首先就是要了解CPU,你只有了解了CPU才能了解匯編語言的執行,因為它基本就是直接在操作CPU的各個組成單元(像寄存器)。在 *** 上找了這個圖,如下:上面這個CPU的邏輯結構圖是8088的,8088和8086大的架構差不多,所以就以這個為例介紹下各個組成部分的作用。主寄存器:AX(AH,AL)累加寄存器,一般用作暫存數據;BX(BH,BL)基址寄存器,一般用作偏移地址存放;CX(CH,CL)計數寄存器,一般用在循環控制次數;DX(DH,DL)數據寄存器,好像和AX差不多吧;SP堆棧指針寄存器,棧指針;BP基址指針寄存器,可作SP使用;SI源變址寄存器和DI目的變址寄存器,這兩個做為BX擴展用於偏移地址存放。段寄存器: CS:代碼段寄存器,任何一個程序都是從代碼段開始執行的,CS寄存器指明了代碼段的段地址。DS:數據段寄存器,存放程序中數據部分的段地址。SS:堆棧段寄存器,堆棧是內存中特殊的內存塊,堆與棧不同,目前我只知道棧是尊循「先進後出,後進先出」的原則而使用。ES:附加段寄存器,應該是作為DS數據段寄存器的擴充吧。地址加法器: 這是用在對內存定址時所使用,它通過將段寄存器中的段地址與BX、SI、DI等寄存器中的偏移地址作一定處理從而輸出物理地址,然後就可以訪問內存單元了。匯編程序中的地址只是邏輯地址,並不是真實的內存上的地址。在程序實際運行時每次訪問內存都會先將邏輯地址轉換成物理地址才可以訪問到物理內存。關於CPU定址,邏輯地址,物理地址我也會再寫篇文章來討論。邏輯運算單元和控制單元:這是CPU最核心的單元,我們暫只記住它們是負責執行與控制就好了。內部數據,地址匯流排:CPU內部各部件之間通信的通道。外部地址匯流排:用來傳輸CPU想要讀取/寫入內存單元的物理地址。它的寬度就決定了CPU能夠訪問的內存的最大容量。外部數據和控制總......>>
問題三:簡述用匯編語言進行程序設計的步驟。 匯編語言程序設計步驟:
(1)分析問題:已知條件、要解決的問題、功能/性能要求等。
(2)建立數學模型:把問題數學化、公式化,便於計算機處理。
(3)確定演算法:簡單、速度快、精度高、代碼量小、編程容易。
(4)繪製程序流程圖:用箭頭、框圖、菱形圖等表示程序結構。
(5)內存空間分配:為程序或數據分配內存空間。
(6)編製程序與靜態檢查:程序結構層次簡單、清楚、易懂。
(7)程序調試:利用調試軟體DEBUG進行調試。
問題四:1、匯編程序與匯編語言源程序的區別? 匯編程序是匯編語言源程序經過編譯後的結果
用標號是為了標記程序段,內存段,跳轉位置等等
loop p ov add1可以
問題五:編程語言和匯編語言有什麼區別啊 計算機語言從低級到高級可以分為:
機器語言,即由0、1組成的機器硬體可以識別的語言;
低級語言,即匯編語言
中級語言,如C語言
高級語言,如C++,JAVA,C#等。
匯編語言是將由0、1組成的機器語言用具有簡單語義的英文代碼表示,以便於理解和程序員編程。匯編語言通常用於對硬體的直接操控。由於匯編語言編寫的程序很小,所以通常在程序中最核心的、控制硬體的代碼可以採用匯編語言編寫,一方面是安全,另一方面提高運行速度。
對於計算機的初學者,應該從中高級語言學起,如c語言,vb,java等,如果你是想要學習如何編程,學習一到兩門高級語言已經夠用了。
如果你已經掌握了基本的編程技能,最好是可以學習數據結構和操作系統以及計算機硬體的基本工作原理,以便優化你編寫的程序,提高安全性和運行效率。
如果你想要從事更高級的開發工作,則可能需要學習匯編語言。
在高校中,計算機科技專業的學生匯編語言是必修課,而軟體工程專業的學生則對匯編語言不做要求。
至於匯編與編程的區別是顯而易見的,匯編語言是一種用於編寫某些程序的語言。而編程則是程序員用某種語言編寫程序的過程。
問題六:匯編語言是什麼擴展名 .ASM的擴展名
問題七:匯編語言程序的開發有哪4個步驟 編輯:使用記事本,生成:*.ASM 文件。 編譯:使用 MASM.EXE ,生成:*.OBJ 文件。 連接:使用 LINK.EXE,生成:*.EXE 文件。 執行:使用 *.EXE 文件。
問題八:匯編語言子程序是如何定義的? 直接jmp跳轉過去,然後ret回來。
call xxx
xxx proc uses eax,esi,edi,var:ddword......
xxx endp
也可以帶參數的。第二種方式格式就是這樣,說白了也是jmp跳轉。只是經過了編譯器優化。防止程序員跳轉,導致堆棧前後不對齊。
問題九:匯編語言有什麼特點 匯編語言的總體特點1.機器相關性
這是一種面向機器的低級語言,通常是為特定的計算機或系列計算機專門設計的。因為是機器指令的符號化表示,故不同的機器就有不同的匯編語言。使用匯編語言能面向機器並較好地發揮機器的特性,得到質量較高的程序。
2.高速度和高效率
匯編語言保持了機器語言的優點,具有直接和簡捷的特點,可有效地訪問、控制計算機的各種硬體設備,如磁碟、存儲器、CPU、I/O埠等,且佔用內存少,執行速度快,是高效的程序設計語言。
3.編寫和調試的復雜性
由於是直接控制硬體,且簡單的任務也需要很多匯編語言語句,因此在進行程序設計時必須面面俱到,需要考慮到一切可能的問題,合理調配和使用各種軟、硬體資源。這樣,就不可避免地加重了程序員的負擔。與此相同,在程序調試時,一旦程序的運行出了問題,就很難發現。
優點
1、因為用匯編語言設計的程序最終被轉換成機器指令,故能夠保持機器語言的一致性,直接、簡捷,並能像機器指令一樣訪問、控制計算機的各種硬體設備,如磁碟、存儲器、CPU、I/O埠等。使用匯編語言,可以訪問所有能夠被訪問的軟、硬體資源。
2、目標代碼簡短,佔用內存少,執行速度快,是高效的程序設計語言,經常與高級語言配合使用,以改善程序的執行速度和效率,彌補高級語言在硬體控制方面的不足,應用十分廣泛。
缺點
1、匯編語言是面向機器的,處於整個計算機語言層次結構的底層,故被視為一種低級語言,通常是為特定的計算機或系列計算機專門設計的。不同的處理器有不同的匯編語言語法和編譯器,編譯的程序無法在不同的處理器上執行,缺乏可移植性;
2、難於從匯編語言代碼上理解程序設計意圖,可維護性差,即使是完成簡單的工作也需要大量的匯編語言代碼,很容易產生bug,難於調試;
3、使用匯編語言必須對某種處理器非常了解,而且只能針對特定的體系結構和處理器進行優化,開發效率很低,周期長且單調。
問題十:微程序和匯編語言的區別是什麼。 5分 微代碼和匯編都是低級語言,但是微代碼比匯編更底層。微代碼和匯編都和硬體有著緊密的聯系,但是對於同一產品系列的不同代產品來說,匯編可以完全相同,微代碼可能有著巨大的區別,因為微代碼是完全依賴於晶元內部的硬體連接。
對於同樣一句C語言,在不同的處理器上會生成不同的匯編語言。每一條匯編語言的執行時間也許是一個或者兩個時鍾周期,甚至更多。微代碼和匯編的關系,就像C 與匯編的關系,也就是說一條匯編也許會生成一條或多條微代碼。所謂微代碼,或者微指令,是處理器內部最小的操作原語,控制著諸如門電路(gates)開關等專門動作,和組成一條指令的微操作的序列。例如,對於一個加法ADD的簡單動作,微代碼可以決定接受哪兩個寄存器或匯流排為輸入,輸出到什麼匯流排或者寄存器里,標志寄存器要保存還是丟棄,根據條件進行跳轉或者直接執行下一條微代碼。一個內部只有8位寬的數據匯流排完全可以支持32位整數的匯編操作,就是因為有微代碼。
微代碼原來只是用來開發計算機的邏輯控制。古老的CPU往往都是「硬連線」,每個機器指令(加法,移動)都是由電路實現,雖然有著高性能的優點,但隨著指令復雜度的增長,也帶來了研發和DEBUG的困難,以及電路的復雜性。微代碼的出現讓CPU的設計者可以通過寫一個微程序的方式來實現一條機器指令,而不是設計電路來實現它。在將來的開發設計過程中,微代碼可以很容易地改變,硬體電路卻不可更改,否則帶來的將是巨大的商業損失。這種靈活的CPU設計導致了今天日益復雜的指令集。
❸ 匯編語言程序設計流程圖
❹ 匯編語言程序設計的一般步驟是什麼
一、 上機實驗步驟註:以下步驟適用於除匯編語言程序設計的實驗一到實驗四外的所有實驗(實驗一到實驗四僅使用TD.EXE)。1.確定源程序的存放目錄建議源程序存放的目錄名為ASM(或MASM),並放在C盤或D盤的根目錄下。如果沒有創建過此目錄,請用如下方法創建:通過Windows的資源管理器找到C盤的根目錄,在C盤的根目錄窗口中點擊右鍵,在彈出的菜單中選擇「新建」→「文件夾」,並把新建的文件夾命名為ASM。請把MASM.EXE、LINK.EXE、DENUG.EXE和TD.EXE都拷貝到此目錄中。2.建立ASM源程序建立ASM源程序可以使用EDIT或NOTEPAD(記事本)文本編輯器。下面的例子說明了用EDIT文本編輯器來建立ASM源程序的步驟(假定要建立的源程序名為HELLO.ASM),用NOTEPAD(記事本)建立ASM源程序的步驟與此類似。在Windows中點擊桌面左下角的「開始」按鈕→選擇「運行」→在彈出的窗口中輸入「EDIT.COM C:\ASM\HELLO.ASM」,屏幕上出現EDIT的編輯窗口窗口標題行顯示了EDIT程序的完整路徑名。緊接著標題行下面的是菜單行,窗口最下面一行是提示行。菜單可以用Alt鍵激活,然後用方向鍵選擇菜單項,也可以直接用Alt-F打開File文件菜單,用Alt-E打開Edit編輯菜單,等等。如果鍵入EDIT命令時已帶上了源程序文件名(C:\ASM\HELLO.ASM),在編輯窗口上部就會顯示該文件名。如果在鍵入EDIT命令時未給出源程序文件名,則編輯窗口上會顯示「UNTITLED1」,表示文件還沒有名字,在這種情況下保存源程序文件時,EDIT會提示輸入要保存的源程序的文件名。編輯窗口用於輸入源程序。EDIT是一個全屏幕編輯程序,故可以使用方向鍵把游標定位到編輯窗口中的任何一個位置上。EDIT中的編輯鍵和功能鍵符合Windows的標准,這里不再贅述。源程序輸入完畢後,用Alt-F打開File菜單,用其中的Save功能將文件存檔。如果在鍵入EDIT命令時未給出源程序文件名,則這時會彈出一個「Save as」窗口,在這個窗口中輸入你想要保存的源程序的路徑和文件名(本例中為C:\ASM\HELLO.ASM)。 注意,匯編語言源程序文件的擴展名最好起名為.ASM,這樣能給後面的匯編和連接操作帶來很大的方便。3.用MASM.EXE匯編源程序產生OBJ目標文件源文件HELLO.ASM建立後,要使用匯編程序對源程序文件匯編,匯編後產生二進制的目標文件(.OBJ文件)。具體操作如下: 方法一:在Windows中操作用資源管理器打開源程序目錄C:\ASM,把HELLO.ASM拖到MASM.EXE程序圖標上。 方法二:在DOS命令提示符窗口中操作選擇「開始」→「程序」→「附件」→「命令提示符」,打開DOS命令提示符窗口,然後用CD命令轉到源程序目錄下,接著輸入MASM命令:I:>C:<回車> C:>CD \ASM<回車>C:\ASM>MASM HELLO.ASM<回車> 不管用以上二個方法中的哪個方法,進入MASM程序後,都會提示讓你輸入目標文件名(Object filename),並在方括弧中顯示默認的目標文件名,建議輸入目標文件的完整路徑名,如:C:\ASM\HELLO.OBJ〈回車〉。後面的兩個提示為可選項,直接按回車。注意,若打開MASM程序時未給出源程序名,則MASM程序會首先提示讓你輸入源程序文件名(Source filename),此時輸入源程序文件名HELLO.ASM並回車,然後進行的操作與上面完全相同。如果沒有錯誤,MASM就會在當前目錄下建立一個HELLO.OBJ文件(名字與源文件名相同,只是擴展名不同)。如果源文件有錯誤,MASM會指出錯誤的行號和錯誤的原因。4.用LINK.EXE產生EXE可執行文件在上一步驟中,匯編程序產生的是二進制目標文件(OBJ文件),並不是可執行文件,要想使我們編制的程序能夠運行,還必須用連接程序(LINK.EXE)把OBJ文件轉換為可執行的EXE文件。具體操作如下: 方法一:在Windows中操作用資源管理器打開源程序目錄C:\ASM,把HELLO.OBJ拖到LINK.EXE程序圖標上。 方法二:在DOS命令提示符窗口中操作選擇「開始」→「程序」→「附件」→「命令提示符」,打開DOS命令提示符窗口,然後用CD命令轉到源程序目錄下,接著輸入LINK命令:I:>C:<回車> C:>CD \ASM<回車>C:\ASM>LINK HELLO.OBJ<回車>不管用以上二個方法中的哪個方法,進入LINK程序後,都會提示讓你輸入可執行文件名(Run file),並在方括弧中顯示默認的可執行文件名,建議輸入可執行文件的完整路徑名,如:C:\ASM\HELLO.EXE〈回車〉。後面的兩個提示為可選項,直接按回車。注意,若打開LINK程序時未給出OBJ文件名,則LINK程序會首先提示讓你輸入OBJ文件名(Object Moles),此時輸入OBJ文件名HELLO.OBJ並回車,然後進行的操作與上面完全相同。如果沒有錯誤,LINK就會建立一個HELLO.EXE文件。如果OBJ文件有錯誤,LINK會指出錯誤的原因。對於無堆棧警告(Warning:NO STACK segment)信息,可以不予理睬,它不影響程序的執行。如鏈接時有其它錯誤。須檢查修改源程序,重新匯編、連接,直到正確。5.執行程序建立了HELLO.EXE文件後,就可以直接在DOS下運行此程序,如下所示:C:>HELLO〈回車〉C:>程序運行結束後,返回DOS。如果運行結果正確,那麼程序運行結束時結果會直接顯示在屏幕上。如果程序不顯示結果,我們如何知道程序是否正確呢?例如,這里的HELLO.EXE程序並未顯示出結果,所以我們不知道程序執行的結果是否正確。這時,我們就要使用TD.EXE調試工具來查看運行結果。此外,大部分程序必須經過調試階段才能糾正程序執行中的錯誤,調試程序時也要使用TD.EXE。