線上訂房服務-台灣趴趴狗聯合訂房中心
發文 回覆 瀏覽次數:5355
推到 Plurk!
推到 Facebook!

組合語言比較指令用法

答題得分者是:mymj
莊聖
一般會員


發表:4
回覆:8
積分:2
註冊:2009-04-07

發送簡訊給我
#1 引用回覆 回覆 發表時間:2009-11-04 20:02:28 IP:123.193.xxx.xxx 訂閱
各位前輩...最近我做專題做到一個困點
現在需要去使用到比較指令..可是卻發現比較指令編譯時出錯
以下是我的程式↓

;decode C0 C1 C2 C3
;check C2
CODE_K1 EQU 01H
CODE_K2 EQU 02H
CODE_K3 EQU 03H
CODE_K4 EQU 04H
;-------------------------------
IRCOM EQU 30H
COM EQU 32H
;-------------------------------
TS EQU 20
DEA EQU 9
IRIN EQU P3.2
PUL EQU P1.7
PUR EQU P1.6
;-------------------------------
ORG 0H
JMP BEGIN
;-------------------------------
BEGIN:
mov R1,DEA
CLR PUR
CLR PUL
SETB IRIN
LOOP:
MOV R0,#IRCOM
CALL IR_IN
CALL OP
JMP LOOP
;-------------------------------
pass:
MOV R4,21
mov R5,21
INC DEA
SUB R5,DEA (從這行開始到jne那裡我編譯時出了錯誤!!!)
CMP R4,21
JNE M
;-------------------------------
pass2:
MOV R4,21
MOV R5,21
DEC DEA
SUB R5,DEA (這裡是一樣的從這到ja的時候出問題!!!)
CMP R4,21
JA MADA2
;-------------------------------
PU_BACK:
CLR PUL
MOV R2,#DEA
A1: CALL DEL
DJNZ R2,A1
CLR PUL
MOV R2,#DEA
A2: CALL DEL
DJNZ R2,A2

RET
;--------------------------------
PU_FOR:
CLR PUL
MOV R1,#DEA
B1: CALL DEL
DJNZ R1,B1
CLR PUL
MOV R1,#DEA
B2: CALL DEL
DJNZ R1,B2

RET
;-------------------------------
PU_BACK1:
CLR PUR
MOV R2,#DEA
Y1: CALL DEL
DJNZ R2,Y1
CLR PUR
MOV R2,#DEA
Y2: CALL DEL
DJNZ R2,Y2

RET
;--------------------------------
PU_FOR1:
CLR PUR
MOV R1,#DEA
YT1: CALL DEL
DJNZ R1,YT1
CLR PUR
MOV R1,#DEA
YT2: CALL DEL
DJNZ R1,YT2

RET
;-------------------------------
M:
MOV R3,#TS
Z1: CALL PU_FOR
DJNZ R3,Z1
RET
;-------------------------------
MADA2:
MOV R3,#TS
E1: CALL PU_BACK
DJNZ R3,E1

RET
;-------------------------------
MADA3:
MOV R3,#TS
PQ1: CALL PU_FOR1
DJNZ R3,PQ1
RET
;-------------------------------
MADA4:
MOV R3,#TS
MA1: CALL PU_BACK1
DJNZ R3,MA1

RET
;-------------------------------
DEL:
MOV R5,#1
DELAY1:
MOV R6,#2
F1: MOV R7,#17
DJNZ R7,$
DJNZ R6,F1
DJNZ R5,DELAY1
RET
;------------------------------
OP:
MOV A,COM
CJNE A,#CODE_K1,H1
CALL pass
JMP OP
H1: MOV A,COM
CJNE A,#CODE_K2,H2
CALL pass2
RET
H2: MOV A,COM
CJNE A,#CODE_K3,H3
CALL pass
RET
H3: MOV A,COM
CJNE A,#CODE_K4,H4
CALL pass2
JMP OP
H4:
JMP OP
;------------------------------
IR_IN:
I1: JNB IRIN,I2
JMP I1
I2: MOV R4,#20
I20: CALL DEL
DJNZ R4,I20
JB IRIN,I1
I21: JB IRIN,I3
CALL DEL
JMP I21
I3: MOV R3,#0
LL: JNB IRIN,I4
CALL DEL
JMP LL
I4: JB IRIN,I5
CALL DEL
JMP I4
I5: MOV R2,#0
L1: CALL DEL
JB IRIN,N1

MOV A,#8
CLR C
SUBB A,R2
MOV A,@R0
RRC A
MOV @R0,A
INC R3
CJNE R3,#8,LL
MOV R3,#0
INC R0
CJNE R0,#34H,LL
;-----------------------------
N1: INC R2
CJNE R2,#30,L1

