當前位置:首頁 » 編程語言 » c語言寫匯編語言

c語言寫匯編語言

發布時間: 2024-10-23 02:46:29

『壹』 如何將c語言變成匯編

理論上來說C語言改成匯編是完全可以的,當然實際上還是有一定難度。

1、完全手工根據C語言的流程和目的,改編成匯編語言,這樣做工作量很大

2、利用模擬軟體,在模擬環境下,是有相應的匯編代碼的,這樣做工作量相對較小,但可讀性較差。

『貳』 C語言為什麼要先編譯成匯編語言

C語言,具有可移植性,或者說同樣的代碼可以在不同cpu平台上運行得到同樣的結果
匯編語言,移植性差,一般針對某型cpu,每個類型的cpu都有自己的匯編語言
為保證C語言編制的通用演算法的可移植性,比如我們用C編寫了一套mp3解碼演算法程序,要在pc機上、手機上都能用,那麼我們就採用通用的C編譯器,將C語言程序編譯成指定CPU的匯編語言,再匯編成機器可執行程序。
另一個用途是程序優化問題,在C語言層次,由於是高級語言,不涉及底層硬體,那麼底層硬體的特性不能夠得到充分利用,在需要優化演算法的場合,我們需要將C語言演算法編譯生成匯編程序,然後修改需要優化的匯編程序達到目的。比如,你在手機上經常會遇到音頻解碼器,需要安裝,而且不同的cpu需要選擇不同的解碼器,這些解碼器應當就是在匯編層次上優化了演算法的可執行代碼,關鍵部分經過匯編級優化,不需要優化部分仍然使用C語言編譯的結果。

『叄』 C語言寫的程序 怎麼反匯編成匯編語言

在keilc中,單片機的C語言程序可以再DEBUG模式中得到對應的匯編程序。步驟如下:

1、建立工程,導入C文件代碼,編譯生成hex文件。

3、點擊View--Disassembly Window調出匯編窗口,如上圖。

通過以上步驟就可以看到與C對應的匯編程序了。

『肆』 怎麼把c語言轉換成匯編語言啊

1、打開VC6、0,在VC6、0中進行增加參數/FA的操作,編譯後debug目錄中將會增加對應源文件的匯編文件;
2、如果想查看C語句對應的匯編代碼的話,可以按F11單步調試,在debug工具欄中選擇「disassembly」即可。每行C代碼下面就是對應的匯編代碼。如果debug工具欄不見了,可在VC上方空白菜單處右鍵,選擇「debug」即可彈出debug工具欄。

『伍』 如何將c語言程序轉成匯編語言程序。

如果是VC則在編譯器命令行參數再加 /FA 則會生成匯編代碼。如果參數是 /FAs 則會同時將源碼和匯編代碼。
/FA 程序集代碼;.asm
/FAc 機器碼和程序集代碼;.cod
/FAs 源代碼和程序集代碼;.asm
/FAcs 機器碼、源代碼和程序集碼;.cod

/Fa的用法

/Fa 為編譯中的每個源代碼文件創建一個源文件.asm。
/Fa文件名 將文件名.asm 放到當前目錄中。僅在編譯單個源代碼文件時有效。
/Fa文件名.擴展名 將文件名.擴展名放到當前目錄中。僅在編譯單個源代碼文件時有效。
/Fa目錄\ 為編譯中的每個源代碼文件創建一個源文件.asm,並將其放到指定目錄中。請注意必須有後綴反斜杠。只允許使用當前磁碟上的路徑。
/Fa目錄\文件名 將文件名.asm 放到指定目錄中。僅在編譯單個源代碼文件時有效。
/Fa目錄\文件名.擴展名 將文件名.擴展名放到指定目錄中。僅在編譯單個源代碼文件時有效。

如果你是用gcc 或 g++編譯器,如dev c++則加入命令行參數 -S 即可

『陸』 C語言是什麼寫的

