當前位置:首頁 » 編程語言 » c匯編語言結構
擴展閱讀
webinf下怎麼引入js 2023-08-31 21:54:13
堡壘機怎麼打開web 2023-08-31 21:54:11

c匯編語言結構

發布時間: 2022-01-29 13:53:41

① 在單片機匯編語言中c是什麼意思

C為進借位標志位,就是CY
意思是兩數相加(ADDC指令)有進位就置C為1,兩數減(SUBB指令)有借位就置C為1,
上面兩種請況C的置1是系統自動的。
另外還可以自己對C進行操作 指令如下:
MOV C, bit 將bit位地址中的值送PSW中的進位標志位CY
MOV bit, C 將PSW中的進位標志位CY的值送bit位地址中
CLR C 將進位標志位CY清0
SETB C 將進位標志位CY置1
ANL C, bit 將Cy和bit位地址中的值進行與操作後,結果送Cy
ANL C, /bit bit位地址中的值取反後再與Cy進行與操作,結構送Cy
ORL C, bit 將Cy和bit位地址中的值進行或操作後,結果送Cy
ORL C, /bit bit位地址中的值取反後再與Cy進行或操作,結構送Cy
CPL C 將Cy取反
還可以根據C的狀態分別執行轉移指令,如下
JC rel If(C=1)轉移到rel處執行指令
JNC rel If(C=0)轉移到rel處執行指令。

c語言匯編語言

兩個不同的概念,C語言屬於高級語言,裡面的INC和LIB文件夾裡面有很多API的封裝,你可以很方便的調用不同的庫函數。
匯編是底層的語言,是最接近機器語言的一種語言。執行效率非常高,所形成的文件大小很小。如果你夠犀利,可以用匯編語言去調用C的函數庫。
你可以下載masm32的編譯器看看,裡面的INC和LIB文件夾的內容和C都是一樣的
不同的是,匯編只是將C語言裡面的INC和LIB裡面的內容用匯編語言翻譯了一遍而已。

③ 匯編語言程序的基本結構並加以詳細的解釋

HELLO,WORLD進階匯編程序系列

Editor:admin Time:2004-3-21 12:49 Read:9785 Score:8 Print
Writer:LLUCT
Excerpt:80x86匯編小站

Preface:
感謝網友lluct為本站提供原創......適合初學者學習哦

Content:
TITLE ***HELLO,WORLD進階程序之選擇分支 BY LLUCT***

DATA SEGMENT ;定義數據段
MSG1 DB '***WELCOME TO MY PROGRAM BY LLUCT***','$'
;定義輸出的第一個字元串信息,字元串必須用DB定義,$為結束標志
MSG2 DB '1:BASIC MESSAGE 2:ADVANCED MESSAGE','$'
;定義輸出的字元串信息:選擇菜單
MSG3 DB 'PLEASE CHOOSE:','$'
;定義輸出的字元串信息:選擇前綴
MSG4 DB 'HELLO,WORLD!^-^','$'
;定義輸出的字元串信息:分支1的信息
MSG5 DB 'THIS IS MY FIRST ASM_86 PROGRAM! @^-^@','$'
;定義輸出的字元串信息:分支2的信息
ERRMSG DB 'CHOOSE ERROR! -_-b','$'
;定義輸出的字元串信息:選擇錯誤信息
DATA ENDS ;數據段結尾

CODE SEGMENT ;定義代碼段
ASSUME CS:CODE ;規定CS的內容
ASSUME DS:DATA ;規定DS的內容

START: MOV AX,DATA ;程序從START開始
MOV DS,AX ;DS置初值,DATA的段地址

CALL ENTER ;調用顯示回車換行子程序
LEA DX,MSG1 ;輸出第一個字元串的偏移地址
CALL DISPCHS ;調用顯示字元串子程序
CALL ENTER ;調用顯示回車換行子程序
CALL ENTER ;這個...同上啊^-^

LEA DX,MSG2 ;輸出第二個字元串的偏移地址
CALL DISPCHS ;調用顯示字元串子程序

AGAIN: CALL ENTER ;定義AGAIN標號.用於選擇錯誤循環

