標題: 如何將已經編好的C語言程序改寫成匯編語言? [打印本頁]
作者: 南京江寧 時間: 2020-6-2 10:23
標題: 如何將已經編好的C語言程序改寫成匯編語言?
幫我把下面已經編好的C程序改寫成匯編語言:
實現一下功能:
設計一個以單片機為核心的單詞記憶測試器:
1、實現單詞的錄入(為使程序具有可演示性,單詞不少于10個)。
2、單詞用按鍵控制依次在屏幕上顯示,按鍵選擇認識還是不認識,也可以直接進入下一個或者上一個。實現所有單詞的循環顯示。
3、單詞背完后給出正確率。(實時顯示正確率,且對同一個單詞確定不會重復增加正確率)
4、不認識時,警示燈亮。
Proteus圖:
C程序:
#include <reg51.h>
#include <intrins.h>
sbit rs= P2^0;
sbit rw = P2^1;
sbit ep = P2^2;
sbit p10=0x90;
sbit p11=0x91;
sbit p12=0x92;
sbit p13=0x93;
sbit p24=0xA4;
unsigned char code dis1[12][9] = {"1","air","rice","tree","sea","hair","meat","he","she","good","nice"};
unsigned char code dis2[] = {"rate"};
unsigned char code dis3[11][9]={"0%","10%","20%","30%","40%","50%","60%","70%","80%","90%","100%"};
unsigned int bzw[13]={2,2,2,2,2,2,2,2,2,2,2,2,2};
void delay(unsigned char ms)
{
unsigned char i;
while(ms--)
{
for(i = 0; i< 250; i++)
{
_nop_();
_nop_();
_nop_();
_nop_();
}
}
}
bit lcd_bz()
{
bit result;
rs = 0;
rw = 1;
ep = 1;
_nop_();
_nop_();
_nop_();
_nop_();
result =(bit)(P0 & 0x80);
ep = 0;
return result;
}
void lcd_wcmd(unsigned char cmd) //寫指令
{
while(lcd_bz());//判斷LCD是否忙碌
rs = 0;
rw = 0; //re=0,rw=1 ;e為正脈沖
ep = 0;
_nop_();
_nop_();
P0 = cmd;
_nop_();
_nop_();
_nop_();
_nop_();
ep = 1;
_nop_();
_nop_();
_nop_();
_nop_();
ep = 0;
}
void lcd_pos(unsigned char pos) //顯示位置轉換程序
{
lcd_wcmd(pos | 0x80); //顯示第一行的地址是0x08,第二行的是0xc0。
}
void lcd_wdat(unsigned char dat) //寫數據
{
while(lcd_bz());//判斷LCD是否忙碌
rs = 1;
rw = 0;
ep = 0;
P0 = dat;
_nop_();
_nop_();
_nop_();
_nop_();
ep = 1;
_nop_();
_nop_();
_nop_();
_nop_();
ep = 0;
}
void lcd_init() //初始化lcd
{
lcd_wcmd(0x38);
delay(1);
lcd_wcmd(0x0c);
delay(1);
lcd_wcmd(0x06);
delay(1);
lcd_wcmd(0x01); //清屏
delay(1);
}
void main(void)
{
unsigned char i;
unsigned char k;
unsigned char count;
unsigned char a;
unsigned char j;
lcd_init();// 初始化LCD
delay(10);j=0;
i=1;
while(1){
delay(60);
lcd_wcmd(0x01);//清屏指令,防止單詞由長到短時出現亂碼.
delay(1);
P1=0x00; j=0;
lcd_pos(0x01);//設置顯示位置
if(P1!=0)
{
switch(P1) //P1 掃行
{
case (0x01):
if(bzw[ i]==2)
{ count++;
bzw[ i]=bzw[ i]-1; //標志位,每個單詞只能使count加1.
if(bzw[ i]<2)
bzw[ i]=1;
} i++ ;
break;//sure
case (0x02):i++;j++;
bzw[ i]=2;break; //unknown
case (0x04):i--;break; //up
case (0x08):i++;break; //down
} }
p24=0;
if(j==1)
p24=1;
if(i==11) i=1;
if(i==0) i=10;
while(dis1[ i][k]!= '\0')
{
lcd_wdat(dis1[ i][k]);//單詞
k++;
}k=0;
lcd_pos(0x42);// 設置顯示位置
a = 0;
while(dis2[a] != '\0')
{
lcd_wdat(dis2[a]);// rate
a++;
}
if(count>10) count=10;
lcd_pos(0x48);
while(dis3[count][k]!= '\0')
{
lcd_wdat(dis3[count][k]);//正確率
k++;
}k=0;
}
}
附1
/*--------------------------------------------------------------------------
REG51.H
Header file for generic 80C51 and 80C31 microcontroller.
Copyright (c) 1988-2002 Keil Elektronik GmbH and Keil Software, Inc.
All rights reserved.
--------------------------------------------------------------------------*/
#ifndef __REG51_H__
#define __REG51_H__
/* BYTE Register */
sfr P0 = 0x80;
sfr P1 = 0x90;
sfr P2 = 0xA0;
sfr P3 = 0xB0;
sfr PSW = 0xD0;
sfr ACC = 0xE0;
sfr B = 0xF0;
sfr SP = 0x81;
sfr DPL = 0x82;
sfr DPH = 0x83;
sfr PCON = 0x87;
sfr TCON = 0x88;
sfr TMOD = 0x89;
sfr TL0 = 0x8A;
sfr TL1 = 0x8B;
sfr TH0 = 0x8C;
sfr TH1 = 0x8D;
sfr IE = 0xA8;
sfr IP = 0xB8;
sfr SCON = 0x98;
sfr SBUF = 0x99;
/* BIT Register */
/* PSW */
sbit CY = 0xD7;
sbit AC = 0xD6;
sbit F0 = 0xD5;
sbit RS1 = 0xD4;
sbit RS0 = 0xD3;
sbit OV = 0xD2;
sbit P = 0xD0;
/* TCON */
sbit TF1 = 0x8F;
sbit TR1 = 0x8E;
sbit TF0 = 0x8D;
sbit TR0 = 0x8C;
sbit IE1 = 0x8B;
sbit IT1 = 0x8A;
sbit IE0 = 0x89;
sbit IT0 = 0x88;
/* IE */
sbit EA = 0xAF;
sbit ES = 0xAC;
sbit ET1 = 0xAB;
sbit EX1 = 0xAA;
sbit ET0 = 0xA9;
sbit EX0 = 0xA8;
/* IP */
sbit PS = 0xBC;
sbit PT1 = 0xBB;
sbit PX1 = 0xBA;
sbit PT0 = 0xB9;
sbit PX0 = 0xB8;
/* P3 */
sbit RD = 0xB7;
sbit WR = 0xB6;
sbit T1 = 0xB5;
sbit T0 = 0xB4;
sbit INT1 = 0xB3;
sbit INT0 = 0xB2;
sbit TXD = 0xB1;
sbit RXD = 0xB0;
/* SCON */
sbit SM0 = 0x9F;
sbit SM1 = 0x9E;
sbit SM2 = 0x9D;
sbit REN = 0x9C;
sbit TB8 = 0x9B;
sbit RB8 = 0x9A;
sbit TI = 0x99;
sbit RI = 0x98;
#endif
附2
/*--------------------------------------------------------------------------
INTRINS.H
Intrinsic functions for C51.
Copyright (c) 1988-2004 Keil Elektronik GmbH and Keil Software, Inc.
All rights reserved.
--------------------------------------------------------------------------*/
#ifndef __INTRINS_H__
#define __INTRINS_H__
extern void _nop_ (void);
extern bit _testbit_ (bit);
extern unsigned char _cror_ (unsigned char, unsigned char);
extern unsigned int _iror_ (unsigned int, unsigned char);
extern unsigned long _lror_ (unsigned long, unsigned char);
extern unsigned char _crol_ (unsigned char, unsigned char);
extern unsigned int _irol_ (unsigned int, unsigned char);
extern unsigned long _lrol_ (unsigned long, unsigned char);
extern unsigned char _chkfloat_(float);
extern void _push_ (unsigned char _sfr);
extern void _pop_ (unsigned char _sfr);
#endif
-
N]}QZQTS_$T$C]L_[Q_(R{C.png
(71.52 KB, 下載次數: 30)
下載附件
2020-6-2 10:22 上傳
-
-
程序及圖.zip
2020-6-2 10:19 上傳
點擊文件名下載附件
98.94 KB, 下載次數: 3
作者: boboxuexi 時間: 2020-6-2 10:24
; .\123\main.SRC generated from: 123\main.c
; COMPILER INVOKED BY:
; C:\Keil\C51\BIN\C51.EXE 123\main.c BROWSE DEBUG OBJECTEXTEND PRINT(.\main.lst) SRC(.\123\main.SRC)
$NOMOD51
NAME MAIN
P0 DATA 080H
P1 DATA 090H
P2 DATA 0A0H
P3 DATA 0B0H
T0 BIT 0B0H.4
AC BIT 0D0H.6
T1 BIT 0B0H.5
EA BIT 0A8H.7
IE DATA 0A8H
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
PS BIT 0B8H.4
SP DATA 081H
OV BIT 0D0H.2
WR BIT 0B0H.6
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
ACC DATA 0E0H
ET0 BIT 0A8H.1
ET1 BIT 0A8H.3
TF0 BIT 088H.5
TF1 BIT 088H.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
P BIT 0D0H.0
SM0 BIT 098H.7
TL0 DATA 08AH
p10 BIT 090H.0
SM1 BIT 098H.6
TL1 DATA 08BH
p11 BIT 090H.1
SM2 BIT 098H.5
p12 BIT 090H.2
p13 BIT 090H.3
PT0 BIT 0B8H.1
ep BIT 0A0H.2
PT1 BIT 0B8H.3
RS0 BIT 0D0H.3
p24 BIT 0A0H.4
TR0 BIT 088H.4
RS1 BIT 0D0H.4
TR1 BIT 088H.6
PX0 BIT 0B8H.0
PX1 BIT 0B8H.2
DPH DATA 083H
DPL DATA 082H
rs BIT 0A0H.0
REN BIT 098H.4
rw BIT 0A0H.1
RXD BIT 0B0H.0
TXD BIT 0B0H.1
F0 BIT 0D0H.5
PSW DATA 0D0H
?PR?_delay?MAIN SEGMENT CODE
?PR?lcd_bz?MAIN SEGMENT CODE
?BI?lcd_bz?MAIN SEGMENT BIT OVERLAYABLE
?PR?_lcd_wcmd?MAIN SEGMENT CODE
?PR?_lcd_pos?MAIN SEGMENT CODE
?PR?_lcd_wdat?MAIN SEGMENT CODE
?PR?lcd_init?MAIN SEGMENT CODE
?PR?main?MAIN SEGMENT CODE
?DT?main?MAIN SEGMENT DATA OVERLAYABLE
?C_INITSEG SEGMENT CODE
?CO?MAIN SEGMENT CODE
?DT?MAIN SEGMENT DATA
EXTRN CODE (?C_STARTUP)
PUBLIC bzw
PUBLIC dis3
PUBLIC dis2
PUBLIC dis1
PUBLIC main
PUBLIC lcd_init
PUBLIC _lcd_wdat
PUBLIC _lcd_pos
PUBLIC _lcd_wcmd
PUBLIC lcd_bz
PUBLIC _delay
RSEG ?DT?main?MAIN
?main?BYTE:
j?650: DS 1
RSEG ?BI?lcd_bz?MAIN
?lcd_bz?BIT:
result?142: DBIT 1
RSEG ?DT?MAIN
bzw: DS 26
RSEG ?CO?MAIN
dis1:
DB '1' ,000H
DB 000H,000H,000H,000H,000H,000H,000H
DB 'a' ,'i' ,'r' ,000H
DB 000H,000H,000H,000H,000H
DB 'r' ,'i' ,'c' ,'e' ,000H
DB 000H,000H,000H,000H
DB 't' ,'r' ,'e' ,'e' ,000H
DB 000H,000H,000H,000H
DB 's' ,'e' ,'a' ,000H
DB 000H,000H,000H,000H,000H
DB 'h' ,'a' ,'i' ,'r' ,000H
DB 000H,000H,000H,000H
DB 'm' ,'e' ,'a' ,'t' ,000H
DB 000H,000H,000H,000H
DB 'h' ,'e' ,000H
DB 000H,000H,000H,000H,000H,000H
DB 's' ,'h' ,'e' ,000H
DB 000H,000H,000H,000H,000H
DB 'g' ,'o' ,'o' ,'d' ,000H
DB 000H,000H,000H,000H
DB 'n' ,'i' ,'c' ,'e' ,000H
DB 000H,000H,000H,000H
DB 000H,000H,000H,000H,000H,000H,000H,000H,000H
dis2:
DB 'r' ,'a' ,'t' ,'e' ,000H
dis3:
DB '0' ,'%' ,000H
DB 000H,000H,000H,000H,000H,000H
DB '1' ,'0' ,'%' ,000H
DB 000H,000H,000H,000H,000H
DB '2' ,'0' ,'%' ,000H
DB 000H,000H,000H,000H,000H
DB '3' ,'0' ,'%' ,000H
DB 000H,000H,000H,000H,000H
DB '4' ,'0' ,'%' ,000H
DB 000H,000H,000H,000H,000H
DB '5' ,'0' ,'%' ,000H
DB 000H,000H,000H,000H,000H
DB '6' ,'0' ,'%' ,000H
DB 000H,000H,000H,000H,000H
DB '7' ,'0' ,'%' ,000H
DB 000H,000H,000H,000H,000H
DB '8' ,'0' ,'%' ,000H
DB 000H,000H,000H,000H,000H
DB '9' ,'0' ,'%' ,000H
DB 000H,000H,000H,000H,000H
DB '1' ,'0' ,'0' ,'%' ,000H
DB 000H,000H,000H,000H
RSEG ?C_INITSEG
DB 01AH
DB bzw
DW 00002H
DW 00002H
DW 00002H
DW 00002H
DW 00002H
DW 00002H
DW 00002H
DW 00002H
DW 00002H
DW 00002H
DW 00002H
DW 00002H
DW 00002H
;
; //#include <reg51.h>
;
;
;
; #ifndef __REG51_H__
; #define __REG51_H__
;
; /* BYTE Register */
; sfr P0 = 0x80;
; sfr P1 = 0x90;
; sfr P2 = 0xA0;
; sfr P3 = 0xB0;
; sfr PSW = 0xD0;
; sfr ACC = 0xE0;
; sfr B = 0xF0;
; sfr SP = 0x81;
; sfr DPL = 0x82;
; sfr DPH = 0x83;
; sfr PCON = 0x87;
; sfr TCON = 0x88;
; sfr TMOD = 0x89;
; sfr TL0 = 0x8A;
; sfr TL1 = 0x8B;
; sfr TH0 = 0x8C;
; sfr TH1 = 0x8D;
; sfr IE = 0xA8;
; sfr IP = 0xB8;
; sfr SCON = 0x98;
; sfr SBUF = 0x99;
;
;
; /* BIT Register */
; /* PSW */
; sbit CY = 0xD7;
; sbit AC = 0xD6;
; sbit F0 = 0xD5;
; sbit RS1 = 0xD4;
; sbit RS0 = 0xD3;
; sbit OV = 0xD2;
; sbit P = 0xD0;
;
; /* TCON */
; sbit TF1 = 0x8F;
; sbit TR1 = 0x8E;
; sbit TF0 = 0x8D;
; sbit TR0 = 0x8C;
; sbit IE1 = 0x8B;
; sbit IT1 = 0x8A;
; sbit IE0 = 0x89;
; sbit IT0 = 0x88;
;
; /* IE */
; sbit EA = 0xAF;
; sbit ES = 0xAC;
; sbit ET1 = 0xAB;
; sbit EX1 = 0xAA;
; sbit ET0 = 0xA9;
; sbit EX0 = 0xA8;
;
; /* IP */
; sbit PS = 0xBC;
; sbit PT1 = 0xBB;
; sbit PX1 = 0xBA;
; sbit PT0 = 0xB9;
; sbit PX0 = 0xB8;
;
; /* P3 */
; sbit RD = 0xB7;
; sbit WR = 0xB6;
; sbit T1 = 0xB5;
; sbit T0 = 0xB4;
; sbit INT1 = 0xB3;
; sbit INT0 = 0xB2;
; sbit TXD = 0xB1;
; sbit RXD = 0xB0;
;
; /* SCON */
; sbit SM0 = 0x9F;
; sbit SM1 = 0x9E;
; sbit SM2 = 0x9D;
; sbit REN = 0x9C;
; sbit TB8 = 0x9B;
; sbit RB8 = 0x9A;
; sbit TI = 0x99;
; sbit RI = 0x98;
;
; #endif
;
;
;
;
; #include <intrins.h>
;
; sbit rs= P2^0;
; sbit rw = P2^1;
; sbit ep = P2^2;
; sbit p10=0x90;
; sbit p11=0x91;
; sbit p12=0x92;
; sbit p13=0x93;
; sbit p24=0xA4;
;
; unsigned char code dis1[12][9] = {"1","air","rice","tree","sea","hair","meat","he","she","good","nice"};
; unsigned char code dis2[] = {"rate"};
; unsigned char code dis3[11][9]={"0%","10%","20%","30%","40%","50%","60%","70%","80%","90%","100%"};
; unsigned int bzw[13]={2,2,2,2,2,2,2,2,2,2,2,2,2};
; void delay(unsigned char ms)
RSEG ?PR?_delay?MAIN
_delay:
USING 0
; SOURCE LINE # 108
;---- Variable 'i?041' assigned to Register 'R6' ----
;---- Variable 'ms?040' assigned to Register 'R7' ----
; {
; SOURCE LINE # 109
?C0001:
; unsigned char i;
; while(ms--)
; SOURCE LINE # 111
MOV R5,AR7
DEC R7
MOV A,R5
JZ ?C0006
; {
; SOURCE LINE # 112
; for(i = 0; i< 250; i++)
; SOURCE LINE # 113
CLR A
MOV R6,A
?C0003:
MOV A,R6
CLR C
SUBB A,#0FAH
MOV A,#080H
SUBB A,#080H
JNC ?C0001
; {
; SOURCE LINE # 114
; _nop_();
; SOURCE LINE # 115
NOP
; _nop_();
; SOURCE LINE # 116
NOP
; _nop_();
; SOURCE LINE # 117
NOP
; _nop_();
; SOURCE LINE # 118
NOP
; }
; SOURCE LINE # 119
INC R6
SJMP ?C0003
; }
; SOURCE LINE # 120
; }
; SOURCE LINE # 121
?C0006:
RET
; END OF _delay
;
; bit lcd_bz()
RSEG ?PR?lcd_bz?MAIN
lcd_bz:
; SOURCE LINE # 123
; {
; SOURCE LINE # 124
; bit result;
; rs = 0;
; SOURCE LINE # 126
CLR rs
; rw = 1;
; SOURCE LINE # 127
SETB rw
; ep = 1;
; SOURCE LINE # 128
SETB ep
; _nop_();
; SOURCE LINE # 129
NOP
; _nop_();
; SOURCE LINE # 130
NOP
; _nop_();
; SOURCE LINE # 131
NOP
; _nop_();
; SOURCE LINE # 132
NOP
; result =(bit)(P0 & 0x80);
; SOURCE LINE # 133
MOV A,P0
RLC A
MOV result?142,C
; ep = 0;
; SOURCE LINE # 134
CLR ep
; return result;
; SOURCE LINE # 135
MOV C,result?142
; }
; SOURCE LINE # 136
RET
; END OF lcd_bz
;
; void lcd_wcmd(unsigned char cmd) //寫指令
RSEG ?PR?_lcd_wcmd?MAIN
_lcd_wcmd:
; SOURCE LINE # 138
;---- Variable 'cmd?243' assigned to Register 'R7' ----
; {
; SOURCE LINE # 139
?C0008:
; while(lcd_bz());//判斷LCD是否忙碌
; SOURCE LINE # 140
LCALL lcd_bz
JC ?C0008
; rs = 0;
; SOURCE LINE # 141
CLR rs
; rw = 0; //re=0,rw=1 ;e為正脈沖
; SOURCE LINE # 142
CLR rw
; ep = 0;
; SOURCE LINE # 143
CLR ep
; _nop_();
; SOURCE LINE # 144
NOP
; _nop_();
; SOURCE LINE # 145
NOP
; P0 = cmd;
; SOURCE LINE # 146
MOV P0,R7
; _nop_();
; SOURCE LINE # 147
NOP
; _nop_();
; SOURCE LINE # 148
NOP
; _nop_();
; SOURCE LINE # 149
NOP
; _nop_();
; SOURCE LINE # 150
NOP
; ep = 1;
; SOURCE LINE # 151
SETB ep
; _nop_();
; SOURCE LINE # 152
NOP
; _nop_();
; SOURCE LINE # 153
NOP
; _nop_();
; SOURCE LINE # 154
NOP
; _nop_();
; SOURCE LINE # 155
NOP
; ep = 0;
; SOURCE LINE # 156
CLR ep
; }
; SOURCE LINE # 157
RET
; END OF _lcd_wcmd
;
; void lcd_pos(unsigned char pos) //顯示位置轉換程序
RSEG ?PR?_lcd_pos?MAIN
_lcd_pos:
USING 0
; SOURCE LINE # 159
;---- Variable 'pos?344' assigned to Register 'R7' ----
; {
; SOURCE LINE # 160
; lcd_wcmd(pos | 0x80); //顯示第一行的地址是0x08,第二行的是0xc0。
; SOURCE LINE # 161
MOV A,R7
ORL A,#080H
MOV R7,A
LJMP _lcd_wcmd
; END OF _lcd_pos
; }
;
; void lcd_wdat(unsigned char dat) //寫數據
RSEG ?PR?_lcd_wdat?MAIN
_lcd_wdat:
; SOURCE LINE # 164
;---- Variable 'dat?445' assigned to Register 'R7' ----
; {
; SOURCE LINE # 165
?C0012:
; while(lcd_bz());//判斷LCD是否忙碌
; SOURCE LINE # 166
LCALL lcd_bz
JC ?C0012
; rs = 1;
; SOURCE LINE # 167
SETB rs
; rw = 0;
; SOURCE LINE # 168
CLR rw
; ep = 0;
; SOURCE LINE # 169
CLR ep
; P0 = dat;
; SOURCE LINE # 170
MOV P0,R7
; _nop_();
; SOURCE LINE # 171
NOP
; _nop_();
; SOURCE LINE # 172
NOP
; _nop_();
; SOURCE LINE # 173
NOP
; _nop_();
; SOURCE LINE # 174
NOP
; ep = 1;
; SOURCE LINE # 175
SETB ep
; _nop_();
; SOURCE LINE # 176
NOP
; _nop_();
; SOURCE LINE # 177
NOP
; _nop_();
; SOURCE LINE # 178
NOP
; _nop_();
; SOURCE LINE # 179
NOP
; ep = 0;
; SOURCE LINE # 180
CLR ep
; }
; SOURCE LINE # 181
RET
; END OF _lcd_wdat
;
; void lcd_init() //初始化lcd
RSEG ?PR?lcd_init?MAIN
lcd_init:
USING 0
; SOURCE LINE # 183
; {
; SOURCE LINE # 184
; lcd_wcmd(0x38);
; SOURCE LINE # 185
MOV R7,#038H
LCALL _lcd_wcmd
; delay(1);
; SOURCE LINE # 186
MOV R7,#01H
LCALL _delay
; lcd_wcmd(0x0c);
; SOURCE LINE # 187
MOV R7,#0CH
LCALL _lcd_wcmd
; delay(1);
; SOURCE LINE # 188
MOV R7,#01H
LCALL _delay
; lcd_wcmd(0x06);
; SOURCE LINE # 189
MOV R7,#06H
LCALL _lcd_wcmd
; delay(1);
; SOURCE LINE # 190
MOV R7,#01H
LCALL _delay
; lcd_wcmd(0x01); //清屏
; SOURCE LINE # 191
MOV R7,#01H
LCALL _lcd_wcmd
; delay(1);
; SOURCE LINE # 192
LJMP _delay
; END OF lcd_init
; }
;
; void main(void)
RSEG ?PR?main?MAIN
main:
USING 0
; SOURCE LINE # 195
;---- Variable 'k?647' assigned to Register 'R4' ----
;---- Variable 'count?648' assigned to Register 'R1' ----
; {
; SOURCE LINE # 196
; unsigned char i;
; unsigned char k;
; unsigned char count;
; unsigned char a;
; unsigned char j;
; lcd_init();// 初始化LCD
; SOURCE LINE # 202
LCALL lcd_init
; delay(10);j=0;
; SOURCE LINE # 203
MOV R7,#0AH
LCALL _delay
CLR A
MOV j?650,A
; i=1;
; SOURCE LINE # 204
;---- Variable 'i?646' assigned to Register 'R3' ----
MOV R3,#01H
?C0016:
; while(1){
; SOURCE LINE # 205
; delay(60);
; SOURCE LINE # 206
MOV R7,#03CH
LCALL _delay
; lcd_wcmd(0x01);//清屏指令,防止單詞由長到短時出現亂碼.
; SOURCE LINE # 207
MOV R7,#01H
LCALL _lcd_wcmd
; delay(1);
; SOURCE LINE # 208
LCALL _delay
; P1=0x00; j=0;
; SOURCE LINE # 209
CLR A
MOV P1,A
MOV j?650,A
; lcd_pos(0x01);//設置顯示位置
; SOURCE LINE # 210
MOV R7,#01H
LCALL _lcd_pos
;
; if(P1!=0)
; SOURCE LINE # 212
MOV R7,P1
MOV A,R7
JZ ?C0018
; {
; SOURCE LINE # 213
; switch(P1) //P1 掃行
; SOURCE LINE # 214
MOV R7,P1
MOV A,R7
ADD A,#0FEH
JZ ?C0023
ADD A,#0FEH
JZ ?C0024
ADD A,#0FCH
JZ ?C0025
ADD A,#07H
JNZ ?C0018
; {
; SOURCE LINE # 215
; case (0x01):
; SOURCE LINE # 216
?C0020:
; if(bzw[ i]==2)
; SOURCE LINE # 217
MOV A,R3
ADD A,ACC
ADD A,#LOW (bzw)
MOV R0,A
MOV A,@R0
MOV R6,A
INC R0
MOV A,@R0
XRL A,#02H
ORL A,R6
JNZ ?C0021
; { count++;
; SOURCE LINE # 218
INC R1
; bzw[ i]=bzw[ i]-1; //標志位,每個單詞只能使count加1.
; SOURCE LINE # 219
MOV A,R3
ADD A,ACC
ADD A,#LOW (bzw)
MOV R0,A
INC R0
MOV A,@R0
DEC @R0
DEC R0
JNZ ?C0037
DEC @R0
?C0037:
; if(bzw[ i]<2)
; SOURCE LINE # 220
MOV A,R3
ADD A,ACC
ADD A,#LOW (bzw)
MOV R0,A
MOV A,@R0
MOV R6,A
INC R0
MOV A,@R0
CLR C
SUBB A,#02H
MOV A,R6
SUBB A,#00H
JNC ?C0021
; bzw[ i]=1;
; SOURCE LINE # 221
MOV A,R3
ADD A,ACC
ADD A,#LOW (bzw)
MOV R0,A
MOV @R0,#00H
INC R0
MOV @R0,#01H
; } i++ ;
; SOURCE LINE # 222
?C0021:
INC R3
; break;//sure
; SOURCE LINE # 223
SJMP ?C0018
; case (0x02):i++;j++;
; SOURCE LINE # 224
?C0023:
INC R3
INC j?650
; bzw[ i]=2;break; //unknown
; SOURCE LINE # 225
MOV A,R3
ADD A,ACC
ADD A,#LOW (bzw)
MOV R0,A
MOV @R0,#00H
INC R0
MOV @R0,#02H
SJMP ?C0018
; case (0x04):i--;break; //up
; SOURCE LINE # 226
?C0024:
DEC R3
SJMP ?C0018
; case (0x08):i++;break; //down
; SOURCE LINE # 227
?C0025:
INC R3
;
;
; } }
; SOURCE LINE # 230
?C0018:
; p24=0;
; SOURCE LINE # 231
CLR p24
; if(j==1)
; SOURCE LINE # 232
MOV A,j?650
XRL A,#01H
JNZ ?C0026
; p24=1;
; SOURCE LINE # 233
SETB p24
?C0026:
; if(i==11) i=1;
; SOURCE LINE # 234
MOV A,R3
XRL A,#0BH
JNZ ?C0027
MOV R3,#01H
?C0027:
; if(i==0) i=10;
; SOURCE LINE # 235
MOV A,R3
JNZ ?C0029
MOV R3,#0AH
?C0029:
; while(dis1[ i][k]!= '\0')
; SOURCE LINE # 236
MOV A,R3
MOV B,#09H
MUL AB
ADD A,#LOW (dis1)
MOV DPL,A
CLR A
ADDC A,#HIGH (dis1)
MOV DPH,A
MOV A,DPL
ADD A,R4
MOV DPL,A
CLR A
ADDC A,DPH
MOV DPH,A
CLR A
MOVC A,@A+DPTR
MOV R7,A
JZ ?C0030
; {
; SOURCE LINE # 237
; lcd_wdat(dis1[ i][k]);//單詞
; SOURCE LINE # 238
LCALL _lcd_wdat
; k++;
; SOURCE LINE # 239
INC R4
; }k=0;
; SOURCE LINE # 240
SJMP ?C0029
?C0030:
CLR A
MOV R4,A
; lcd_pos(0x42);// 設置顯示位置
; SOURCE LINE # 241
MOV R7,#042H
LCALL _lcd_pos
; a = 0;
; SOURCE LINE # 242
;---- Variable 'a?649' assigned to Register 'R6' ----
CLR A
MOV R6,A
?C0031:
; while(dis2[a] != '\0')
; SOURCE LINE # 243
MOV A,R6
MOV DPTR,#dis2
MOVC A,@A+DPTR
MOV R7,A
JZ ?C0032
; {
; SOURCE LINE # 244
; lcd_wdat(dis2[a]);// rate
; SOURCE LINE # 245
LCALL _lcd_wdat
; a++;
; SOURCE LINE # 246
INC R6
; }
; SOURCE LINE # 247
SJMP ?C0031
?C0032:
; if(count>10) count=10;
; SOURCE LINE # 248
MOV A,R1
SETB C
SUBB A,#0AH
MOV A,#080H
SUBB A,#080H
JC ?C0033
MOV R1,#0AH
?C0033:
; lcd_pos(0x48);
; SOURCE LINE # 249
MOV R7,#048H
LCALL _lcd_pos
?C0034:
; while(dis3[count][k]!= '\0')
; SOURCE LINE # 250
MOV A,R1
MOV B,#09H
MUL AB
ADD A,#LOW (dis3)
MOV DPL,A
CLR A
ADDC A,#HIGH (dis3)
MOV DPH,A
MOV A,DPL
ADD A,R4
MOV DPL,A
CLR A
ADDC A,DPH
MOV DPH,A
CLR A
MOVC A,@A+DPTR
MOV R7,A
JZ ?C0035
; {
; SOURCE LINE # 251
; lcd_wdat(dis3[count][k]);//正確率
; SOURCE LINE # 252
LCALL _lcd_wdat
; k++;
; SOURCE LINE # 253
INC R4
; }k=0;
; SOURCE LINE # 254
SJMP ?C0034
?C0035:
CLR A
MOV R4,A
; }
; SOURCE LINE # 255
LJMP ?C0016
; END OF main
END
作者: yzwzfyz 時間: 2020-6-2 21:34
匯編程序KELL會自動生成的,無需要人為改寫。只是你不知道它在那里而矣。你找找吧。
作者: man1234567 時間: 2020-6-2 22:09
標記一下看看有木有后現代雷鋒 
作者: yyp11 時間: 2020-6-11 22:05
C語言在編譯過程中確實會產生匯編.s文件,但那個很亂,機器讀的,一看就不是匯編寫的,我做過一個類似的程序,但這個工作量對我太大了,建議樓主還是去找匯編的程序,不過現在用匯編寫的人很少了,就我讀書的時候學過,
作者: Y_G_G 時間: 2020-6-12 08:38
在KEIL環境下運行仿真,自動生成匯編代碼,全部復制就可以了
但你不一定能看得懂
作者: boysz 時間: 2020-6-12 10:07
Q0000: AJMP Q016A ;0000 21 6A NOP ;0002 00 NOP ;0003 00 NOP ;0004 00 NOP ;0005 00 NOP ;0006 00 NOP ;0007 00 NOP ;0008 00 NOP ;0009 00 NOP ;000A 00 NOP ;000B 00 NOP ;000C 00 NOP ;000D 00 NOP ;000E 00 NOP ;000F 00 NOP ;0010 00 NOP ;0011 00 NOP ;0012 00 NOP ;0013 00 NOP ;0014 00 NOP ;0015 00 NOP ;0016 00 NOP ;0017 00 NOP ;0018 00 NOP ;0019 00 NOP ;001A 00 NOP ;001B 00 NOP ;001C 00 NOP ;001D 00 NOP ;001E 00 NOP ;001F 00 NOP ;0020 00 NOP ;0021 00 NOP ;0022 00 NOP ;0023 00 NOP ;0024 00 NOP ;0025 00 NOP ;0026 00 NOP ;0027 00 NOP ;0028 00 NOP ;0029 00 NOP ;002A 00 NOP ;002B 00 NOP ;002C 00 NOP ;002D 00 NOP ;002E 00 NOP ;002F 00 NOP ;0030 00 NOP ;0031 00 NOP ;0032 00 NOP ;0033 00 NOP ;0034 00 NOP ;0035 00 NOP ;0036 00 NOP ;0037 00 NOP ;0038 00 NOP ;0039 00 NOP ;003A 00 NOP ;003B 00 NOP ;003C 00 NOP ;003D 00 NOP ;003E 00 NOP ;003F 00 NOP ;0040 00 NOP ;0041 00 NOP ;0042 00 NOP ;0043 00 NOP ;0044 00 NOP ;0045 00 NOP ;0046 00 NOP ;0047 00 NOP ;0048 00 NOP ;0049 00 NOP ;004A 00 NOP ;004B 00 NOP ;004C 00 NOP ;004D 00 NOP ;004E 00 NOP ;004F 00 NOP ;0050 00 NOP ;0051 00 NOP ;0052 00 NOP ;0053 00 NOP ;0054 00 NOP ;0055 00 NOP ;0056 00 NOP ;0057 00 NOP ;0058 00 NOP ;0059 00 NOP ;005A 00 NOP ;005B 00 NOP ;005C 00 NOP ;005D 00 NOP ;005E 00 NOP ;005F 00 NOP ;0060 00 NOP ;0061 00 NOP ;0062 00 NOP ;0063 00 NOP ;0064 00 NOP ;0065 00 NOP ;0066 00 NOP ;0067 00 NOP ;0068 00 NOP ;0069 00 NOP ;006A 00 NOP ;006B 00 NOP ;006C 00 NOP ;006D 00 NOP ;006E 00 NOP ;006F 00 NOP ;0070 00 NOP ;0071 00 NOP ;0072 00 NOP ;0073 00 NOP ;0074 00 NOP ;0075 00 NOP ;0076 00 NOP ;0077 00 NOP ;0078 00 NOP ;0079 00 NOP ;007A 00 NOP ;007B 00 NOP ;007C 00 NOP ;007D 00 NOP ;007E 00 NOP ;007F 00 NOP ;0080 00 NOP ;0081 00 NOP ;0082 00 NOP ;0083 00 NOP ;0084 00 NOP ;0085 00 NOP ;0086 00 NOP ;0087 00 NOP ;0088 00 NOP ;0089 00 NOP ;008A 00 NOP ;008B 00 NOP ;008C 00 NOP ;008D 00 NOP ;008E 00 NOP ;008F 00 NOP ;0090 00 NOP ;0091 00 NOP ;0092 00 NOP ;0093 00 NOP ;0094 00 NOP ;0095 00 NOP ;0096 00 NOP ;0097 00 NOP ;0098 00 NOP ;0099 00 NOP ;009A 00 NOP ;009B 00 NOP ;009C 00 NOP ;009D 00 NOP ;009E 00 NOP ;009F 00 NOP ;00A0 00 NOP ;00A1 00 NOP ;00A2 00 NOP ;00A3 00 NOP ;00A4 00 NOP ;00A5 00 NOP ;00A6 00 NOP ;00A7 00 NOP ;00A8 00 NOP ;00A9 00 NOP ;00AA 00 NOP ;00AB 00 NOP ;00AC 00 NOP ;00AD 00 NOP ;00AE 00 NOP ;00AF 00 NOP ;00B0 00 NOP ;00B1 00 NOP ;00B2 00 NOP ;00B3 00 NOP ;00B4 00 NOP ;00B5 00 NOP ;00B6 00 NOP ;00B7 00 NOP ;00B8 00 NOP ;00B9 00 NOP ;00BA 00 NOP ;00BB 00 NOP ;00BC 00 NOP ;00BD 00 NOP ;00BE 00 NOP ;00BF 00 NOP ;00C0 00 NOP ;00C1 00 NOP ;00C2 00 NOP ;00C3 00 NOP ;00C4 00 NOP ;00C5 00 NOP ;00C6 00 NOP ;00C7 00 NOP ;00C8 00 NOP ;00C9 00 NOP ;00CA 00 NOP ;00CB 00 NOP ;00CC 00 NOP ;00CD 00 NOP ;00CE 00 NOP ;00CF 00 NOP ;00D0 00 NOP ;00D1 00 NOP ;00D2 00 NOP ;00D3 00 NOP ;00D4 00 NOP ;00D5 00 NOP ;00D6 00 NOP ;00D7 00 NOP ;00D8 00 NOP ;00D9 00 NOP ;00DA 00 NOP ;00DB 00 NOP ;00DC 00 NOP ;00DD 00 NOP ;00DE 00 NOP ;00DF 00 NOP ;00E0 00 NOP ;00E1 00 NOP ;00E2 00 NOP ;00E3 00 NOP ;00E4 00 NOP ;00E5 00 NOP ;00E6 00 NOP ;00E7 00 NOP ;00E8 00 NOP ;00E9 00 NOP ;00EA 00 NOP ;00EB 00 NOP ;00EC 00 NOP ;00ED 00 NOP ;00EE 00 NOP ;00EF 00 NOP ;00F0 00 NOP ;00F1 00 NOP ;00F2 00 NOP ;00F3 00 NOP ;00F4 00 NOP ;00F5 00 NOP ;00F6 00 NOP ;00F7 00 NOP ;00F8 00 NOP ;00F9 00 NOP ;00FA 00 NOP ;00FB 00 NOP ;00FC 00 NOP ;00FD 00 NOP ;00FE 00 NOP ;00FF 00 JB 24H.1,Q0124 ;0100 20 21 21 JB 28H.1,Q0126 ;0103 20 41 20 ORL A,R5 ;0106 4D JB 28H.1,Q012A ;0107 20 41 20 ANL A,R2 ;010A 5A JB 29H.1,Q012E ;010B 20 49 20 ORL A,R6 ;010E 4E JB 28H.7,Q0132 ;010F 20 47 20 AJMP Q0121 ;0112 21 21 JB 20H.0,Q0138 ;0114 20 00 21 AJMP Q0120 ;0117 21 20 AJMP Q0220 ;0119 41 20 ORL A,R5 ;011B 4D JB 28H.1,Q013F ;011C 20 41 20 ANL A,R2 ;011F 5A Q0120: JB 29H.1,Q0143 ;0120 20 49 20 ORL A,R6 ;0123 4E Q0124: JB 28H.7,Q0147 ;0124 20 47 20 AJMP Q0121 ;0127 21 21 JB 20H.0,Q014C ;0129 20 00 20 AJMP Q0220 ;012C 41 20 Q012E: MOV @R0,#69H ;012E 76 69 ORL C,2EH.4 ;0130 72 74 Q0132: MOV 61H,#6CH ;0132 75 61 6C JB 29H.4,Q0185 ;0135 20 4C 4D Q0138: JNB 26H.3,Q016D ;0138 30 33 32 ORL A,R4 ;013B 4C ADD A,R6 ;013C 2E ADD A,R6 ;013D 2E ADD A,R6 ;013E 2E Q013F: JB 20H.0,Q0162 ;013F 20 00 20 XRL A,#72H ;0142 64 72 XRL A,R1 ;0144 69 MOV @R0,#65H ;0145 76 65 Q0147: XRL A,R6 ;0147 6E JB 2CH.2,Q01C4 ;0148 20 62 79 JB 2CH.1,Q016E ;014B 20 61 20 MOV @R0,#69H ;014E 76 69 ORL C,2EH.4 ;0150 72 74 MOV 61H,#6CH ;0152 75 61 6C JB 20H.0,Q0178 ;0155 20 00 20 JB 24H.0,Q0193 ;0158 20 20 38 JNB 26H.5,Q018F ;015B 30 35 31 JB 2EH.0,Q01D3 ;015E 20 70 72 XRL A,R7 ;0161 6F Q0162: XRL 65H,#73H ;0162 63 65 73 JMP @A+DPTR ;0165 73 XRL A,R7 ;0166 6F ORL C,24H.1 ;0167 72 21 NOP ;0169 00 Q016A: MOV A,#38H ;016A 74 38 ACALL Q01FA ;016C 31 FA Q016E: MOV A,#0EH ;016E 74 0E ACALL Q01FA ;0170 31 FA MOV R7,#02H ;0172 7F 02 Q0174: MOV DPTR,#0100H ;0174 90 01 00 ACALL Q01CB ;0177 31 CB MOV DPTR,#00C8H ;0179 90 00 C8 ACALL Q0213 ;017C 51 13 MOV A,#01H ;017E 74 01 ACALL Q01FA ;0180 31 FA MOV DPTR,#0116H ;0182 90 01 16 Q0185: ACALL Q01CB ;0185 31 CB MOV DPTR,#00C8H ;0187 90 00 C8 ACALL Q0213 ;018A 51 13 MOV A,#01H ;018C 74 01 ACALL Q01FA ;018E 31 FA DJNZ R7,Q0174 ;0190 DF E2 MOV DPTR,#0100H ;0192 90 01 00 ACALL Q01CB ;0195 31 CB MOV DPTR,#0190H ;0197 90 01 90 ACALL Q0213 ;019A 51 13 MOV A,#0C0H ;019C 74 C0 ACALL Q01FA ;019E 31 FA MOV DPTR,#012BH ;01A0 90 01 2B ACALL Q01E0 ;01A3 31 E0 MOV DPTR,#00C8H ;01A5 90 00 C8 ACALL Q0213 ;01A8 51 13 MOV A,#01H ;01AA 74 01 ACALL Q01FA ;01AC 31 FA MOV DPTR,#0141H ;01AE 90 01 41 ACALL Q01E0 ;01B1 31 E0 MOV A,#0C0H ;01B3 74 C0 ACALL Q01FA ;01B5 31 FA MOV DPTR,#0157H ;01B7 90 01 57 ACALL Q01E0 ;01BA 31 E0 MOV A,#0FH ;01BC 74 0F ACALL Q01FA ;01BE 31 FA MOV DPTR,#07D0H ;01C0 90 07 D0 ACALL Q0213 ;01C3 51 13 MOV A,#01H ;01C5 74 01 ACALL Q01FA ;01C7 31 FA SJMP Q016E ;01C9 80 A3 Q01CB: MOV R0,#01H ;01CB 78 01 Q01CD: CLR A ;01CD E4 MOVC A,@A+DPTR ;01CE 93 JZ Q01DF ;01CF 60 0E MOVX @R0,A ;01D1 F2 ACALL Q0202 ;01D2 51 02 INC DPTR ;01D4 A3 PUSH DPL ;01D5 C0 82 PUSH DPH ;01D7 C0 83 POP DPH ;01D9 D0 83 POP DPL ;01DB D0 82 SJMP Q01CD ;01DD 80 EE Q01DF: RET ;01DF 22 Q01E0: MOV R0,#01H ;01E0 78 01 Q01E2: CLR A ;01E2 E4 MOVC A,@A+DPTR ;01E3 93 JZ Q01F9 ;01E4 60 13 MOVX @R0,A ;01E6 F2 ACALL Q0202 ;01E7 51 02 INC DPTR ;01E9 A3 PUSH DPL ;01EA C0 82 PUSH DPH ;01EC C0 83 MOV DPTR,#0064H ;01EE 90 00 64 ACALL Q0213 ;01F1 51 13 POP DPH ;01F3 D0 83 POP DPL ;01F5 D0 82 SJMP Q01E2 ;01F7 80 E9 Q01F9: RET ;01F9 22 Q01FA: MOV R0,#00H ;01FA 78 00 MOVX @R0,A ;01FC F2 SJMP Q0202 ;01FD 80 03 MOV R0,#01H ;01FF 78 01 MOVX @R0,A ;0201 F2 Q0202: MOV R1,#02H ;0202 79 02 MOVX A,@R1 ;0204 E3 JB ACC.7,Q0202 ;0205 20 E7 FA RET ;0208 22 Q0209: PUSH ACC ;0209 C0 E0 ACALL Q0213 ;020B 51 13 POP ACC ;020D D0 E0 DEC A ;020F 14 JNZ Q0209 ;0210 70 F7 RET ;0212 22 Q0213: XRL DPL,#0FFH ;0213 63 82 FF XRL DPH,#0FFH ;0216 63 83 FF INC DPTR ;0219 A3 Q021A: MOV TL0,#9CH ;021A 75 8A 9C MOV TH0,#0FFH ;021D 75 8C FF Q0220: MOV TMOD,#01H ;0220 75 89 01 SETB TR0 ;0223 D2 8C JNB TF0,$ ;0225 30 8D FD CLR TR0 ;0228 C2 8C CLR TF0 ;022A C2 8D INC DPTR ;022C A3 MOV A,DPL ;022D E5 82 ORL A,DPH ;022F 45 83 JNZ Q021A ;0231 70 E7 RET ;0233 22
作者: 六歲 時間: 2020-6-12 11:02
keil里可以直接轉換,位置就在你仿真以后的代碼轉換里。
| 歡迎光臨 (http://www.denmoz.com/bbs/) |
Powered by Discuz! X3.1 |