當前位置:首頁 » 編程軟體 » 匯編程序講解

匯編程序講解

發布時間: 2022-04-27 21:39:38

Ⅰ 如何運行匯編程

  1. 要運行匯編程序,可以有很多的方法,也可以用一些專門的軟體,但眾所周知,匯編的話,是即使用記事本也是可以寫出來然後在DOS環境下運行的,只要有MASM.EXE和LINK.EXE即可,當我們在記事本里寫好匯編程序時,應把它保存成.asm的格式,如sort.asm,然後在開始->運行中輸入cmd,轉到你存放程序的文件夾,最好所有的文件都是用英文命名,如我的是在D盤的huibian文件夾中

Ⅱ 什麼叫匯編程序

把匯編語言書寫的程序翻譯成與之等價的機器語言程序的翻譯程序。匯編程序輸入的是用匯編語言書寫的源程序,輸出的是用機器語言表示的目標程序。匯編語言是為特定計算機或計算機系列設計的一種面向機器的語言,由匯編執行指令和匯編偽指令組成。採用匯編語言編寫程序雖不如高級程序設計語言簡便、直觀,但是匯編出的目標程序佔用內存較少、運行效率較高,且能直接引用計算機的各種設備資源。它通常用於編寫系統的核心部分程序,或編寫需要耗費大量運行時間和實時性要求較高的程序段。

Ⅲ 匯編程序解釋

WRITE: MOV R2,#8 //把立即數8放入R2寄存器
WR0: CLR P3.3 //P3.3置0
MOV R3,#6 //把立即數6放入R3寄存器
DJNZ R3,$ //檢測R3是否為0 等待
RRC A //A帶進位位的右循環
MOV P3.3,C //把進位標志C 賦給P3.3口
MOV R3,#20 //把立即數20放入R3寄存器
DJNZ R3,$ //檢測R3是否為0 等待
SETB P3.3 //P3.3置1
NOP //空操作
NOP //空操作
DJNZ R2,WR0 //R2不為0跳轉 WRO
SETB P3.3 //P3.3置1
RET

Ⅳ 匯編語言詳細解釋

ORG00H
START: MOV R2,#8;R2為循環次數,這里為8
MOV A,#0FEH;流水燈LED初值,點亮第一個燈
LOOP: MOV P1,A;P1口為LED控制口,將A賦值給P1
LCALL DELAY;延時
RL A;循環左移一位
DJNZ R2,LOOP;R2減1不為0轉移到LOOP
LJMP START;跳轉到START
DELAY: MOV R5,#20 ;延時程序外層循環次數
D1: MOV R6,#20;延時程序次外層循環次數
D2: MOV R7,#248;延時程序內存循環次數
DJNZ R7,$;內存循環
DJNZ R6,D2;次外層循環
DJNZ R5,D1;外層循環
RET
END

Ⅳ 簡單的匯編語言程序解析

data segment ;定義數據段

string1 db 'Move the cursor backward' ;比較字元串1

string2 db 'Move the cursor backward' ;比較字元串2

mess1 db 'Match.',13,10,'$' ;比較結果1

mess2 db 'No Match!',13,10,'$' ;比較結果2

data ends ;數據段結束

code segment ;定義代碼段

main proc far ;定義一個過程(類似C的函數)

assume cs:code,ds:data,es:data ;設定各段與段寄存器關聯

start: ;程序入口處(類似C的main函數)

push ds ;壓入ds

sub ax,ax ;ax = 0

push ax ;壓入ax

mov ax,data ;ax = 數據段基址

mov ds,ax ; ds = ax

mov es,ax ;ds = ax

lea si,string1 ;si = string1的偏移地址

lea di,string2 ;di = string2的偏移地址

cld ;DF=0

mov cx,25 ;比較次數

repz cmpsb ;比較指令

jz match ;如果相同ZF=1

lea dx,mess2 ;dx = mess2 的偏移地址

jmp short disp ;跳到disp

match:

lea dx,mess1 ; dx = mess1 的偏移地址

disp:

mov ah,9 ;9號中斷,顯示一個一'$'結尾的字元串

int 21h

ret ;返回

main endp

code ends ;代碼段結束

end start ;程序結束
另註:
MASM匯編程序設計的基本框架是:
data segment
;數據
data ends
stack segment
;堆棧
stack ends
code segment
assume cs:code,ds:data
start:
;代碼

end start

