1 / 28

HT48R70A Instruction Set

HT48R70A Instruction Set. Program Develop Flow. 指令語法. [ 標記 ] [ 指令 or 假指令 ] [ 運算元 ] [ 註解 ]. EX:. Delay: MOV A, 30 ; move value 30 to Accumulator. 上述四個成員並不一定都要指定。 成員的字型是無大小寫之分 假指令用來告知組譯器如何編譯 指令則是告知微控制器如何執行 運算元 (operand) :提供假指令或指令所需的資料。 任何分號 ( ; ) 之後的文字均視為註解。. 假指令.

Download Presentation

HT48R70A Instruction Set

An Image/Link below is provided (as is) to download presentation Download Policy: Content on the Website is provided to you AS IS for your information and personal use and may not be sold / licensed / shared on other websites without getting consent from its author. Content is provided to you AS IS for your information and personal use only. Download presentation by click this link. While downloading, if for some reason you are not able to download a presentation, the publisher may have deleted the file from their server. During download, if you can't get a presentation, the file might be deleted by the publisher.

E N D

Presentation Transcript


  1. HT48R70AInstruction Set

  2. Program Develop Flow

  3. 指令語法 [標記] [指令or假指令] [運算元] [註解] EX: Delay: MOV A, 30 ; move value 30 to Accumulator • 上述四個成員並不一定都要指定。 • 成員的字型是無大小寫之分 • 假指令用來告知組譯器如何編譯 • 指令則是告知微控制器如何執行 • 運算元(operand):提供假指令或指令所需的資料。 • 任何分號(;)之後的文字均視為註解。

  4. 假指令 • 假指令: 用來告知組譯器如何來組譯程式 • 檔案控制的假指令 • INCLUDEfile-name or INCLUDE “file-name” • 將file-name的內容,嵌入至目前的原始碼檔案,並被視為原始碼。 • 程式假指令 • END • 宣告程式的結束,因此最好不要在含入檔(included file)中加入這個指令。 • ORG expression • 告知組譯器將下面的程式碼儲放到ROM的何位址 • EX: ORG 000h JMP Start ORG 08h Start: … • name PROC v.s. name ENDP • 用來定義副程式之範圍 • EX: Delay PROC MOV a, 20 … Delay ENDP

  5. 指令:●SECTION 格式: name ●SECTION ‘class’ • Class:用於指定以下的程式碼屬性,其名稱有CODE與DATA。 • CODE:表此段程式碼為程式段,是放在ROM記憶體內。 • DATA:表此段程式碼為資料段,是放在RAM記憶體內。 指令: DC 格式:[label:] DC expression1 [,expression2 [,...]] • 保留程式記憶體(ROM)之空間(此假指令只能用於code類別之程式段) • label代表該位址之標名,expression1 及expression2 的值是要儲存至ROM的內容。 • Ex ORG LASTPAGE table: DC 0128H, 025CH, 28H • 在此範例中,組譯器會在last page(0x1F00~0x1FFF)內預留三個位址的程式記憶體空間、並將0128H 、025CH和0028H 儲存至這三個位址中。 16-bit 0x1F00 0x01 0x28 0x02 0x5C 0x00 0x28

  6. 指令:DBIT、DB、DW、DUP 格式:[name] DB value1 [,value2 [,...]] [name] DW value1 [,value2 [,...]] [name] DBIT [name] DB repeated-count DUP(?) [name] DW repeated-count DUP(?) • 在資料或程式記憶體(ROM or RAM)內保留一個位元(DBIT)、一個位元組(DB)或二個位元組(DW)的記憶體空間 • name (如果有指定name)為該位址之標名, • value1、…代表在保留的記憶體位址中存入之數值 • 注意:如果保留的是資料記憶體(RAM)空間的話,則不可以指定存入之value!此時之value必須以「?」取代。 • 而DUP代表此型態(BYTE或WORD)的記憶體要保留幾組。 MY_DATA .SECTION ‘DATA’ BUF1 DB ? BUF2 DW ? FLAG1 DBIT ARRAY DB 20 DUP(?) MY_CODE .SECTION ‘CODE’ TAB_1 DW 1,2,4,8, 16, 32, 64, 128, 256 TAB_2 DW ‘ABCDEFG’

  7. 指令: LOW、HIGH 格式: LOW expression、HIGH expression • 用來取得expression之高(HIGH)、低(LOW)位元組 • EX MAX EQU 8822H HI_BYTE EQU HIGH MAX ; HI_BYTE = 88H LO_BYTE EQU LOW MAX ; LO_BYTE = 22H • $: 表示目前指令的位址 (PC-1的位址) • ex: MOV AX, 20 JMP $

  8. Instruction Set --算數運算指令

  9. ADC A,[90h] Add a,[90h] Addm a,[90h] Add a, 20H ADCM A,[90h] data memory data memory data memory data memory A 80H 20H 20H 90H 80H A 80H 20H 90H 20H 90H 20H 90H A 80H A 80H A 80H 80H 20H + 80H 20H 80H 20H 80H 20H + A A0H C = 1 + + C = 1 + 90H A0H A A1H A A0H 90H A1H SUB A,20h SUBM A,[90h] SUB A,[90h] SBCM A,[90h] SBC A,[90h] data memory data memory data memory data memory A 80H 20H 80H 20H 90H - 20H 90H 20H 90H A 80H 20H 90H A 80H A 80H A 80H 80H 20H A 60H 80H 20H 80H 20H 80H 20H C = 0 - C = 0 - - - 90H 5FH A 60H A 5FH 90H 60H

  10. ADD A,[90H] INC [90H] DEC [90H] DECA [90H] INCA [90H] data memory data memory data memory data memory data memory A 29H 90H 20H 90H 21H 20H 90H 65H 21H 1 1 1 1 65H 29H 20H 21H 20H 21H + - + + - C = 0 AC =0 8EH A 90H 21H A 90H 20H 21H A 20H DAA [90H] 90H 94H 動作:DAA只有在以BCD格式作加法後,立即執行此指令,才會有正確結果。 範例:ADD A,[90H] ; A=0x65, [90H]=0x29 DAA [90H] ADD A, [90H]後的A值為8EH DAA [90H] 後的值為 65+29 = 94 (即十進位的加法運算)。

  11. 邏輯運算指令

  12. XOR A, [90H] OR A, [90H] AND A, [90H] A: 10001111 (2) [90H] : 01001010 (2) AND: 00001010 (2) A: 10001111 (2) [90H] : 01001010 (2) XOR: 11000101 (2) A: 10001111 (2) [90H] : 01001010 (2) OR: 11001111 (2) A 0AH A C5H A CFH XORM A, [90H] ORM A, [90H] ANDM A, [90H] A: 10001111 (2) [90H] : 01001010 (2) AND: 00001010 (2) A : 10001111 (2) [90H] : 01001010 (2) XORM: 11000101 (2) A: 10001111 (2) [90H] : 01001010 (2) OR: 11001111 (2) 0AH [90H] C5H [90H] [90H] CFH

  13. XOR A, x OR A, x AND A, x A: 10001111 (2) x : 01001010 (2) AND: 00001010 (2) A: 10001111 (2) x : 01001010 (2) XOR: 11000101 (2) A: 10001111 (2) x : 01001010 (2) OR: 11001111 (2) A 0AH A C5H A CFH CPL [m] CPLA [m] [90H]: 10001000 (2) [90H]: 10001000 (2) 1’S 1’S 01110111 (2) 01110111 (2) [90H]: 77H A: 77H

  14. XOR 的用途 • 判斷二暫存器的內容是否完全相同 • M1 + M2 = 0  M1=M2 • 提供反邏輯NOT運算 • ~a = a + 1 • 二個暫存器的內容對調 c = a + b c + a = b, c + b = a EX: mov a, [90h] xor a, [91h] xorm a,[90h] xorm a,[91h] • 二記憶體內容中最低二位二互換 mov a, [90h] xor a, [91h] and a, 00000011b xorm a,[90h] xorm a,[91h

  15. Instruction Set --邏輯運算指令

  16. b7 b6 b5 b4 b3 b2 b1 b0 RL [m] b7 b6 b5 b4 b3 b2 b1 b0 RLA [m] A : b7 b6 b5 b4 b3 b2 b1 b0 b7 b6 b5 b4 b3 b2 b1 b0 C RLC [m]

  17. C b7 b6 b5 b4 b3 b2 b1 b0 RLCA [m] A : b7 b6 b5 b4 b3 b2 b1 b0 b7 b6 b5 b4 b3 b2 b1 b0 RR [m] b7 b6 b5 b4 b3 b2 b1 b0 RRA [m] A : b7 b6 b5 b4 b3 b2 b1 b0

  18. b7 b6 b5 b4 b3 b2 b1 b0 C RRC [m] C b7 b6 b5 b4 b3 b2 b1 b0 RRCA [m] A : b7 b6 b5 b4 b3 b2 b1 b0

  19. Instruction Set --資料移動指令

  20. Instruction Set --程式分支指令

  21. Instruction Set --查表與其他指令

  22. 定址模式 • 立即定址(Immediate addressing) • MOV A, 20H  A=20H • 直接定址(Direct addressing) • MOV A, [30H] • 間接定址(Indirect addressing) • MOV A, 31H • MOV MP0, A • MOV A, 40H • MOV IAR0, A • 指標定址(Pointer addressing) 內部RAM A 30H 55H 55H 31H 40H 40H

  23. 指標定址法 • 對HOTEK晶片而言, 只有ROM的內容才具有指標定址法 • 使用指標暫存器 TBLP, 配合 查表指令 TABRDC、TABRDL) ORG 100H ORG 170H MOV A, 70H DC 011H MOV TBLP, A DC 022H TABRDC [30H] DC 033H • 目前頁為100h + TBLP (70H) = 170H • 所以ROM[170H]=0033H  RAM[30H]= 33, TABH=00

  24. 計算式跳躍(Computation jump) • 利用改變PCL來決定LED的顯示內容 MAIN: CLR INDEX MOV A, 06 MOV COUNT, A LOOP: MOV A, INDEX CALL GET-VALUE MOV PA, A CALL DELAY INC INDEX SDZ COUNT JMP LOOP JMP MAIN GET-VALUE PROC ADDM A, PCL RET A,10000001B RET A,01000010B RET A,00100100B RET A,00011000B RET A,00100100B RET A,01000010B GET-VALUE ENDP IR  MEM[PC] PC PC+1 * 讀取指令時, PC內容即加1

  25. 計算式跳躍 • 利用ADDM A, PCL指令達到控制程式流程的方式 ADDM A, PCL ; PCL=Acc+PCL JMP EQU-0 ; Jump to EQU-0 if Acc=0 JMP EQU-1 ; Jump to EQU-1 if Acc=1 JMP EQU-2 ; Jump to EQU-2 if Acc=2 JMP EQU-3 ; Jump to EQU-3 if Acc=3 ….

  26. 軟體時間延遲--指令執行週期之計算 • Holtek的所有指令大都是1個指令週期,除了該指令的執行會破壞執行順序 ,則為2個指令週期 • 所謂 破壞執行順序 是指:他的下一個執行之指令不是 PC+1 • 即程式分支指令: • JMP, SZ [m], SZA [m], SZ [m].i, SNZ [m].i, SIZ [m], SDZ [m], SIZA [m], SDZA [m], Call addr, RET, RET A, x, RETI • 若供給 Holtek 晶片的工作頻率fsys=4MHz, 則其內部指令工作頻率fsys/4=1MHz • 指令週期為1/1MHz=1us

  27. 指令週期計算 指令週期 pa equ [12h] 0 pac equ [13h] 0 org 0h 0 jmp reset 2 reset: mov a,00h 1 mov pac,a 1 start: clr pa.0 1 call delay 2 set pa.0 1 call delay 2 jmp start 2 delay: mov a,07fh 1 mov [61h],a 1 wait_1: mov a,0ffh 1 mov [60h],a 1 wait_2: sdz [60h] 1 or 2 jmp wait_2 2 sdz [61h] 1 or 2 jmp wait_1 2 ret 2 Delay= 1+1+Y+2 Y= (7F-1)*(1+1+X+1+2)+2 or 7F*(1+1+X+1+2)-1 X= (FF-1)*3 + 2 or FF*3 -1

  28. 隨堂測驗-計算執行下列程式到ProgEnd結束所需時間(若fsys=4MHz)隨堂測驗-計算執行下列程式到ProgEnd結束所需時間(若fsys=4MHz) Variable .Section ‘DATA’ Delta db ? Prog .Section ‘CODE’ Main: MOV A,200 CALL Delay ProgEnd: NOP Delay PROC MOV Delta, A SDZ Delta JMP $-1 RET Delay ENDP END

More Related