RET
END

我想知道我編譯錯的那部份出了什麼問題...再來我做的這個是8051單晶片紅外線控制馬達
現在大致上都ok就剩下想讓他利用比較來做出分段這部份出問題而已
不知道有哪位高手可以幫忙解決???
拜託...因為專題製作快結束了!!!
老師已經下通碟...而我又卡住!!!
編輯記錄
莊聖 重新編輯於 2009-11-04 20:08:22, 註解 無‧
莊聖 重新編輯於 2009-11-04 20:10:15, 註解 無‧
莊聖 重新編輯於 2009-11-04 21:51:51, 註解 無‧
syntax
尊榮會員


發表:26
回覆:1139
積分:1258
註冊:2002-04-23

發送簡訊給我
#2 引用回覆 回覆 發表時間:2009-11-05 08:22:47 IP:59.125.xxx.xxx 訂閱
能貼出錯誤訊息嗎?
===================引 用 莊聖 文 章===================
各位前輩...最近我做專題做到一個困點
現在需要去使用到比較指令..可是卻發現比較指令編譯時出錯
以下是我的程式↓

;decode C0 C1 C2 C3
;check C2
CODE_K1EQU 01H
CODE_K2EQU 02H
CODE_K3EQU 03H
CODE_K4EQU 04H
;-------------------------------
IRCOMEQU 30H
COMEQU 32H
;-------------------------------
TSEQU 20
DEAEQU 9
IRINEQU P3.2
PULEQU P1.7
PUREQU P1.6
;-------------------------------
ORG 0H
JMP BEGIN
;-------------------------------
BEGIN:
mov R1,DEA
CLR PUR
CLR PUL
SETB IRIN
LOOP:
MOV R0,#IRCOM
CALL IR_IN
CALL OP
JMP LOOP
;-------------------------------
pass:
MOV R4,21
mov R5,21
INC DEA
SUB R5,DEA(從這行開始到jne那裡我編譯時出了錯誤!!!)
CMP R4,21
JNE M
;-------------------------------
pass2:
MOV R4,21
MOV R5,21
DEC DEA
SUB R5,DEA (這裡是一樣的從這到ja的時候出問題!!!)
CMP R4,21
JA MADA2
;-------------------------------
PU_BACK:
CLR PUL
MOV R2,#DEA
A1:CALL DEL
DJNZ R2,A1
CLR PUL
MOV R2,#DEA
A2:CALL DEL
DJNZ R2,A2

RET
;--------------------------------
PU_FOR:
CLR PUL
MOV R1,#DEA
B1:CALL DEL
DJNZ R1,B1
CLR PUL
MOV R1,#DEA
B2:CALL DEL
DJNZ R1,B2

RET
;-------------------------------
PU_BACK1:
CLR PUR
MOV R2,#DEA
Y1:CALL DEL
DJNZ R2,Y1
CLR PUR
MOV R2,#DEA
Y2:CALL DEL
DJNZ R2,Y2

RET
;--------------------------------
PU_FOR1:
CLR PUR
MOV R1,#DEA
YT1:CALL DEL
DJNZ R1,YT1
CLR PUR
MOV R1,#DEA
YT2:CALL DEL
DJNZ R1,YT2

RET
;-------------------------------
M:
MOV R3,#TS
Z1:CALL PU_FOR
DJNZ R3,Z1
RET
;-------------------------------
MADA2:
MOV R3,#TS
E1:CALL PU_BACK
DJNZ R3,E1

RET
;-------------------------------
MADA3:
MOV R3,#TS
PQ1:CALL PU_FOR1
DJNZ R3,PQ1
RET
;-------------------------------
MADA4:
MOV R3,#TS
MA1:CALL PU_BACK1
DJNZ R3,MA1

RET
;-------------------------------
DEL:
MOV R5,#1
DELAY1:
MOV R6,#2
F1:MOV R7,#17
DJNZ R7,$
DJNZ R6,F1
DJNZ R5,DELAY1
RET
;------------------------------
OP:
MOV A,COM
CJNE A,#CODE_K1,H1
CALL pass
JMP OP
H1:MOV A,COM
CJNE A,#CODE_K2,H2
CALL pass2
RET
H2:MOV A,COM
CJNE A,#CODE_K3,H3
CALL pass
RET
H3:MOV A,COM
CJNE A,#CODE_K4,H4
CALL pass2
JMP OP
H4:
JMP OP
;------------------------------
IR_IN:
I1:JNB IRIN,I2
JMP I1
I2:MOV R4,#20
I20:CALL DEL
DJNZ R4,I20
JB IRIN,I1
I21:JB IRIN,I3
CALL DEL
JMP I21
I3:MOV R3,#0
LL:JNB IRIN,I4
CALL DEL
JMP LL
I4:JB IRIN,I5
CALL DEL
JMP I4
I5:MOV R2,#0
L1:CALL DEL
JB IRIN,N1