Ⅵ 什麼是匯編程序,編譯程序,解釋程序

解釋程序就是一行行的執行,比如dos,你打個命令再按下回車,
編譯就是一段代碼一起執行,生成一個位元組碼文件,比如c語言就是.
匯編是在高級語言和機器語言之間的一種過渡語言.

Ⅶ 匯編語言介紹了些什麼呢

匯編語言介紹了些什麼呢?

匯編語言(Assembly Language)是面向機器的程序設計語言。

在匯編語合中,用助記符(Memoni)代替操作碼,用地址符號(Symbol)或標號(Label)代替地址媽。這樣用符號代替機器語盲的二進制碼,就把機器語音變成了匯編語言。於是匯編語言亦稱為符號語言。

使用匯編語言編寫的程序,機器個能直接識別,要由一種程序將匯編語言翻譯成機器語言,這種起翻譯作用的程序叫匯編程序,匯編程序是系統軟體中語言處理系統軟體。匯編語言把匯編程序翻譯成機器語言的過程稱為f匯編。

匯編語言比機器語言易於讀寫、易於調試和修改,同時也具有機器語言執行速度快,占內存空間少等優點,但在編寫復雜程序時具有明顯的局限性,匯編語言依賴於具體的機型,不能通用,也不能在不同機型之間移植。

■對於不同型號的計算機,有著不同的結構的匯編語言

匯編語言由於採用了助記符號來編寫程序,比用機器語言的二進制代碼編程要方便些,在一定程度上簡化了編程過程。匯編語言的特點是用符號代替了機器指令代碼,而且助記符與指令代碼一一對應,基本保留了機器語言的靈活性。使用匯編語言能面向機器並較好地發揮機器的特性,得到質量較高的程序。

匯編語言是面向具體機型的,它離不開具體計算機的指令系統,因此,對於不同型號的計算機,有著不同的結構的匯編語言,而且,對於同一問題所編制的匯編語言程序在不同種類的計算機間是互不相通的。

匯編語言中由於使用了助記符號,用匯編語言編制的程序輸入計算機,計算機不能象用機器語言編寫的程序一樣直接識別和執行,必須通過預先放入計算機的"匯編程序"的加工和翻譯,才能變成能夠被計算機識別和處理的二進制代碼程序。用匯編語言等非機器語言書寫好的符號程序稱為源程序,運行時匯編程序要將源程序翻譯成目標程序。目標程序是機器語言程序,它一經被安置在內存的預定位置上,就能被計算機的CPU處理和執行。

匯編語言像機器指令一樣,是硬體操作的控制信息,因而仍然是面向機器的語言,使用起來還是比較繁瑣費時,通用性也差。但是,匯編語言用來編制系統軟體和過程式控制制軟體,其目標程序佔用內存空間少,運行速度快,有著高級語言不可替代的用途。
/**************************************/

學這之前要做好那些准備呢

匯編語言主要用在設備控制、加密破解、開發單片機產品.對計算機性能的優化等。一般用於開發單片機產品,計算機系統的啟動引導就必須使用匯編語言來編輯,否則不能用的。可以很好的實現微電子控制。所以你要先了解這些東西,學習的時候才有針對性.
祝你學好匯編語言

Ⅷ 關於匯編語言詳細解讀,我新手。。什麼都看不懂


datasegment ;數據段定義開始
str1db30,?,30p(?) ;輸入緩存區,限長30B
crlfdb0ah,0dh,'$' ;回測換行
dataends ;數據段定義結束
codesegment ;代碼段定義結束
assumecs:code,ds:data
mainprocfar ;子程序定義開始
start:
movax,data
movds,ax ;設置數據段段基
leadx,str1
movah,0ah
int21h ;接受輸入至緩存區
leadi,str1+2
movbl,str1+1
movbh,0
movbyteptr[bx][di],'$』 ;設置串結束標志,為列印串做准備
leadx,crlf
movah,09h
int21h
leadx,str1+2
movah,09h
int21h ;回車換行並列印串
movax,4c00h
int21h ;返回
mainendp ;子程序定義結束
codeends ;代碼段定義結束
endstart ;聲明主模塊入口

Ⅸ 匯編程序詳解(請大俠幫忙解釋一下匯編程序,統計輸入字元串中每個字元的個數)

*********************************************************************************
程序將輸出從鍵盤輸入的字元,並顯示出相同的字元及相同字元的個數。
*********************************************************************************