LEA DX,MSG3 ;輸出第三個字元串的偏移地址
CALL DISPCHS ;調用顯示字元串子程序

MOV AH,01H ;調用1號功能:從鍵盤輸入一個字元並回顯
INT 21H ;完成輸入回顯
CMP AL,'1' ;輸入的字元和1相比較
JE BASICP ;如果相等,轉移到BASICP標號(JE=Jump if Equal)
CMP AL,'2' ;輸入的字元和2相比較 ||
JE ADVANP ;如果相等,轉移到ADVANP標號(JE=如果相等就轉移)
JMP ERROR ;否則就無條件轉移到ERROR標號

EXIT: MOV AH,4CH ;4C號功能調用:終止當前程序並返回調用程序
INT 21H ;返回DOS

BASICP: CALL ENTER ;什麼,還要解釋啊.暈-_-!!!
LEA DX,MSG4 ;輸出第三個字元串的偏移地址
CALL DISPCHS ;調用顯示字元串子程序
CALL ENTER ;..........
JMP EXIT ;無條件轉移到EXIT標號

ADVANP: CALL ENTER ;55555555
LEA DX,MSG5 ;解釋了四次,應該懂了吧
CALL DISPCHS ;調用顯示字元串子程序
CALL ENTER ;再問就死給你看
JMP EXIT ;無條件轉移到EXIT標號

ERROR: CALL ENTER
LEA DX,ERRMSG ;輸出選擇錯誤信息
CALL DISPCHS ;調用顯示字元串子程序
MOV DL,07H ;輸出ASCII碼的報警(響鈴)控制符BEL(07H)
CALL DISPCH ;調用顯示單個字元子程序
CALL ENTER
JMP AGAIN

DISPCH PROC NEAR
;顯示單個字元子程序,NEAR說明子程序和主程序在同一個代碼段中(現無主程序調用)
MOV AH,02H ;2號功能調用:顯示器輸出字元
INT 21H ;完成輸出顯示
RET ;返回
DISPCH ENDP ;子程序結尾

ENTER PROC NEAR ;顯示回車換行子程序
MOV DL,0DH ;輸出ASCII碼的回車控制符CR(0DH)
CALL DISPCH ;調用顯示單個字元子程序
MOV DL,0AH ;輸出ASCII碼的換行控制符LF(0AH)
CALL DISPCH ;調用顯示單個字元子程序
RET ;返回
ENTER ENDP ;子程序結尾

DISPCHS PROC NEAR
;顯示字元串子程序,NEAR說明子程序和主程序在同一個代碼段中(現無主程序調用)
MOV AH,09H ;9號功能調用:顯示字元串
INT 21H ;完成輸出顯示
RET
DISPCHS ENDP

CODE ENDS ;代碼段結尾
END START ;結束匯編

;把以上代碼復制到記事本等文本程序中,並保存.(如helloch.asm)
;編譯:masm helloch.asm
;連接:link helloch.obj
;執行:helloch.exe

======================================================

title ***hello,world進階之字元串輸入輸出 by lluct***

data segment ;定義數據段
input db 100 p(?)
;定義輸入的字元串,字元串必須用db定義,長度為100個位元組
msg1 db 'Hello,','$'
;定義輸出的前綴字元串信息,字元串必須用db定義,$為結束標志(24h)
msg2 db ',Welcome to here!','$'
;定義輸出的後綴字元串信息
headmsg db 'PLEASE INPUT YOUR NAME:','$'
;開始顯示的字元串信息
data ends ;數據段結尾

code segment ;定義代碼段
assume cs:code ;規定cs的內容
assume ds:data ;規定ds的內容

start: mov ax,data ;程序從start開始
mov ds,ax ;ds置初值,data的段地址
mov si,0 ;變址寄存器置初值0