1、最早的C語言是匯編語言寫的。任何計算機語言編寫完成後,都要轉換成二進制形式的機器語言,才能運行。機器語言也就是二進制代碼,可以和匯編語言一一對應。最早的時候是機器語言,也就是二進制的01代碼,但是這個不容易讀懂,所以人們發明了助記符,也就是匯編語言,讓機器的01代碼和匯編的助記符一一對應,這樣容易記憶和讀懂。匯編雖然能讀懂,但是利用的時候還是非常繁瑣,所以人們發明了高級語言,也就是b,c,p,f等語言,這樣大大減少了編寫程序的工作量。
2、c語言,是用c的標准格式編寫的,用c的編譯環境把程序轉換為機器語言才能在計算機中運行,c很早的變異環境tc是用匯編寫的,後來的vc編譯環境就不是了。一般的程序,是用高級語言編寫,最後用匯編代碼優化一下。

『柒』 C語言轉匯編語言(把下面的C語言轉成單片機匯編語言)

; .\test5.SRC generated from: test5.c
; COMPILER INVOKED BY:
; E:\Program Files\keil\C51\BIN\C51.EXE test5.c BROWSE DEBUG OBJECTEXTEND SRC(.\test5.SRC)

$NOMOD51

NAME TEST5

P0 DATA 080H
P1 DATA 090H
P2 DATA 0A0H
P3 DATA 0B0H
T0 BIT 0B0H.4
AC BIT 0D0H.6
T1 BIT 0B0H.5
T2 BIT 090H.0
EA BIT 0A8H.7
IE DATA 0A8H
EXF2 BIT 0C8H.6
RD BIT 0B0H.7
ES BIT 0A8H.4
IP DATA 0B8H
RI BIT 098H.0
INT0 BIT 0B0H.2
CY BIT 0D0H.7
TI BIT 098H.1
INT1 BIT 0B0H.3
RCAP2H DATA 0CBH
PS BIT 0B8H.4
SP DATA 081H
T2EX BIT 090H.1
OV BIT 0D0H.2
RCAP2L DATA 0CAH
C_T2 BIT 0C8H.1
WR BIT 0B0H.6
RCLK BIT 0C8H.5
TCLK BIT 0C8H.4
SBUF DATA 099H
PCON DATA 087H
SCON DATA 098H
TMOD DATA 089H
TCON DATA 088H
IE0 BIT 088H.1
IE1 BIT 088H.3
B DATA 0F0H
CP_RL2 BIT 0C8H.0
ACC DATA 0E0H
ET0 BIT 0A8H.1
ET1 BIT 0A8H.3
TF0 BIT 088H.5
ET2 BIT 0A8H.5
TF1 BIT 088H.7
TF2 BIT 0C8H.7
RB8 BIT 098H.2
TH0 DATA 08CH
EX0 BIT 0A8H.0
IT0 BIT 088H.0
TH1 DATA 08DH
TB8 BIT 098H.3
EX1 BIT 0A8H.2
IT1 BIT 088H.2
TH2 DATA 0CDH
P BIT 0D0H.0
SM0 BIT 098H.7
TL0 DATA 08AH
SM1 BIT 098H.6
TL1 DATA 08BH
SM2 BIT 098H.5
TL2 DATA 0CCH
p21 BIT 0A0H.1
PT0 BIT 0B8H.1
p23 BIT 0A0H.3
PT1 BIT 0B8H.3
RS0 BIT 0D0H.3
PT2 BIT 0B8H.5
TR0 BIT 088H.4
RS1 BIT 0D0H.4
p25 BIT 0A0H.5
TR1 BIT 088H.6
TR2 BIT 0C8H.2
PX0 BIT 0B8H.0
PX1 BIT 0B8H.2
DPH DATA 083H
DPL DATA 082H
EXEN2 BIT 0C8H.3
REN BIT 098H.4
T2CON DATA 0C8H
RXD BIT 0B0H.0
TXD BIT 0B0H.1
F0 BIT 0D0H.5
PSW DATA 0D0H
?PR?timer0?TEST5 SEGMENT CODE
?PR?timer1?TEST5 SEGMENT CODE
?PR?_delay?TEST5 SEGMENT CODE
?PR?_pwm1?TEST5 SEGMENT CODE
?PR?_pwm0?TEST5 SEGMENT CODE
?PR?foot0?TEST5 SEGMENT CODE
?PR?foot1?TEST5 SEGMENT CODE
?PR?foot2?TEST5 SEGMENT CODE
?PR?foot3?TEST5 SEGMENT CODE
?PR?main?TEST5 SEGMENT CODE
?CO?TEST5 SEGMENT CODE
?DT?TEST5 SEGMENT DATA
EXTRN CODE (?C_STARTUP)
PUBLIC rud1
PUBLIC z
PUBLIC y
PUBLIC x
PUBLIC n
PUBLIC m
PUBLIC l
PUBLIC k
PUBLIC j
PUBLIC i
PUBLIC d
PUBLIC c?
PUBLIC b
PUBLIC a?
PUBLIC rud3
PUBLIC rud2
PUBLIC date1
PUBLIC date0
PUBLIC main
PUBLIC foot3
PUBLIC foot2
PUBLIC foot1
PUBLIC foot0
PUBLIC _pwm0
PUBLIC _pwm1
PUBLIC _delay
PUBLIC timer1
PUBLIC timer0