注x8086的數組起始0還是1,我記不清了,我是按0算的,根據你的情況看嘛......

DATA SEGMENT 數據段開始
BUFFER DB 100 定義BUFFER數據第1個數據DB類型,且值為100
DB ? 定義1空的DB類型。
DB 100 DUP(?) 定義100個DB類型的數據,初始化
CHARS DB 'INPUT:$' 定義字元串"INPUT:"以$為結束標識
DATA ENDS 數據段結束

CODE SEGMENT 代碼段
ASSUME CS:CODE,DS:DATA 段代碼聲明CS
MAIN PROC FAR 定義"MAIN"函數

***************************************************
PUSH DS 將數據段地址堆棧
SUB AX,AX 清零AX,AX=0
PUSH AX 將AX入棧,實際將壓入0堆棧中
MOV AX,DATA 把數據段起始地址放入AX中
MOV DS,AX 初始化DS(數據段地址)
********以上是固定的,又叫程序的初始化數據段*******

START: MOV DX,OFFSET CHARS 取CHARS的字元首地址放入DX中
MOV AH,9 將9號DOS中斷功能號,放入AH中,用於顯示DX所存的字元串
INT 21H 調用21號中斷
********以上用於顯示"INPUT:"字元串**********

MOV DX,OFFSET BUFFER 取CHARS的字元首地址放入DX中
MOV AH,0AH 將0A號DOS中斷功能號,用於從鍵盤緩沖輸入,並保存DX所存的地址中
INT 21H 調用21號中斷
********以上用於從鍵盤緩沖中輸入到BUFFER中,輸入的東西將放入BUFFER中*************

MOV DL,0AH 把「換行符」放入DL中
MOV AH,2 02號功能,將從DL中輸出一個字元
INT 21H 調用21號中斷
*******以上用於換行1,輸出換行符**********
MOV DL,0DH 把「回車符」放入DL中
MOV AH,2 02號功能,將從DL中輸出一個字元
INT 21H 調用21號中斷
*******以上用於換行2,輸出回車符**********
*******上兩用於換行*******

MOV SI,OFFSET BUFFER 把從鍵盤輸入的字元,BUFFER地址給SI
INC SI 指向第二個字元
MOV AL,[SI] 放入AL
INC SI 指向下一個字元
MOV DL,[SI] SI指向的下一個字元給DL
MOV DH,[SI] 同時給DH
MOV DI,SI DI指向BUFFER的第三個字元
MOV CL,AL CL=AL=BUFFER[1]=100
MOV CH,0 CH=0
MOV BL,1 BL=1
MOV BH,0 BH=0
DEC CL CL減1
GO1: INC SI SI指向下一個字元
CMP DL,[SI] 比較BUFFER[i]與BUFFER[i+]是否相等
JNE TO1 不相等轉到TO1
INC BL 如果相等BL將加1
TO1: LOOP GO1 循環CX-1,轉到GO1
************以上函數遍歷BUFFER中所有字元,並將與BUFFER[1]相同的字元的個數放入BL中,**************

CALL OUTPUT 調用OUTPUT,輸出我們能看懂的十位數,顯示出來

MOV BL,1 BL=1
TO5: INC DI DI+1,批向下一個地址,DI指向BUFFER第四個字元了
DEC AL AL減1,第一次是AL=99
CMP AL,1 和1比較
JE TO3 如果是1轉到TO3
CMP DH,[DI] 和DH字元比較,BUFFER[1]是否相等
JE TO5 如果相等就回到TO5
MOV DL,[DI] 如果不相等的話,將DI指向的字元放入DL中,
MOV SI,DI SI=DI放入SI
MOV CL,AL CL=AL
MOV CH,0 CH=0,CX=CL
DEC CL CL=CL-1
GO2: INC SI 指向下一個字元
CMP [SI],DL 和DL字元比較,BUFFER[1]是否相等
JNE TO2 如果相等就回到TO2
INC BL 相同時BL=BL+1
MOV [SI],DH 將相同的字元放入SI中
TO2: LOOP GO2 CL=CL-1
CALL OUTPUT 顯示相同的字元個數
MOV BL,1 BL重新計算,初始化為,因為本身就是一個字元,如果有一個相同就應該有2個相同字元了
JMP TO5 跳到TO5