MOV A,#8
CLR C
SUBB A,R2
MOV A,@R0
RRC A
MOV @R0,A
INC R3
CJNE R3,#8,LL
MOV R3,#0
INC R0
CJNE R0,#34H,LL
;-----------------------------
N1:INC R2
CJNE R2,#30,L1

RET
END

我想知道我編譯錯的那部份出了什麼問題...再來我做的這個是8051單晶片紅外線控制馬達
現在大致上都ok就剩下想讓他利用比較來做出分段這部份出問題而已
不知道有哪位高手可以幫忙解決???
拜託...因為專題製作快結束了!!!
老師已經下通碟...而我又卡住!!!
莊聖
一般會員


發表:4
回覆:8
積分:2
註冊:2009-04-07

發送簡訊給我
#3 引用回覆 回覆 發表時間:2009-11-05 13:59:15 IP:203.68.xxx.xxx 訂閱
SUB R5,DEA(從這行開始到jne那裡我編譯時出了錯誤!!!)
CMP R4,21
JNE M

SUB R5,DEA (這裡是一樣的從這到ja的時候出問題!!!)
CMP R4,21
JA MADA2

這是我錯的地方

===================引 用 莊聖 文 章===================
各位前輩...最近我做專題做到一個困點
現在需要去使用到比較指令..可是卻發現比較指令編譯時出錯
以下是我的程式↓

;decode C0 C1 C2 C3
;check C2
CODE_K1EQU 01H
CODE_K2EQU 02H
CODE_K3EQU 03H
CODE_K4EQU 04H
;-------------------------------
IRCOMEQU 30H
COMEQU 32H
;-------------------------------
TSEQU 20
DEAEQU 9
IRINEQU P3.2
PULEQU P1.7
PUREQU P1.6
;-------------------------------
ORG 0H
JMP BEGIN
;-------------------------------
BEGIN:
mov R1,DEA
CLR PUR
CLR PUL
SETB IRIN
LOOP:
MOV R0,#IRCOM
CALL IR_IN
CALL OP
JMP LOOP
;-------------------------------
pass:
MOV R4,21
mov R5,21
INC DEA
SUB R5,DEA(從這行開始到jne那裡我編譯時出了錯誤!!!)
CMP R4,21
JNE M
;-------------------------------
pass2:
MOV R4,21
MOV R5,21
DEC DEA
SUB R5,DEA (這裡是一樣的從這到ja的時候出問題!!!)
CMP R4,21
JA MADA2
;-------------------------------
PU_BACK:
CLR PUL
MOV R2,#DEA
A1:CALL DEL
DJNZ R2,A1
CLR PUL
MOV R2,#DEA
A2:CALL DEL
DJNZ R2,A2

RET
;--------------------------------
PU_FOR:
CLR PUL
MOV R1,#DEA
B1:CALL DEL
DJNZ R1,B1
CLR PUL
MOV R1,#DEA
B2:CALL DEL
DJNZ R1,B2

RET
;-------------------------------
PU_BACK1:
CLR PUR
MOV R2,#DEA
Y1:CALL DEL
DJNZ R2,Y1
CLR PUR
MOV R2,#DEA
Y2:CALL DEL
DJNZ R2,Y2

RET
;--------------------------------
PU_FOR1:
CLR PUR
MOV R1,#DEA
YT1:CALL DEL
DJNZ R1,YT1
CLR PUR
MOV R1,#DEA
YT2:CALL DEL
DJNZ R1,YT2

RET
;-------------------------------
M:
MOV R3,#TS
Z1:CALL PU_FOR
DJNZ R3,Z1
RET
;-------------------------------
MADA2:
MOV R3,#TS
E1:CALL PU_BACK
DJNZ R3,E1

RET
;-------------------------------
MADA3:
MOV R3,#TS
PQ1:CALL PU_FOR1
DJNZ R3,PQ1
RET
;-------------------------------
MADA4:
MOV R3,#TS
MA1:CALL PU_BACK1
DJNZ R3,MA1