call enter ;調用顯示回車換行子程序
lea dx,headmsg ;輸出開始顯示的字元串的偏移地址
call dispchs ;調用顯示字元串子程序
repeat: mov ah,01h
;定義repeat標號,用於循環輸入單個字元.調用1號功能:從鍵盤輸入一個字元並回顯
int 21h ;完成輸入回顯
cmp al,0dh ;輸入的字元和CR(回車)比較
je exit ;如果等於回車就轉移到exit
mov input[si],al ;把al的值傳送到input的si地址中(好像是這樣吧)
inc si ;si加1
jmp repeat ;無條件轉移到repeat

exit: call enter
mov input[si],24h ;給輸入完成的字元串加上結束標志($)
call enter
lea dx,msg1 ;輸出前綴字元串的偏移地址
call dispchs ;調用顯示字元串子程序
lea dx,input ;輸出剛才輸入的字元串
call dispchs
lea dx,msg2
call dispchs
call enter

mov ah,4ch ;4c號功能調用:終止當前程序並返回調用程序
int 21h ;返回dos

enter proc near ;顯示回車換行子程序
mov dl,0dh ;輸出ascii碼的回車控制符cr(0dh)
call dispch
mov dl,0ah ;輸出ascii碼的換行控制符lf(0ah)
call dispch
ret ;返回
enter endp ;子程序結束

dispch proc near
mov ah,02h ;2號功能調用:顯示器輸出字元
int 21h ;完成輸出顯示
ret ;返回
dispch endp

dispchs proc near
mov ah,09h ;9號功能調用:顯示字元串
int 21h ;完成輸出顯示
ret ;返回
dispchs endp

code ends ;代碼段結尾
end start ;結束匯編

;把以上代碼復制到記事本等文本程序中,並保存.(如heinout.c)
;編譯:masm heinout.asm
;連接:link heinout.obj
;執行:heinout.exe

④ 匯編語言和C語言有什麼區別

1:
匯編語言是面向具體CPU及其硬體結構的語言
C語言可以做到硬體無關性
2:
匯編語言效率較高
C語言效率相對較低
3:
匯編語言是非結構語言,可讀性較弱
C語言是結構語言,可讀性較強
4:
匯編語言基本沒有可移植性
C言可移植性很強
5:
匯編語言沒有函數庫,所有代碼需要自己組織
C語言有豐富的函數庫可供調用。

⑤ C語言與匯編語言

樓上都不懂。
C相對匯編來說的優勢主要在移植性上和開發效率上。程序執行效率不如匯編。所以如果不關注程序執行效率的話,推薦用C.當然,現在絕大部分的處理器都有C編譯器。
但是為什麼8086上採用匯編語言呢?
最主要的的原因是,8086有足夠多的通用寄存器。
為什麼有足夠多的通用寄存器就不需要用C了呢?
原因在於,你就不需要層層壓棧來控制參數的保存和傳遞,而這在C里都是編譯器為你自動分配的。在C里,對你而言只要知道你定義的變數名就可以,而不需要知道編譯器是如何分配內存單元或者寄存器來存儲你的變數。當你擁有了足夠多的通用寄存器,用匯編做小程序不是更簡單?

⑥ C語言和匯編語言的關系

程序員編寫的C語言代碼,首先要經過C語言編譯器,生成匯編代碼,這個過程稱為編譯階斷,當C語言編譯器生成匯編代碼後,再調用匯編器來將匯編代碼編譯成匯編指令。

這是一種站在巨人肩人的作法,最早的C++編程語言也是這樣的實現方法,只不過那時候叫Cfront程序,Cfront程序的作用是將C++代碼轉換成C語言代碼,類似於一個文本處理器,然後再調用C語言編譯器,將C源碼編譯成匯編代碼,然後再調用匯編器將匯編代碼編譯成機器碼。

這個過程,在Windows平台上不容易操作,但是在Linux平台上很容易看到。以gcc這款c語言編譯器為例,它實際上是四個小程序。
cp: c語言預處理程序,有它負責進行預處理操作。
cc: C語言編譯器,它負責將C源碼編譯成匯編代碼。
as: 匯編器,它負責將匯編代碼編譯成機器碼,一般使用gcc test.c這樣的命令編譯C語言時,會生成一個a.out的程序,它實際上指的就是as ouput,即匯編器輸出文件。
link: 鏈接器,它負責將匯編器輸入的機器碼和庫打包成一個操作系統可以運行的可執行文件,在Linux上的可執行文件格式是ELF格式,這個格式的實現是有鏈接器來完成的。