RSEG ?DT?TEST5
rud2: DS 2
rud3: DS 2
a?: DS 2
b: DS 2
c?: DS 2
d: DS 2
i: DS 2
j: DS 2
k: DS 2
l: DS 2
m: DS 2
n: DS 2
x: DS 2
y: DS 2
z: DS 2
rud1: DS 2

RSEG ?CO?TEST5
date0:
DW 004B0H
DW 004C9H
DW 004E2H
DW 004FBH
DW 00514H
DW 0052DH
DW 00546H
DW 0055FH
DW 00578H
DW 00591H
DW 005AAH
DW 005C3H
DW 005DCH
DW 005F5H
DW 0060EH
DW 00627H
DW 00640H
DW 00659H
DW 00672H
DW 0068BH
DW 006A4H
DW 006BDH
DW 006D6H
DW 006EFH
DW 00708H

date1:
DW 003E8H
DW 00401H
DW 0041AH
DW 00433H
DW 0044CH
DW 00465H
DW 0047EH
DW 00497H
DW 004B0H
DW 004C9H
DW 004E2H
DW 004FBH
DW 00514H
DW 0052DH
DW 00546H
DW 0055FH
DW 00578H
DW 00591H
DW 005AAH
DW 005C3H
DW 005DCH
DW 005F5H
DW 0060EH
DW 00627H
DW 00640H
DW 00659H
DW 00672H
DW 0068BH
DW 006A4H
DW 006BDH
DW 006D6H
DW 006EFH
DW 00708H
DW 00721H
DW 0073AH
DW 00753H
DW 0076CH
DW 00785H
DW 0079EH
DW 007B7H
DW 007D0H

; # include <reg52.h>
; #define uchar unsigned char
; #define uint unsigned int
; uint a,b,c,d,i,j,k,x,y,z,l,m,n,rud1,rud2,rud3;
; sbit p21=P2^1;
; sbit p23=P2^3;//
; sbit p25=P2^5; //
; int code date0[]={1200,1225,1250,1275,1300,
; 1325,1350,1375,1400,
; 1425,1450,1475,1500,
; 1525,1550,1575,1600,
; 1625,1650,1675,1700,
; 1725,1750,1775,1800}; //p25 25個
;
; int code date1[]={1000,1025,1050,1075,1100,
; 1125,1150,1175,1200,
; 1225,1250,1275,1300,
; 1325,1350,1375,1400,
; 1425,1450,1475,1500,
; 1525,1550,1575,1600,
; 1625,1650,1675,1700,
; 1725,1750,1775,1800,
; 1825,1850,1875,1900,
; 1925,1950,1975,2000}; //p21&p23 41個
;
CSEG AT 0000BH
LJMP timer0

; void timer0(void) interrupt 1