RET
;-------------------------------
DEL:
MOV R5,#1
DELAY1:
MOV R6,#2
F1:MOV R7,#17
DJNZ R7,$
DJNZ R6,F1
DJNZ R5,DELAY1
RET
;------------------------------
OP:
MOV A,COM
CJNE A,#CODE_K1,H1
CALL pass
JMP OP
H1:MOV A,COM
CJNE A,#CODE_K2,H2
CALL pass2
RET
H2:MOV A,COM
CJNE A,#CODE_K3,H3
CALL pass
RET
H3:MOV A,COM
CJNE A,#CODE_K4,H4
CALL pass2
JMP OP
H4:
JMP OP
;------------------------------
IR_IN:
I1:JNB IRIN,I2
JMP I1
I2:MOV R4,#20
I20:CALL DEL
DJNZ R4,I20
JB IRIN,I1
I21:JB IRIN,I3
CALL DEL
JMP I21
I3:MOV R3,#0
LL:JNB IRIN,I4
CALL DEL
JMP LL
I4:JB IRIN,I5
CALL DEL
JMP I4
I5:MOV R2,#0
L1:CALL DEL
JB IRIN,N1

MOV A,#8
CLR C
SUBB A,R2
MOV A,@R0
RRC A
MOV @R0,A
INC R3
CJNE R3,#8,LL
MOV R3,#0
INC R0
CJNE R0,#34H,LL
;-----------------------------
N1:INC R2
CJNE R2,#30,L1

RET
END

我想知道我編譯錯的那部份出了什麼問題...再來我做的這個是8051單晶片紅外線控制馬達
現在大致上都ok就剩下想讓他利用比較來做出分段這部份出問題而已
不知道有哪位高手可以幫忙解決???
拜託...因為專題製作快結束了!!!
老師已經下通碟...而我又卡住!!!
mymj
版主


發表:132
回覆:486
積分:608
註冊:2002-10-25

發送簡訊給我
#4 引用回覆 回覆 發表時間:2009-11-05 22:52:59 IP:203.67.xxx.xxx 訂閱
SUB  R5,DEA (這裡是一樣的從這到ja的時候出問題!!!)
CMP R4,21
JA MADA2

8051組合語言減法指令不能記憶體減變數或記憶體只能由累積器去減

例如mcs51

SUBB A,RN
SUBB A,DIRECT
SUBB A,@ri
subb a,#data



mymj
syntax
尊榮會員


發表:26
回覆:1139
積分:1258
註冊:2002-04-23

發送簡訊給我
#5 引用回覆 回覆 發表時間:2009-11-06 08:09:21 IP:59.125.xxx.xxx 訂閱
恩,您把答案說了,他就無法學會由錯誤訊息解決問題的能力了
===================引 用 mymj 文 章===================
SUB R5,DEA (這裡是一樣的從這到ja的時候出問題!!!)
CMP R4,21
JA MADA2

8051組合語言減法指令不能記憶體減變數或記憶體只能由累積器去減

例如mcs51

SUBB A,RN
SUBB A,DIRECT
SUBB A,@ri
subb a,#data



mymj
莊聖
一般會員


發表:4
回覆:8
積分:2
註冊:2009-04-07

發送簡訊給我
#6 引用回覆 回覆 發表時間:2009-11-12 00:20:52 IP:123.193.xxx.xxx 訂閱
多謝幫忙解答!!...不過我已經換用其他指令來使用
當然現再還出現一點狀況...像是編譯完無錯可燒錄..卻沒有執行動作
希望大家可以再幫我看看...等我程式修改好
在麻煩幫我一下!!!

另外在這裡有個問題想問...組合語言的比較大小於的指令
有哪幾種...可以列出來給我看看嗎??
還有告訴我他的用法以及所該使用的暫存器或累積器是哪些?
問題可能有點多...希望大家可以幫幫我!!!謝謝!!!!
mymj
版主


發表:132
回覆:486
積分:608
註冊:2002-10-25

發送簡訊給我
#7 引用回覆 回覆 發表時間:2009-11-12 20:20:53 IP:211.74.xxx.xxx 訂閱
另外在這裡有個問題想問...組合語言的比較大小於的指令
有哪幾種...可以列出來給我看看嗎??
還有告訴我他的用法以及所該使用的暫存器或累積器是哪些?

這些都是基本問題,要寫.組合語言程式就需先瞭解
市面上相關書籍太多了,花些時間建立基本功


mymj
莊聖
一般會員


發表:4
回覆:8
積分:2
註冊:2009-04-07