TO3: CMP DH,[DI] 當AL=1,循環結束以後,將跳到這里來
JE TO4 如果DH這時與DI里地址里所放的值相同,那麼就結束。
MOV DL,[DI] 否則[DI]放入DL中
MOV BL,1 給BL為1,因為這時,就只有一個字元了,沒有與他相同的字元了。
CALL OUTPUT 把字元個數輸出.
TO4: RET
MAIN ENDP

;--------------------------
OUTPUT PROC 自定義函數
PUSH AX //
PUSH CX //
PUSHF //保存現場

MOV AH,2 調用DOS功能號02,將DL中的內容輸出,即BUFFER[1]輸出
INT 21H 調用INT 21中斷

MOV DL,20H 「空格」的ASCII碼
MOV AH,2 調用DOS功能號02,將DL中的「空格」輸出
INT 21H

MOV AL,BL AL=BL,相同字元次數
MOV AH,0 AX=AL
MOV CL,10 CL=10
DIV CL AX=AX/CL=AL/10=BL/10,AL中為商,AH中為余數
ADD AH,30H AH=AH+30,將數字轉換成對應ASCII
ADD AL,30H AL=AL+30,將商轉換成對應的ASCII碼
MOV CH,AH CH放入余數的ASCII碼
******************以上是將BL轉換成十進制數***********
MOV DL,AL DL放入商的ASCII碼
MOV AH,2 調用DOS功能號02,將DL中的AL商值輸出,,,實際是重復次數的十位數
INT 21H
*****輸出十位數****
MOV DL,CH
MOV AH,2
INT 21H
******輸出個位數****
MOV DL,0AH
MOV AH,2
INT 21H
*******以上用於換行1,輸出換行符**********
MOV DL,0DH
MOV AH,2
INT 21H
*******以上用於回車2,輸出回車符**********

POPF //恢復現場
POP CX //
POP AX //恢復現場
RET //返回
OUTPUT ENDP
CODE ENDS
END MAIN

Ⅹ 匯編程序解釋,完整解釋哦

太簡單了
Data segment ;數據段開始
X1 db oah, 0dh,『how are you !』,』$』 ;x1字元串=「how are you」,$
X2 db 0ah, 0dh, 『good bey』,』$』 ;x2字元串
Data ends ;數據段結束
Code segment ;代碼段開始
Assume cs:code, ds:data
Start:mov ax,data ;數據段的段地址放入ax
Mov ds, ax ;數據段的段地址放入ds
Loop1:Mov ah,1 ;ah=1
Int 21h ;調用dos,輸入一個字元在al中
Cmp al,』1』 ;比較輸入的字元是否為『1』
Jz next1 ;是『1』轉到next1執行
Cmp al,』2』 ;是『2』轉到next2執行
Jz next2
Cmp al,』q』 ;是『q'轉到exit
Jz exit
Next1:lea dx,x1 ;字元串x1的偏移地址放入dx
Mov ah,9 ;ah=9,dos的9號功能,顯示dx指向的字元串
Int 21h ;調用dos,顯示字元串x1 「how are you」
Jmp loop1 ;跳到loop1執行
Next2:lea dx,x2 ; 字元串x2的偏移地址放入dx
Mov ah,9 ;ah=9
Int 21h ;調用dos的9號功能,顯示字元串x2
Jmp loop1 ;跳到loop1執行
Exit:mov ah,4ch ;ah=4ch,dos的4ch號功能,結束程序返回dos
Int 21h ;調用dos,結束程序
Code ends ;代碼段結束
End start ;告訴編譯器,程序的開始地址是start

熱點內容
如何區分安卓原裝充電器 發布:2024-05-05 01:41:23 瀏覽:70
怎麼從蘋果轉移到安卓 發布:2024-05-05 01:41:20 瀏覽:719
支付寶付款碼怎麼設置密碼 發布:2024-05-05 01:27:36 瀏覽:877
qtp錄制的腳本 發布:2024-05-05 01:14:04 瀏覽:366
如何安裝卡羅拉安卓系統 發布:2024-05-05 01:09:00 瀏覽:984
sql創建表查詢表 發布:2024-05-05 01:00:12 瀏覽:798
食色抖音上傳 發布:2024-05-05 00:55:56 瀏覽:657
java圖片下載 發布:2024-05-05 00:50:45 瀏覽:597
唱吧如何上傳伴奏 發布:2024-05-05 00:49:04 瀏覽:444
什麼配置單反拍視頻最好 發布:2024-05-05 00:30:56 瀏覽:478