RSEG ?PR?timer0?TEST5
USING 0
timer0:
PUSH ACC
PUSH PSW
; SOURCE LINE # 26
; {
; p25=~p25;
; SOURCE LINE # 28
CPL p25
; c=20000-c;
; SOURCE LINE # 29
CLR C
MOV A,#020H
SUBB A,c?+01H
MOV c?+01H,A
MOV A,#04EH
SUBB A,c?
MOV c?,A
; TH0=-(c/256); TL0=-(c%256);
; SOURCE LINE # 30
CPL A
INC A
MOV TH0,A
MOV A,c?+01H
CPL A
INC A
MOV TL0,A
; }
; SOURCE LINE # 31
POP PSW
POP ACC
RETI
; END OF timer0

CSEG AT 0001BH
LJMP timer1

; void timer1(void) interrupt 3

RSEG ?PR?timer1?TEST5
USING 0
timer1:
PUSH ACC
PUSH PSW
; SOURCE LINE # 32
; {
;
; p21=~p21;
; SOURCE LINE # 35
CPL p21
; p23=~p23;
; SOURCE LINE # 36
CPL p23
; d=20000-d;
; SOURCE LINE # 37
CLR C
MOV A,#020H
SUBB A,d+01H
MOV d+01H,A
MOV A,#04EH
SUBB A,d
MOV d,A
; TH1=-(d/256); TL1=-(d%256);
; SOURCE LINE # 38
CPL A
INC A
MOV TH1,A
MOV A,d+01H
CPL A
INC A
MOV TL1,A
;
; }
; SOURCE LINE # 40
POP PSW
POP ACC
RETI
; END OF timer1

;
; void delay(t)

RSEG ?PR?_delay?TEST5
L?0033:
USING 0
MOV R7,#030H
MOV R6,#075H
LCALL _delay
LCALL _delay
LCALL _delay
LCALL _delay
_delay:
; SOURCE LINE # 42
;---- Variable 't?240' assigned to Register 'R6/R7' ----
; {for(l=1;l<=t;l++);}
; SOURCE LINE # 43
MOV l,#00H
MOV l+01H,#01H
?C0003:
SETB C
MOV A,l+01H
SUBB A,R7
MOV A,l
SUBB A,R6
JNC ?C0006
INC l+01H
MOV A,l+01H
JNZ ?C0003
INC l
?C0028:
SJMP ?C0003
?C0006:
RET
; END OF _delay

;
; void pwm1(y)

RSEG ?PR?_pwm1?TEST5
L?0035:
USING 0
MOV A,j+01H
ADD A,ACC
MOV R7,A
MOV A,j
RLC A
MOV R6,A
MOV A,#LOW (date1)
ADD A,R7
MOV DPL,A
MOV A,#HIGH (date1)
ADDC A,R6
MOV DPH,A
CLR A
MOVC A,@A+DPTR
MOV R6,A
MOV A,#01H
MOVC A,@A+DPTR
MOV R7,A
_pwm1:
; SOURCE LINE # 45
;---- Variable 'y?341' assigned to Register 'R6/R7' ----
; {
; SOURCE LINE # 46
; b=y;
; SOURCE LINE # 47
MOV b,R6
MOV b+01H,R7
; d=b;
; SOURCE LINE # 48
MOV d,b
MOV d+01H,b+01H
; p21=1;
; SOURCE LINE # 49
SETB p21
; p23=1;
; SOURCE LINE # 50
SETB p23
; TH1=-(b/256); TL1=-(b%256);
; SOURCE LINE # 51
MOV A,b
CPL A
INC A
MOV TH1,A
MOV A,b+01H
CPL A
INC A
MOV TL1,A
; TR1=1;//啟動定時器
; SOURCE LINE # 52
SETB TR1
; }
; SOURCE LINE # 53
RET
; END OF _pwm1

; void pwm0(x)