⑦ C語言和匯編語言的區別是什麼

區別如下:

(1)兩者編譯組成不同。匯編語言是將由0、1組成的機器語言用具有簡單語義的英文代碼表示,而C語言不但將許多相關的機器指令合成為單條指令,並且去掉了與具體操作有關但與完成工作無關的細節,例如使用堆棧、寄存器等。

(2)兩者被計算機識別的路徑不同。匯編語言通常用於對硬體的直接操控。而且C語言所編制的程序不能直接被計算機識別,必須經過轉換才能被執行。

(3)兩者用處不同。匯編語言通常用在程序中最核心的、控制硬體的代碼,一方面是安全,另一方面提高運行速度。而C語言通常用在計算機外用功能上。

(4)兩者學習難易程度不同。匯編語言所需要的編繪知識很多很復雜,經常被開發者使用。而C語言是一門很簡單方便的語言,編程者也就不需要有太多的專業知識。

計算機語言(Computer Language)指用於人與計算機之間通訊的語言。計算機語言是人與計算機之間傳遞信息的媒介。計算機系統最大特徵是指令通過一種語言傳達給機器。計算機語言從低級到高級可以分為:

(1)機器語言,即由0、1組成的機器硬體可以識別的語言;

(2)低級語言,即匯編語言

(3)中級語言,如C語言

(4)高級語言,如C++,JAVA,C#等。

(7)c匯編語言結構擴展閱讀:

如今通用的編程語言有兩種形式:匯編語言和高級語言。

匯編語言和機器語言實質是相同的,都是直接對硬體操作,只不過指令採用了英文縮寫的標識符,容易識別和記憶。源程序經匯編生成的可執行文件不僅比較小,而且執行速度很快。

高級語言是絕大多數編程者的選擇。和匯編語言相比,它不但將許多相關的機器指令合成為單條指令,並且去掉了與具體操作有關但與完成工作無關的細節,例如使用堆棧、寄存器等,這樣就大大簡化了程序中的指令。同時,由於省略了很多細節,編程者也就不需要有太多的專業知識。

高級語言主要是相對於低級語言而言,它並不是特指某一種具體的語言,而是包括了很多編程語言,如流行的vb、vc、foxpro、delphi等,這些語言的語法、命令格式都各不相同。

高級語言所編制的程序不能直接被計算機識別,必須經過轉換才能被執行,按轉換方式可將它們分為兩類:解釋類和編譯類。

⑧ 匯編語言和c語言各自優缺點

C語言編屬於高級語言,具有可移植性,能夠結構化編程。使用標准C語言的程序,幾乎都可以不作改變移植到不同的微機平台上,對於嵌入式等的微控制晶元,屬於標准C語言的部分也很少需要修改,而且程序很容易讀懂。
C語言編寫程序結構清晰,移植性好,容易維護和修改。

匯編語言針對不同的操作系統平台,不同的微控制器,指令都是完全不同的,即使指令相似,也不具有可移植性。但是匯編語言是針對專門的控制器的,所以運行速度可以精確到一個指令周期。匯編語言的程序讀懂需要藉助微控制器的指令手冊以及各個寄存器的說明,所以很難讀懂。
匯編語言編寫代碼實時性強,能夠直接控制硬體的工作狀態,但是不具有可移植性,維護和修改困難。

⑨ c語言和匯編語言的區別

C語言是需要經過機器語言解釋和翻譯才能被硬體執行的高級語言。
匯編是一種直接對於硬體操作的語言,屬於低級語言,面向硬體。
另外:兩種語言的語法也是完全不同的。你可以在網上找一些例子看看就知道區別了。

⑩ 一條C語言由若干匯編語言組成。這句話對嗎

不對,C語言裡面除了_asm那類命令,沒有一句是匯編語句。

正確的說法是,一條C語言會被編譯器編譯成若干句匯編語言,以便轉換為可執行代碼。