發送簡訊給我
#8 引用回覆 回覆 發表時間:2009-11-29 01:16:10 IP:123.193.xxx.xxx 訂閱
;decode  C0  C1  C2  C3
;check C2
CODE_K1 EQU 01H
CODE_K2 EQU 02H
CODE_K3 EQU 03H
CODE_K4 EQU 04H
;-------------------------------
IRCOM EQU 30H
COM EQU 32H
;-------------------------------
TS EQU 40
DEA EQU 9
IRIN EQU P3.2
PUL EQU P1.7
PUR EQU P1.6
;-------------------------------
ORG 0000H
JMP BEGIN
;-------------------------------
BEGIN:
CLR PUR
CLR PUL
SETB IRIN
LOOP:
MOV R0,#IRCOM
CALL IR
CALL OP
JMP LOOP
;-------------------------------
pass:
INC DEA
MOV A,#DEA
CJNE A,#21,M2
RET
;-------------------------------
pass2:
DEC DEA
MOV A,#DEA
CJNE A,#9,M2
RET
;-------------------------------
M2:
MOV R3,#TS
E1: CALL PU_BACK
DJNZ R3,E1

RET
;-------------------------------
MADA3:
MOV R3,#TS
PQ1: CALL PU_FOR1
DJNZ R3,PQ1
RET
;-------------------------------
MADA4:
MOV R3,#TS
MA1: CALL PU_BACK1
DJNZ R3,MA1

RET
;-------------------------------
PU_BACK:
SETB PUL
MOV R2,#DEA
A1: CALL DEL
DJNZ R2,A1
CLR PUL
MOV R2,#(200-DEA)
A2: CALL DEL
DJNZ R2,A2

RET
;--------------------------------
PU_FOR:
SETB PUL
MOV R1,#DEA
B1: CALL DEL
DJNZ R1,B1
CLR PUL
MOV R1,#(200-DEA)
B2: CALL DEL
DJNZ R1,B2

RET
;-------------------------------
PU_BACK1:
SETB PUR
MOV R2,#DEA
Y1: CALL DEL
DJNZ R2,Y1
CLR PUR
MOV R2,#(200-DEA)
Y2: CALL DEL
DJNZ R2,Y2

RET
;--------------------------------
PU_FOR1:
SETB PUR
MOV R1,#DEA
YT1: CALL DEL
DJNZ R1,YT1
CLR PUR
MOV R1,#(200-DEA)
YT2: CALL DEL
DJNZ R1,YT2

RET
;-------------------------------
M:
MOV R3,#TS
Z1: CALL PU_FOR
DJNZ R3,Z1
RET
DEL:
MOV R5,#1
DELAY1:
MOV R6,#2
F1: MOV R7,#17
DJNZ R7,$
DJNZ R6,F1
DJNZ R5,DELAY1
RET
;------------------------------
OP:
MOV A,COM
CJNE A,#CODE_K1,H1
CALL pass
RET
H1: MOV A,COM
CJNE A,#CODE_K2,H2
CALL pass2
RET
H2: MOV A,COM
CJNE A,#CODE_K3,H3
CALL pass
RET
H3: MOV A,COM
CJNE A,#CODE_K4,H4
CALL pass2
JMP OP
H4:
JMP OP
;------------------------------
IR:
I1: JNB IRIN,I2
JMP I1
I2: MOV R4,#20
I20: CALL DEL
DJNZ R4,I20
JB IRIN,I1
I21: JB IRIN,I3
CALL DEL
JMP I21
I3: MOV R3,#0
LL: JNB IRIN,I4
CALL DEL
JMP LL
I4: JB IRIN,I5
CALL DEL
JMP I4
I5: MOV R2,#0
L1: CALL DEL
JB IRIN,N1

MOV A,#8
CLR C
SUBB A,R2
MOV A,@R0
RRC A
MOV @R0,A
INC R3
CJNE R3,#8,LL
MOV R3,#0
INC R0
CJNE R0,#34H,LL
;-----------------------------
N1: INC R2
CJNE R2,#30,L1

RET
END

上面是我改過的程式碼.這次在裡面添加了加減法功能..編譯之後沒有錯誤!!!
可是不知道為什麼馬達就是沒動作....
詢問過老師他說語意錯誤...我不是很瞭解
所以在上來問各位高手...可以告訴我
這次的錯誤是哪裡????
編輯記錄
莊聖 重新編輯於 2009-11-29 01:17:41, 註解 無‧
系統時間:2024-03-28 21:31:00
聯絡我們 | Delphi K.Top討論版
本站聲明
1. 本論壇為無營利行為之開放平台,所有文章都是由網友自行張貼,如牽涉到法律糾紛一切與本站無關。
2. 假如網友發表之內容涉及侵權,而損及您的利益,請立即通知版主刪除。
3. 請勿批評中華民國元首及政府或批評各政黨,是藍是綠本站無權干涉,但這裡不是政治性論壇!