RSEG ?PR?_pwm0?TEST5
L?0034:
USING 0
MOV A,i+01H
ADD A,ACC
MOV R7,A
MOV A,i
RLC A
MOV R6,A
MOV A,#LOW (date0)
ADD A,R7
MOV DPL,A
MOV A,#HIGH (date0)
ADDC A,R6
MOV DPH,A
CLR A
MOVC A,@A+DPTR
MOV R6,A
MOV A,#01H
MOVC A,@A+DPTR
MOV R7,A
_pwm0:
; SOURCE LINE # 54
;---- Variable 'x?442' assigned to Register 'R6/R7' ----
; {
; SOURCE LINE # 55
; a=x;
; SOURCE LINE # 56
MOV a?,R6
MOV a?+01H,R7
; c=a;
; SOURCE LINE # 57
MOV c?,a?
MOV c?+01H,a?+01H
; p25=1;
; SOURCE LINE # 58
SETB p25
; TH0=-(a/256); TL0=-(a%256);
; SOURCE LINE # 59
MOV A,a?
CPL A
INC A
MOV TH0,A
MOV A,a?+01H
CPL A
INC A
MOV TL0,A
; TR0=1;//啟動定時器
; SOURCE LINE # 60
SETB TR0
; }
; SOURCE LINE # 61
RET
; END OF _pwm0

; void foot0()

RSEG ?PR?foot0?TEST5
foot0:
USING 0
; SOURCE LINE # 62
; {
; SOURCE LINE # 63
; for(i=0;i<24;i++)
; SOURCE LINE # 64
CLR A
MOV i,A
MOV i+01H,A
?C0009:
; {
; SOURCE LINE # 65
; pwm0(date0[i]);
; SOURCE LINE # 66
LCALL L?0034
; delay(888);
; SOURCE LINE # 67
MOV R7,#078H
MOV R6,#03H
LCALL _delay
; }
; SOURCE LINE # 68
INC i+01H
MOV A,i+01H
JNZ ?C0029
INC i
?C0029:
CLR C
SUBB A,#018H
MOV A,i
SUBB A,#00H
JC ?C0009
; }
; SOURCE LINE # 69
?C0012:
RET
; END OF foot0

; void foot1()

RSEG ?PR?foot1?TEST5
foot1:
USING 0
; SOURCE LINE # 70
; {
; SOURCE LINE # 71
; for(j=0;j<14;j++)
; SOURCE LINE # 72
CLR A
MOV j,A
MOV j+01H,A
?C0013:
; { pwm1(date1[j]);
; SOURCE LINE # 73
LCALL L?0035
; delay(1332);
; SOURCE LINE # 74
MOV R7,#034H
MOV R6,#05H
LCALL _delay
; }
; SOURCE LINE # 75
INC j+01H
MOV A,j+01H
JNZ ?C0030
INC j
?C0030:
CLR C
SUBB A,#0EH
MOV A,j
SUBB A,#00H
JC ?C0013
; }
; SOURCE LINE # 76
?C0016:
RET
; END OF foot1

; void foot2()

RSEG ?PR?foot2?TEST5
foot2:
USING 0
; SOURCE LINE # 77
; {
; SOURCE LINE # 78
; for(i=24;i>1;i--)
; SOURCE LINE # 79
MOV i,#00H
MOV i+01H,#018H
?C0017:
; {
; SOURCE LINE # 80
; pwm0(date0[i]);
; SOURCE LINE # 81
LCALL L?0034
; delay(888);
; SOURCE LINE # 82
MOV R7,#078H
MOV R6,#03H
LCALL _delay
; }
; SOURCE LINE # 83
MOV A,i+01H
DEC i+01H
JNZ ?C0031
DEC i
?C0031:
SETB C
MOV A,i+01H
SUBB A,#01H
MOV A,i
SUBB A,#00H
JNC ?C0017
; }
; SOURCE LINE # 84
?C0020:
RET
; END OF foot2

; void foot3()

RSEG ?PR?foot3?TEST5
foot3:
USING 0
; SOURCE LINE # 85
; {
; SOURCE LINE # 86
; for(j=14;j>1;j--)
; SOURCE LINE # 87
MOV j,#00H
MOV j+01H,#0EH
?C0021:
; {
; SOURCE LINE # 88
; pwm1(date1[j]);
; SOURCE LINE # 89
LCALL L?0035
; delay(1332);
; SOURCE LINE # 90
MOV R7,#034H
MOV R6,#05H
LCALL _delay
; }
; SOURCE LINE # 91
MOV A,j+01H
DEC j+01H
JNZ ?C0032
DEC j
?C0032:
SETB C
MOV A,j+01H
SUBB A,#01H
MOV A,j
SUBB A,#00H
JNC ?C0021
; }
; SOURCE LINE # 92
?C0024:
RET
; END OF foot3

