我寫過51彙編(好幾年前的事情了),我逐句解釋下ORG 00H,指示後面的程式碼從0000H開始存放,BEGIN是程式標號,可以理解為一個程式的地址,先記下來,後面再看MOV R0,#0,R0是暫存器,賦值0MOV R1,#6,R6也是暫存器,賦值6NEXT1:程式標號,MOV DPTR,#TABBL1:DPTR是資料指標,賦值TABLE1,是一個表格的首地址MOV A,R0,將R0的值賦給A,MOVC A,@A+DPTR,查表TABLE1第N項的內容,如A=0,則執行後,A=TABLE1的第一個內容,MOV P1,A,將A輸出到P1埠。MOV DPTR,#TABLE2MOV A,R0MOVC A,@A+DPTRMOV P0,A,將A輸出到P0埠。ACALL DELAY05,呼叫子程式,DELAY05,應該是一個延時程式INC R0,R0的值+1DJNZ R1,NEXT1,R1減1,如果非0,跳轉到NEXT1,看上面的NEXT1標號,又執行了兩次查表,輸出動作。JMP BEGIN,如果R1減到0,跳轉到BEGIN,重新開始//延時長度,≈250*198*3=?,關鍵是DJNZ R7,$這句,記不清執行時間了,自己算吧DELAY01:MOV R6,#250 T6:MOV R7,#198 DJNZ R7,$ DJNZ R6,T6RET//延時長度//5次DELAY01消耗的時間,相當於長延時DELAY05:MOV R5,#5TT5:ACALL DELAY01DJNZ R5,TT5RET//常數表1TABLE1:DB 表示存放一個位元組//常數表2TABLE2:DB 表示存放一個位元組就醬紫了,還有嗎
我寫過51彙編(好幾年前的事情了),我逐句解釋下ORG 00H,指示後面的程式碼從0000H開始存放,BEGIN是程式標號,可以理解為一個程式的地址,先記下來,後面再看MOV R0,#0,R0是暫存器,賦值0MOV R1,#6,R6也是暫存器,賦值6NEXT1:程式標號,MOV DPTR,#TABBL1:DPTR是資料指標,賦值TABLE1,是一個表格的首地址MOV A,R0,將R0的值賦給A,MOVC A,@A+DPTR,查表TABLE1第N項的內容,如A=0,則執行後,A=TABLE1的第一個內容,MOV P1,A,將A輸出到P1埠。MOV DPTR,#TABLE2MOV A,R0MOVC A,@A+DPTRMOV P0,A,將A輸出到P0埠。ACALL DELAY05,呼叫子程式,DELAY05,應該是一個延時程式INC R0,R0的值+1DJNZ R1,NEXT1,R1減1,如果非0,跳轉到NEXT1,看上面的NEXT1標號,又執行了兩次查表,輸出動作。JMP BEGIN,如果R1減到0,跳轉到BEGIN,重新開始//延時長度,≈250*198*3=?,關鍵是DJNZ R7,$這句,記不清執行時間了,自己算吧DELAY01:MOV R6,#250 T6:MOV R7,#198 DJNZ R7,$ DJNZ R6,T6RET//延時長度//5次DELAY01消耗的時間,相當於長延時DELAY05:MOV R5,#5TT5:ACALL DELAY01DJNZ R5,TT5RET//常數表1TABLE1:DB 表示存放一個位元組//常數表2TABLE2:DB 表示存放一個位元組就醬紫了,還有嗎