❶ 匯編語言是什麼
匯編語言(AssemblyLanguage)是面向機器的程序設計語言。在匯編語合中,用助記符(Memoni)代替操作碼,用地址符號(Symbol)或標號(Label)代替地址碼。這樣用符號代替機器語言的二進制碼,就把機器語言變成了匯編語言。於是匯編語言亦稱為符號語言。使用匯編語言編寫的程序,機器不能直接識別,要由一種程序將匯編語言翻譯成機器語言,這種起翻譯作用的程序叫匯編程序,匯編程序是系統軟體中語言處理系統軟體。匯編程序把匯編語言翻譯成機器語言的過程稱為匯編。中國著名計算機科學教育家王爽寫過一本名叫《匯編語言》的書。
❷ 什麼是匯編程序什麼是匯編語言
最初,程序只能用機器語言編寫。用機器語言編寫程序是早期經過嚴格訓練的專業技術人員的工作,普通的程序員一般難以勝任,而且用機器語言編寫的程序不易閱讀、出錯率高、難以維護,也不能直觀地反映用計算機解決問題的基本思路。但也有優點,用機器語言編寫出來的程序執行效率高,CPU嚴格按照程序員的要求去做,沒有多餘的額外操作。所以,在以保留「程序執行效率高」為前提下,人們就開始著手研究一種能大大改善程序可讀性的編程方法。為了改善機器指令的可讀性,選用了一些能反映機器指令功能的單詞或片語來代表該機器指令,而不再關心機器指令的具體二進制編碼。與此同時,也把CPU內部的各種資源符號化,使用該符號名也等於引用了該具體的物理資源。
如此一來,令人難懂的二進制機器指令就可以用通俗易懂的、具有一定含義的符號指令來表示了,於是,匯編語言就有了雛型。現在,我們稱這些具有一定含義的符號為助記符,用指令助記符、符號地址等組成的符號指令稱為匯編格式指令(或匯編指令)。匯編語言是匯編指令集、偽指令集和使用它們規則的統稱。偽指令是在程序設計時所需要的一些輔助性說明指令,它不對應具體的機器指令。
用匯編語言編寫的程序稱為匯編語言程序,或匯編語言源程序。
❸ 匯編語言程序的意思
在程序段前綴(PSP)的0偏移處存放有十六進制碼:CD 20
PUSH DS 數據段段址入棧
SUB AX,AX ;AX清0
PUSH AX ;AX值入棧
... ...
RET 從棧中彈出AX、DS
可理解為:
POP IP ;重置指令指針
POP CS ;重置代碼段址
轉執行 CD 20 [程序段前綴(PSP)的0偏移處預存的十六進制碼]
該指令是 INT 20H 的機器指令碼,調用DOS的20H中斷結束程序。
❹ 匯編程序
; 題目名稱:輸入成績,分別升序、降序排序
; 題目來源:http://..com/question/132061481.html
; 操作說明:成績按百分制,輸入成績時,最多3位數,即100分;小於100分的成績,按回車確認
; 本程序在MASMPlus 1.2集成環境下通過編譯,經過調試,運行正確。
Code Segment
Assume CS:Code,DS:Code
CR equ 000DH
LF equ 000AH
KBBack equ 0008H
; -------------------------------------
; 功能:顯示指定地址(Str_Addr)的字元串
; 入口:
; Str_Addr=字元串地址(要求在數據段)
; 用法: Output Str_Addr
; 用法舉例:Output PromptStr
Output MACRO Str_Addr
push ax
lea dx,Str_Addr
mov ah,9
int 21h
pop ax
EndM
; -------------------------------------
; 功能:在當前游標位置顯示一個字元
; 入口:dl=要顯示的字元
Output_Chr proc Near
push ax
mov ah,2
int 21h
pop ax
ret
Output_Chr Endp
; -------------------------------------
; 功能:取游標位置
; 入口:無
; 出口:DH=行號,DL=列號
GetCursor Proc Near
PUSH DS
PUSH AX
PUSH BX
PUSH CX
PUSH DX
PUSH CS
POP DS
XOR BX,BX
MOV AH,3
INT 10H
MOV Cursor_Row,DH
MOV Cursor_Col,DL
POP DX
POP CX
POP BX
POP AX
POP DS
RET
Cursor_Row DB ?
Cursor_Col DB ?
GetCursor EndP
; -------------------------------------
; 功能:置游標位置
; 入口:Cursor_Row=行坐標; Cursor_Col: 列坐標)
SetCursor Proc Near
PUSH DS
PUSH DX
PUSH CX
PUSH BX
PUSH AX
PUSH CS
POP DS
MOV DH,Cursor_Row
MOV DL,Cursor_Col
XOR BX,BX
MOV AH,2
INT 10H
POP AX
POP BX
POP CX
POP DX
POP DS
RET
SetCursor EndP
; -------------------------------------
; 功能:鍵盤輸入一個指定位數(N)的十進制數字,將其轉換成二進制數並保存在指定的內存單元。
; 輸足N位的,自動結束輸入;不足N位的,空格結束輸入。
; 由於限定最大數據類型為字,所以,數字位數最多:5,最大無符號數:65536
; 約定:直接回車,視為數字0
; 入口:cs:@@Digits=數字位數;es:di=保存輸入的數字首地址
; cs:@@Type_Data=保存的數據類型,B=位元組類型,W=字類型。
; 出口:轉換後的二進制數保存在di所指的單元
Input_Dec Proc Near
push ds
push dx
push cx
push bx
push di
push cs
pop ds
call GetCursor ;取游標位置
mov dx,WORD PTR Cursor_Row
mov @@Tmp_Cursor,dx ;保存起始游標位置
lea di,@@Save_Tmp
push di
cld
mov cl,@@Digits
xor ch,ch
push cx
@@Input_Dec: call GetCursor ;取游標位置
mov ah,1 ;從鍵盤接受一個字元
int 21h
cmp al,27 ;Esc?
jz @@Return
cmp al,CR ;若鍵入的是回車,已經鍵入的數字不足N位
jz @@ASC_Dec ;轉去處理已經鍵入的數字
cmp al,KBBack
jz @@KB_Back ;若是回空鍵,重新輸入
cmp al,'0'
jb @@KBBack ;若低於數字'0',重新輸入
cmp al,'9'
ja @@KBBack ;若高於數字'9',重新輸入
jmp @@Save_Dig
@@KB_Back: cmp cl,cs:@@Digits ;十進制數字位數
jz @@Input_Dec
inc cx
dec di
dec Cursor_Col
@@KBBack: call SetCursor ;置游標位置
jmp @@Input_Dec
@@Save_Dig: and al,0fh ;轉換成二進制數
stosb ;保存
loop @@Input_Dec ;接受下一個數字
@@ASC_Dec: mov ax,cx
pop cx
pop si
sub cx,ax ;實際輸入的數字位數
xor bp,bp
xor dx,dx
xor ax,ax
jcxz @@Save_Ret ;若直接回車,沒有輸入任何數字,按輸入'0'處理
dec cx ;實際輸入的數字位數減1,准備把輸入的這一串數字轉換成二進制數
jcxz @@One_Digit ;若輸入的數字只有一位,轉去直接保存這個二進制數
mov bx,10
@@Mul_Ten: lodsb
xor ah,ah
add ax,bp
mul bx
mov bp,ax
loop @@Mul_Ten
@@One_Digit: lodsb
xor ah,ah
add ax,bp
@@Save_Ret: pop di
cmp @@Type_Data,'B' ;位元組類型?
jz $+5
stosw
jmp $+3
stosb
pop bx
pop cx
pop dx
pop ds
clc
ret
@@Return: pop cx
pop di
pop di
pop bx
pop cx
pop dx
pop ds
stc
ret
@@Tmp_Cursor dw ? ;起始游標位置
@@Digits db ? ;十進制數字位數
@@Type_Data db 'B' ;保存的數據類型。B=位元組類型,W=字類型
@@Save_Tmp db 7 p(?)
Input_Dec EndP
; -------------------------------------
; 功能:把AX中的二進制無符號數轉換成顯式的十進制ASCII碼,並送顯示屏顯示
; 入口:AX=二進制數
; 出口:在當前游標位置顯示轉換後的ASCII碼數字
Unsi_Dec_ASCII Proc Near
push dx
push bx
push di
mov bx,10
lea di,@@Temp_Save[5]
mov BYTE PTR [di],'$'
dec di
cld
@@Divide: xor dx,dx
div bx
or dl,30h
mov [di],dl
dec di
test ax,ax
jnz @@Divide
inc di
push di
pop dx
mov ah,9
int 21h
pop di
pop bx
pop dx
ret
@@Temp_Save db 6 p(?)
Unsi_Dec_ASCII EndP
; -------------------------------------
Input_Score proc Near
mov @@Digits,3 ;十進制數字位數
mov @@Type_Data,'B' ;保存的數據類型。B=位元組類型,W=字類型
lea di,Buffer ;成績保存地址
Output Prompt_Str ;提示輸入成績
@@Input_Scores:call Input_Dec ;鍵盤輸入一個指定位數(N)的十進制數字,將其轉換成二進制數並保存在指定的內存單元
pushf
inc Cursor_Col
call Setcursor
mov dl,20h
call Output_Chr ;顯示一個空格
popf
jnc @@Input_Scores
mov cx,di
sub cx,offset Buffer ;成績個數
mov Counter,cx ;保存
ret
Input_Score Endp
; -------------------------------------
Increase_Sort proc Near
mov BYTE ptr @@Compare[5],76h
jmp @@Sorting
Increase_Sort Endp
; -------------------------------------
Decrease_Sort proc Near
mov BYTE ptr @@Compare[5],73h
@@Sorting: lea si,Buffer
mov cx,Counter ;成績個數
dec cx ;外循環次數
cld
@@Scanning: push cx ;入棧保存外循環次數
push si ;入棧保存數組地址
@@Compare: mov di,si ;當前數組元素地址賦給目的變址寄存器,以備交換之用
lodsb ;將當前數組元素讀入累加器
cmp al,[si] ;當前數組元素與相鄰的下一個數組元素相比較
jae @@NextOne ;若大於或等於,不作數據交換,處理下一個數組元素
xchg al,[si] ;若小於,交換數組元素
stosb ;保存數值較小者
@@NextOne: loop @@Compare ;處理下一個數組元素
pop si ;數組地址出棧
pop cx ;外循環次數出棧
loop @@Scanning ;下一趟比較
mov WORD ptr Cursor_Row,12
call SetCursor ;置游標位置
lea si,Buffer
mov cx,Counter ;成績個數
@@List_Scores: lodsb
xor ah,ah
call Unsi_Dec_ASCII ;把AX中的二進制無符號數轉換成顯式的十進制ASCII碼,並送顯示屏顯示
mov dl,20h
call Output_Chr ;顯示一個空格
loop @@List_Scores
ret
Decrease_Sort Endp
; -------------------------------------
Prompt_Menu db 35 p(20h),'Main Menu',13,10
db 30 p(20h),201,18 p(205),187,13,10
db 30 p(20h),186,' 1. input scores ',186,13,10
db 30 p(20h),186,' 2. increase sort ',186,13,10
db 30 p(20h),186,' 3. decrease sort ',186,13,10
db 30 p(20h),186,' 0. Return to DOS ',186,13,10
db 30 p(20h),200,18 p(205),188,13,10
db 32 p(20h),'Choice(0-3):$'
Cursor_Tmp dw ?
Counter dw ? ;成績個數
Proc_Addr dw Input_Score,Increase_Sort,Decrease_Sort
Prompt_Str db 13,10,10,'Please input scores:',13,10,'$'
Press_Key db 7,13,12 p(10),'The complated. Press any key to exit...$'
Start: push cs
pop ds ;使數據段與代碼段同段
mov ax,3 ;設置25*80字元顯示方式
int 10h
Output Prompt_Menu ;顯示主菜單
xor bx,bx
mov ah,3
int 10h
mov Cursor_Tmp,dx
mov ax,0b800h
mov es,ax ;設置字元顯示方式緩沖區段地址
mov di,35*2+1
mov al,13 ;LightMagenta
mov cx,10
cld
Attribute: stosb
inc di
loop Attribute
mov di,160*2+32*2+1
stosb
add di,159
stosb
add di,159
stosb
add di,159
stosb
mov di,160*7+39*2+1
stosb
inc di
stosb
inc di
stosb
push cs
pop es ;使附加段與代碼段同段
Choice_Func: mov dx,Cursor_Tmp
xor bx,bx
mov ah,2
int 10h
mov ah,1
int 21h
cmp al,'0'
jz Exit_Proc
cmp al,'1'
jb Choice_Func
cmp al,'3'
ja Choice_Func
and ax,0fh
mov bx,ax
dec bx
shl bx,1
call Proc_Addr[bx]
jmp Choice_Func
; -------------------------------------
Exit_Proc: Output Press_Key ;提示操作完成,按任意鍵結束程序
mov ah,1
int 21h
mov ah,4ch ;結束程序
int 21h
Buffer db ? ;數據緩沖區
Code ENDS
END Start ;編譯到此結束
❺ 匯編語言能做什麼
匯編語言的作用:
匯編語言用一些容易理解和記憶的字母,單詞來代替一個特定的指令,比如:用「ADD」代表數字邏輯上的加減,「 MOV」代表數據傳遞等等,通過這種方法,人們很容易去閱讀已經完成的程序或者理解程序正在執行的功能,對現有程序的bug修復以及運營維護都變得更加簡單方便。當計算機的硬體不認識字母符號,這時候就需要一個專門的程序把這些字元變成計算機能夠識別的二進制數。因為匯編語言只是將機器語言做了簡單編譯,所以並沒有根本上解決機器語言的特定性,所以匯編語言和機器自身的編程環境息息相關,推廣和移植很難,但是還是保持了機器語言優秀的執行效率,因為他的可閱讀性和簡便性,匯編語言到現在依然是常用的編程語言之一。
匯編語言不像其他大多數的程序設計語言一樣被廣泛用於程序設計。在今天的實際應用中,它通常被應用在底層,硬體操作和高要求的程序優化的場合。驅動程序、嵌入式操作系統和實時運行程序都需要匯編語言。
(5)匯編程序擴展閱讀:
匯編語言是計算機提供給用戶的最快最有效的語言,也是能夠利用計算機的所有硬體特性並能夠直接控制硬體的唯一語言。但是由於編寫和調試匯編語言程序要比高級語言復雜,因此目前其應用不如高級語言廣泛。
匯編語言比機器語言的可讀性要好,但跟高級語言比較而言,可讀性還是較差。不過採用它編寫的程序具有存儲空間佔用少、執行速度快的特點,這些是高級語言所無法取代的。在實際應用中,是否使用匯編語言,取決於具體應用要求、軟體開發時間和質量等方面作權衡。
匯編語言作為機器語言之上的第二代編程語言,它也有很多優點:
1、可以輕松的讀取存儲器狀態以及硬體I/O介面情況
2、編寫的代碼因為少了很多編譯的環節,可以能夠准確的被執行
3、作為一種低級語言,可擴展性很高
缺點:
1、因為代碼非常單調,特殊指令字元很少,所以造成了代碼的冗長以及編寫的困難
2、因為匯編仍然需要自己去調用存儲器存儲數據,很容易出現BUG,而且調試起來也不容易
3、就算完成了一個程序,後期維護時候也需要耗費大量的時間。
4、因為機器的特殊性造成了代碼兼容性差的缺陷
❻ 匯編語言 程序
; 本程序通過編譯,運行正確
Code Segment
Assume CS:Code,DS:Code
CR equ 000DH
LF equ 000AH
KBBack equ 0008H
; -----------------------------------------
; 功能:顯示指定地址(Str_Addr)的字元串
; 入口:
; Str_Addr=字元串地址(要求在數據段)
; 用法: Output Str_Addr
; 用法舉例:Output PromptStr
Output MACRO Str_Addr
lea dx,Str_Addr
mov ah,9
int 21h
EndM
; -----------------------------------------
; 功能:取游標位置
; 入口:無
; 出口:DH=行號,DL=列號
GetCursor Proc Near
PUSH AX
PUSH BX
PUSH CX
XOR BX,BX
MOV AH,3
INT 10H
MOV Cursor_Row,DH
MOV Cursor_Col,DL
POP CX
POP BX
POP AX
RET
Cursor_Row DB ?
Cursor_Col DB ?
GetCursor EndP
; -----------------------------------------
; 功能:置游標位置
; 入口:Cursor_Row=行坐標; Cursor_Col: 列坐標)
SetCursor Proc Near
PUSH CX
PUSH BX
PUSH AX
MOV DH,Cursor_Row
MOV DL,Cursor_Col
XOR BX,BX
MOV AH,2
INT 10H
POP AX
POP BX
POP CX
RET
SetCursor EndP
; -----------------------------------------
; 功能:鍵盤輸入一個N位的十進制數字,將其轉換成二進制數並保存在指定的內存單元。
; 入口:N=數字位數;di=保存輸入的數字首地址
; 出口:轉換後的二進制數保存在di所指的單元
Input_Digit Proc Near
push dx
push cx
push bx
push di
lea di,@@Save_Tmp
push di
cld
mov cx,N
push cx
@@Input: call GetCursor ;取游標位置
mov ah,1 ;從鍵盤接受一個字元
int 21h
cmp al,CR ;若鍵入的是回車,已經鍵入的數字不足N位
jz @@ASC_Dec ;轉去處理已經鍵入的數字
cmp al,KBBack
jz @@KB_Back ;若是回空鍵,重新輸入
cmp al,'0'
jb @@KBBack ;若低於數字'0',重新輸入
cmp al,'9'
ja @@KBBack ;若低於數字'9',重新輸入
jmp @@Save_Dig
@@KB_Back: dec Cursor_Col
inc cx
dec di
@@KBBack: call SetCursor ;置游標位置
jmp @@Input
@@Save_Dig: and al,0fh ;轉換成二進制數
stosb ;保存
loop @@Input ;接受下一個數字
@@ASC_Dec: mov ax,cx
pop cx
pop si
sub cx,ax ;實際輸入的數字位數
xor bp,bp
xor dx,dx
xor ax,ax
jcxz @@Save_Ret ;若直接回車,沒有輸入任何數字,按輸入'0'處理
dec cx ;實際輸入的數字位數減1,准備把輸入的這一串數字轉換成二進制數
jcxz @@One_Digit ;若輸入的數字只有一位,轉去直接保存這個二進制數
mov bx,10
@@Mul_Ten: lodsb
cbw
add ax,bp
mul bx
mov bp,ax
loop @@Mul_Ten
@@One_Digit:lodsb
cbw
add ax,bp
@@Save_Ret: pop di
stosw
pop bx
pop cx
pop dx
ret
@@Save_Tmp db 16 p(?)
Input_Digit EndP
; -----------------------------------------
N equ 4 ;輸入的十進制整數位數
Number1 dw ?
Number2 dw ?
prompt_One db 'Please the first number: $'
prompt_Two db 13,10,'Please the second number: $'
Start: push cs
pop ds
push cs
pop es ;使數據段、附加段與代碼段同段
Output prompt_One ;提示輸入第一個數
lea di,Number1 ;變數Number1的地址
call Input_Digit ;從鍵盤接受一個N位數字
Output prompt_Two ;提示輸入第一個數
lea di,Number2 ;變數Number1的地址
call Input_Digit ;從鍵盤接受一個N位數字
mov ax,Number1 ;被乘數
mul Number2
Exit_Proc: mov ah,4ch ;結束程序
int 21h
Code ENDS
END Start ;編譯到此結束
❼ 一般用什麼軟體來寫匯編程序
匯編語言(Assembly Language)是面向機器的程序設計語言。
在匯編語合中,用助記符(Memoni)代替操作碼,用地址符號(Symbol)或標號(Label)代替地址媽。這樣用符號代替機器語盲的二進制碼,就把機器語音變成了匯編語言。於是匯編語言亦稱為符號語言。
使用匯編語言編寫的程序,機器個能直接識別,要由一種程序將匯編語言翻譯成機器語言,這種起翻譯作用的程序叫匯編程序,匯編程序是系統軟體中語言處理系統軟體。匯編語言把匯編程序翻譯成機器語言的過程稱為f匯編。
匯編語言比機器語言易於讀寫、易於調試和修改,同時也具有機器語言執行速度快,占內存空間少等優點,但在編寫復雜程序時具有明顯的局限性,匯編語言依賴於具體的機型,不能通用,也不能在不同機型之間移植。
■對於不同型號的計算機,有著不同的結構的匯編語言
匯編語言由於採用了助記符號來編寫程序,比用機器語言的二進制代碼編程要方便些,在一定程度上簡化了編程過程。匯編語言的特點是用符號代替了機器指令代碼,而且助記符與指令代碼一一對應,基本保留了機器語言的靈活性。使用匯編語言能面向機器並較好地發揮機器的特性,得到質量較高的程序。
匯編語言是面向具體機型的,它離不開具體計算機的指令系統,因此,對於不同型號的計算機,有著不同的結構的匯編語言,而且,對於同一問題所編制的匯編語言程序在不同種類的計算機間是互不相通的。
匯編語言中由於使用了助記符號,用匯編語言編制的程序輸入計算機,計算機不能象用機器語言編寫的程序一樣直接識別和執行,必須通過預先放入計算機的"匯編程序"的加工和翻譯,才能變成能夠被計算機識別和處理的二進制代碼程序。用匯編語言等非機器語言書寫好的符號程序稱為源程序,運行時匯編程序要將源程序翻譯成目標程序。目標程序是機器語言程序,它一經被安置在內存的預定位置上,就能被計算機的CPU處理和執行。
匯編語言像機器指令一樣,是硬體操作的控制信息,因而仍然是面向機器的語言,使用起來還是比較繁瑣費時,通用性也差。但是,匯編語言用來編制系統軟體和過程式控制制軟體,其目標程序佔用內存空間少,運行速度快,有著高級語言不可替代的用途。
■html屬於匯編嗎?
不屬於匯編語言。它是Hypertext Markup Language的縮寫,用來編寫網頁的語言.通常一個網頁的網址最後面有.html或者.htm都是用這種語言編寫的.
另外,它一般用來編寫靜態網頁,現在最流行的動態語言有ASP,.NET和PHP等等.