; void main(void)

RSEG ?PR?main?TEST5
main:
USING 0
; SOURCE LINE # 93
; {
; SOURCE LINE # 94
; p21=0;p23=0;p25=0;
; SOURCE LINE # 95
CLR p21
CLR p23
CLR p25
; TMOD=0x11;EA=1;ET0=1;ET1=1;
; SOURCE LINE # 96
MOV TMOD,#011H
SETB EA
SETB ET0
SETB ET1
; delay(30000); delay(30000); delay(30000); delay(30000);delay(30000);
; SOURCE LINE # 97
LCALL L?0033
; pwm0(1200);
; SOURCE LINE # 98
MOV R7,#0B0H
MOV R6,#04H
LCALL _pwm0
; pwm1(1000);
; SOURCE LINE # 99
MOV R7,#0E8H
DEC R6
LCALL _pwm1
; delay(30000); delay(30000); delay(30000); delay(30000);delay(30000);
; SOURCE LINE # 100
LCALL L?0033
?C0025:
; while(1)
; SOURCE LINE # 101
; {
; SOURCE LINE # 102
; p21=0;p23=0;p25=0;
; SOURCE LINE # 103
CLR p21
CLR p23
CLR p25
; foot0();//delay(30000);
; SOURCE LINE # 104
LCALL foot0
; foot1();//delay(30000);
; SOURCE LINE # 105
LCALL foot1
; foot2();//delay(30000);
; SOURCE LINE # 106
LCALL foot2
; foot3();//delay(30000);
; SOURCE LINE # 107
LCALL foot3
; }
; SOURCE LINE # 108
SJMP ?C0025
; END OF main

END

;--------------------------------------------------------
;我是用keil uvision2轉的。
;你C語言編譯時正常,但轉成匯編後就編譯有問題。
;錯誤信息如下:
;test5.src(138): error A8: ATTEMPT TO DEFINE AN ALREADY DEFINED LABEL
;我也不知道哪來的錯誤。
;希望可以幫到你。

『捌』 實踐,C語言是怎麼變成匯編的

c語言未必會經歷匯編語言這一環節,准確的說,c語言經歷編譯器(必須),鏈接器(某種程度上非必須)的處理,成為可執行代碼(一般是二進制代碼)。
而匯編也許是目前多數編譯器提供的中間環節(vc,vs都提供在調試運行下使用反匯編的功能),因為對於匯編語言來說,進一步編譯成機器語言的難度很低,只需查找有限的匯編指令對應的編碼,如MOV,ADD等,具體編碼與機器有關。
而你說的c語言變成匯編這一過程,正是編譯器的核心工作,也是最為困難的。需要對你的程序(本質上是一個超長的字元串)做分割,詞法分析,語法分析,最後翻譯成匯編。

熱點內容
fgo腳本登錄 發布:2024-11-24 00:20:29 瀏覽:18
在dos下如何查看配置 發布:2024-11-24 00:20:28 瀏覽:731
北京時間伺服器在什麼地方 發布:2024-11-24 00:19:50 瀏覽:18
分貝的演算法 發布:2024-11-24 00:16:07 瀏覽:928
橫截面演算法 發布:2024-11-24 00:15:12 瀏覽:258
pythontile 發布:2024-11-24 00:10:04 瀏覽:546
修改pdf加密文件 發布:2024-11-24 00:09:50 瀏覽:223
DVFFORTRAN編譯器 發布:2024-11-24 00:03:50 瀏覽:615
sublimetext如何配置php 發布:2024-11-23 23:54:22 瀏覽:436
linux文件系統分區 發布:2024-11-23 23:54:15 瀏覽:736