(下記フレーム内のリンクがない命令は未実装です。少しずつ実装しておりCTRL+F5の操作で最新のページを御覧ください。)
 Umeアセンブラ 
レジスタ  ABC順の命令   SFRs  UMEHOSHI ITA マクロ    ●レジスタ操作命令  MFHI  MFLO  MTHI  MTLO  move
●ストア命令  SB  SH  SW  SWL  SWR  USW  SC
●ロード命令  LB  LBU  LH  LHU  li  LUI  LW  LWL  LWR  ULW  LL
●算術加減算命令  ADD  ADDI  ADDIU  ADDU  CLO  CLZ  LA  NEGU  SEBR2  SEHR2  SUB  SUBU
●掛け算・割り算命令  DIV  DIVU  MADD  MADDU  MSUB  MSUBU  MUL  MULT  MULTU
●論理演算命令  AND  ANDI  NOP  NOR  OR  ORI  XOR  XORI  INS
●シフト・回転命令  ROTRR2  ROTRV  SLL  SLLV  SRA  SRAV  SRLV  SRL  SRLV
●条件テストと条件付き移動操作命令  MOVN  MOVZ  SLT  SLTI  SLTIU  SLTU
●分岐命令・ジャンプ  BEQ  beqz  BNE  bnez  BNEL  bnezl  BLEZ  BLTZ  BGEZ  BGTZ
 BAL  BGEZAL  BLTZAL  J  JAL  JALR  JR





戻る ADD Rd, Rs, Rt Rd = Rs + Rt Integer Add :レジスタ間の加算 [000000][Rs:5][Rt:5][Rd:5][00000][100000]
戻る ADDI Rt, Rs, CONST16Rt = Rs + CONST16 Integer Add Immediate Overflow例外可能 [001000][rs:5][rd:5][CONST16:16]
戻る ADDIU Rt, Rs, CONST16Rt = Rs + CONST16 Unsigned Integer Add Immediate (RsとCONST16の符号無し整数を加算値を、Rtレジスタに格納) [001001][rs:5][rd:5][CONST16:16]
戻る ADDU Rd, Rs, RtRd = Rs +Rt Add Unsigned Word(レジスタ間の加算 [000000][rs:5][rt:5][rd:5][00000][100001]
戻る AND Rd, Rs, RtRd = Rs AND Rt logical AND ( レジスタ Rs と Rt の内容のビットごとの AND演算結果をレジスタRd に格納する.) [000000][Rs:5][Rt:5][Rd:5][00000][100100]
戻る ANDI Rt, Rs, immediate16Rt = Rs & immediate16 Logical AND Immediate ( 16bitイミーディエトを符号拡張値とレジスタRsをビットANDした結果をレジスタRtに格納) [001100][Rs:5][Rt:5][immediate16:16]
戻る B Unconditional Branch (Assembler idiom for: BEQ r0, r0, offset) PC += (int)offset
戻る BAL Branch and Link (Assembler idiom for: BGEZAL r0, offset) GPR[31> = PC + 8 PC += (int)offset
戻る BEQ Rs, Rt, offset16if Rs==Rt:
PC+=offset
Branch on Equal(Rs == Rtであれば相対分岐。offset16を符号拡張して2bit左シフトした値の加算で分岐先を計算する.) [000100][Rs:5][Rt:6][offset:16]
戻る BEQL Rs, Rt, offset16if Rs==Rt:
PC+=offset
Branch on Equal(Rs == Rtであれば相対分岐。offset16を符号拡張して2bit左シフトした値の加算で分岐先を計算する.) [010100][Rs:5][Rt:6][offset:16]
戻る BGEZ Rs, offset16if Rs>=0:
PC+=offset
Branch on Greater Than or Equal To Zero (Rs が0以上であれば相対分岐。offset16を符号拡張して2bit左シフトした値の加算で分岐先を計算する.) [000111][Rs:5][00000][offset:16]
戻る BGEZL Rs, offset16if Rs>=0:
PC+=offset
Branch on Greater Than or Equal to Zero Likely (Rs が0以上であれば相対分岐。offset16を符号拡張して2bit左シフトした値の加算で分岐先を計算する.) [010111][Rs:5][00000][offset:16]
戻る BGEZALL Branch on Greater Than or Equal To Zero And Link Likely GPR[31> = PC + 8 if !Rs[31> PC += (int)offset else Ignore Next Instruction
戻る BGEZL Branch on Greater Than or Equal To Zero Likely if !Rs[31> PC += (int)offset else Ignore Next Instruction
戻る BGTZ Rs, offset16if Rs > 0:
PC += (int)offset
Branch on Greater Than Zero (Rs が0より大きい場合に相対分岐。offset16を符号拡張して2bit左シフトした値の加算で分岐先を計算する.) [000111][Rs:5][00000][offset:16]
戻る BGTZL Rs, offset16if Rs > 0:
PC += (int)offset
Branch on Greater Than Zero Likely(Rs が0より大きい場合に相対分岐。offset16を符号拡張して2bit左シフトした値の加算で分岐先を計算する.) [010111][Rs:5][00000][offset:16]
戻る BLEZ Rs, offset16if Rs <= 0 PC += (int)offset Branch on Less Than or Equal to Zero (Rs <= 0であれば相対分岐。offset16を符号拡張して2bit左シフトした値の加算で分岐先を計算する.) [000110][Rs:5][00000][offset:16]
戻る BLEZL Rs, offset16if Rs <= 0 PC += (int)offset Branch on Less Than or Equal to Zero Likely (Rs <= 0であれば相対分岐。offset16を符号拡張して2bit左シフトした値の加算で分岐先を計算する.) [010110][Rs:5][00000][offset:16]
戻る BLTZ Rs, offset16if Rs < 0 PC += (int)offset Branch on Less Than Zero(Rs < 0であれば相対分岐。offset16を符号拡張して2bit左シフトした値の加算で分岐先を計算する.) [000001][Rs:5][00000][offset:16]
戻る BLTZAL Rs, offset16if Rs < 0 PC += (int)offset Branch on Less Than Zero And Link (Rs < 0であれば相対分岐。offset16を符号拡張して2bit左シフトした値の加算で分岐先を計算する.) [000001][Rs:5][10000][offset:16]
戻る BLTZALL Branch on Less Than Zero And Link Likely GPR[31> = PC + 8 if Rs[31> PC += (int)offset else Ignore Next Instruction
戻る BLTZL Branch on Less Than Zero Likely if Rs[31] PC += (int)offset else Ignore Next Instruction
戻る BNE Rs, Rt, offset16if Rs != Rt:
 PC += (int)offset16
Branch on Not Equal(Rs != Rtであれば相対分岐。offset16を符号拡張して2bit左シフトした値の加算で分岐先を計算する.) [000101][Rs:5][Rt:5][offset16]
戻る BNEL rs, rt, offset16if Rs != Rt:
 PC += offset16<<2
Branch on Not Equal Likely「Branch Likely 命令」(Rs != Rtであれば相対分岐。offset16を符号拡張して2bit左シフトした値の加算で分岐先を計算する. [010101][Rs:5][Rt:5][offset16]
戻る BREAK Breakpoint Break Exception
戻る CLO Count Leading Ones Rd = NumLeadingOnes(Rs)
戻る
戻る CLZ Count Leading Zeroes Rd = NumLeadingZeroes(Rs)
戻る COP0 Coprocessor 0 Operation See Software User’s Manual
戻る DERET Return from Debug Exception PC = DEPC Exit Debug Mode
戻る DI Atomically Disable Interrupts Rt = Status; StatusIE = 0
戻る DIV Divide LO = (int)Rs / (int)Rt HI = (int)Rs % (int)Rt
戻る DIVU Unsigned Divide LO = (uns)Rs / (uns)Rt HI = (uns)Rs % (uns)Rt
戻る EHB Execution Hazard Barrier Stop instruction execution until execution hazards are cleared
戻る EI Atomically Enable Interrupts Rt = Status; StatusIE = 1
戻る ERET Return from Exception if SR[2> PC = ErrorEPC else PC = EPC SR[1> = 0 SR[2> = 0 LL = 0
戻る EXT Extract Bit Field Rt = ExtractField(Rs, pos, size) TABLE 3-1: PIC32MX3XX/4XX INSTRUCTION SET (CONTINUED) Instruction Description Function
戻る INS Rt,Rs,pos,sizeRt = InsertField(Rt, Rs, msb,lsb) INS Insert Bit Field: レジスタ Rs の内容の下位 size ビットの領域を、レジスタ Rt の pos ビットから size ビットの領域に挿入する。  msb=pos+size-1, lsb=pos [011111][Rs:5][Rt:5][msb:5][lsb:5][000100]
戻る J target PC = PC+(target<<2) Unconditional Jump (無条件ジャンプ:26bitのtargetアドレスを左に2ビット分シフトし, PC の上位4ビットと結合したアドレスへ,1命令遅れてジャンプする. ) [000010][target: 26]
戻る JAL targetra = PC + 8;PC = PC[31:28] || offset<<2 Jump and Link (PC の上位4ビットとPC上位4ビットを結合したアドレスへ、ジャンプ) [000011][offset:28]
戻る JALR Rd, Rs Rd = PC + 8; PC = Rs Jump and Link Register (Rdレジスタに戻り番地を記憶してジャンプする。1命令遅れてジャンプすることに注意) [000000][Rs:5][00000][Rd:5][5:00000][001001]
JALR Rs$31 = PC + 8; PC = Rs Jump and Link Register(上記のRdを省略した表記で、$31(=Ra)レジスタに戻り番地を記憶してジャンプする「関数呼び出しに使われる」。 1命令遅れてジャンプすることに注意) [000000][Rs:5][00000][11111][5:00000][001001]
戻る JALR.HB Jump and Link Register with Hazard Barrier Like JALR, but also clears execution and instruction hazards
戻る JALRC Jump and Link Register Compact ? do not execute instruction in jump delay slot (MIPS16e? only) Rd = PC + 2 PC = Rs
戻る JR RsPC = Rs Jump Register (Rsレジスタ 内容のアドレスに,1命令遅れてジャンプする.関数のリターンで使われる。) [000000][Rs:5][0000000000][00000][001000]
戻る JR.HB Jump Register with Hazard Barrier Like JR, but also clears execution and instruction hazards
戻る JRC Jump Register Compact ? do not execute instruction in jump delay slot (MIPS16e only) PC = Rs
戻る LB Rt, offset16(Rs)Rt = (byte)Mem8[Rs+offset16] Load Byte (符号拡張したoffset16とRsの加算値で得られるアドレスで指定されたバイトデータを、 符号拡張して、Rt にロードする. ) [100000][Rs:5][Rt:5][offset:16]
戻る LBU Unsigned Load Byte Rt = (ubyte))Mem[Rs+offset>
戻る LH Load Halfword Rt = (half)Mem[Rs+offset>
戻る LHU rt, offset16(Rs) Rt = Mem16[Rs+offset16] Load Halfword Unsigned (符号拡張したoffset16とレジスタRsの加算値のアドレスが指し示すメモリ内容の ハーフワードデータをゼロ拡張して、レジスタ Rt にロードする。) [100101][Rs:5][Rt:5][offset16:16]
戻る LL Load Linked Word Rt = Mem[Rs+offset> LL = 1 LLAdr = Rs + offset
戻る LUI Rt, const16Rt = const16 << 16 Load Upper Immediate (16bitイミーディエトを 16bit左シフトして32bitに符号拡張してレジスタRt に格納する) [001111][00000][Rt:5][const16:16]
戻る LW Rt, offset16(Rs)Rt = Mem32(Rs + offset16) Load Word (符号拡張したoffset16とレジスタRsの加算値のアドレスが指し示すメモリ内容をRtレジスタにロードする ) [100011][Rs:5][Rt:5][offset16:16]
戻る LWPC Load Word, PC relative Rt = Mem[PC+offset>
戻る LWL Load Word Left See Architecture Reference Manual
戻る LWR Load Word Right See Architecture Reference Manual
戻る MADD Multiply-Add HI | LO += (int)Rs * (int)Rt
戻る MADDU Multiply-Add Unsigned HI | LO += (uns)Rs * (uns)Rt
戻る MFC0 Move From Coprocessor 0 Rt = CPR[0, Rd, sel>
戻る MFHI Move From HI Rd = HI
戻る MFLO Move From LO Rd = LO
戻る MOVN Move Conditional on Not Zero if Rt ? 0 then Rd = Rs
戻る MOVZ Move Conditional on Zero if Rt = 0 then Rd = Rs
戻る MSUB Multiply-Subtract HI | LO -= (int)Rs * (int)Rt
戻る MSUBU Multiply-Subtract Unsigned HI | LO -= (uns)Rs * (uns)Rt
戻る MTC0 Move To Coprocessor 0 CPR[0, n, Sel> = Rt
戻る MTHI Move To HI HI = Rs
戻る MTLO Move To LO LO = Rs
戻る MUL Multiply with register write HI | LO =Unpredictable Rd = ((int)Rs * (int)Rt)31..0
戻る MULT Integer Multiply HI | LO = (int)Rs * (int)Rd
戻る MULTU Unsigned Multiply HI | LO = (uns)Rs * (uns)Rd TABLE 3-1: PIC32MX3XX/4XX INSTRUCTION SET (CONTINUED) Instruction Description Function
戻る NOPNo Operation No Operation (Assembler idiom for: SLL r0, r0, r0) 何もしない [000000][00000][00000][00000][000000]
戻る NOR Rd, Rs, RtRd = Rs NOR Rt logical NOT OR ( レジスタ Rs と Rt の内容のビットごとの NOR演算結果をレジスタRd に格納する.) [000000][Rs:5][Rt:5][Rd:5][00000][100111]
戻る OR Rd,Rs,RtRd = Rs OR Rt Logical OR ( レジスタ Rs と Rt の内容のビットごとの OR演算結果をレジスタRd に格納する.) [000000][Rs:5][Rt:5][Rd:5][00000][100101]
戻る ORI Rt, Rs, immediate16Rt = Rs | immediate16 Logical OR Immediate ( 16bitイミーディエトを符号拡張値とレジスタRsをビットORした結果をレジスタRtに格納) [001101][Rs:5][Rt:5][immediate16:16]
戻る RDHWR Read Hardware Register Allows unprivileged access to registers enabled by HWREna register
戻る RDPGPR Read GPR from Previous Shadow Set Rt = SGPR[SRSCtlPSS , Rd>
戻る RESTORE Restore registers and deallocate stack frame (MIPS16e? only) See Architecture Reference Manual
戻る ROTR Rotate Word Right Rd = Rtsa-1..0 || Rt31..sa
戻る ROTRV Rotate Word Right Variable Rd = RtRs-1..0 || Rt31..Rs
戻る SAVE Save registers and allocate stack frame (MIPS16e only) See Architecture Reference Manual
戻る SB Store Byte (byte)Mem[Rs+offset> = Rt
戻る SC Store Conditional Word if LL = 1 mem[Rs+offset> = Rt Rt = LL
戻る SDBBP Software Debug Break Point Trap to SW Debug Handler
戻る SEB Sign-Extend Byte Rd = (byte)Rs
戻る SEH Sign-Extend Half Rd = (half)Rs
戻る SH Rt, offset16(Rs)Mem16(Rs + offset16) = Rt Store Halfword 『符号拡張した offset をレジスタ base の内容に加算しアドレスを生成する。 アドレスで指定されたメモリに,レジスタ rt の最下位ハーフワードの内容をストアする。』 [101001][Rs:5][Rt:5][Immed16:16]
戻る SLL Shift Left Logical Rd = Rt << sa
戻る SLLV Shift Left Logical Variable Rd = Rt << Rs[4:0>
戻る SLT Set on Less Than if (int)Rs < (int)Rt Rd = 1 else Rd = 0
戻る SLTI Rt, Rs, Immed16if (int)Rs<(int)Immed16:
 Rt=1 else Rt=0
Set on Less Than Immediate (RsとImmed16を2の補数表現された符号付き整数のとして比較し、Rsが小さい場合みRtを1,そうでなければ0にする) [001010][Rs:5][Rt:5][Immed16:16]
戻る SLTIU Rt, Rs, Immed16if (uint)Rs<(uint)Immed16:
 Rt=1 else Rt=0
Set on Less Than Immediate Unsigned (RsとImmed16を2の補数表現された符号無し整数として比較し、Rsが小さい場合みRtを1,そうでなければ0にする) [001011][Rs:5][Rt:5][Immed16:16]
戻る SLTU Set on Less Than Unsigned if (uns)Rs < (uns)Immed Rd = 1 else Rd = 0
戻る SRA Shift Right Arithmetic Rd = (int)Rt >> sa
戻る SRAV Shift Right Arithmetic Variable Rd = (int)Rt >> Rs[4:0>
戻る SRL Shift Right Logical Rd = (uns)Rt >> sa
戻る SRLV Shift Right Logical Variable Rd = (uns)Rt >> Rs[4:0>
戻る SSNOP Superscalar Inhibit No Operation NOP
戻る SUB Rd, Rs, RtRd = (int)Rs - (int)Rt Integer Subtract (レジスタ間の減算 オーバーフローで例外が発生) [000000][Rs:5][Rt:5][Rd:5][00000][100010]( )
戻る SUBU Rd, Rs, RtRd = (uns)Rs - (uns)Rt Unsigned Subtract(レジスタ間の減算  オーバーフローでも例外が発生しない) [000000][Rs:5][Rt:5][Rd:5][00000][100011]
戻る SW Rt, offset16(Rs) Mem32(Rs + offset16) = Rt Store Word (符号拡張した offset16とRsレジスタの加算値のアドレスが指し示すメモリワード領域へRt内容を格納する) [101011][Rs:5][Rt:5][offset16:16]
戻る SWL Store Word Left See Architecture Reference Manual
戻る SWR Store Word Right See Architecture Reference Manual
戻る SYNC Synchronize See Software User’s Manual
戻る SYSCALL System Call SystemCallException
戻る TEQ Trap if Equal if Rs == Rt TrapException
戻る TEQI Trap if Equal Immediate if Rs == (int)Immed TrapException
戻る TGE Trap if Greater Than or Equal if (int)Rs >= (int)Rt TrapException
戻る TGEI Trap if Greater Than or Equal Immediate if (int)Rs >= (int)Immed TrapException
戻る TGEIU Trap if Greater Than or Equal Immediate Unsigned if (uns)Rs >= (uns)Immed TrapException
戻る TGEU Trap if Greater Than or Equal Unsigned if (uns)Rs >= (uns)Rt TrapException
戻る TLT Trap if Less Than if (int)Rs < (int)Rt TrapException
戻る TLTI Trap if Less Than Immediate if (int)Rs < (int)Immed TrapException
戻る TLTIU Trap if Less Than Immediate Unsigned if (uns)Rs < (uns)Immed TrapException
戻る TLTU Trap if Less Than Unsigned if (uns)Rs < (uns)Rt TrapException
戻る TNE Trap if Not Equal if Rs != Rt TrapException
戻る TNEI Trap if Not Equal Immediate if Rs != (int)Immed TrapException
戻る WAIT Wait for Interrupts Stall until interrupt occurs
戻る WRPGPR Write to GPR in Previous Shadow Set SGPR[SRSCtlPSS , Rd> = Rt
戻る WSBH Word Swap Bytes Within Halfwords Rd = Rt23..16 || Rt31..24 || Rt7..0 || Rt15..8
戻る XOR Rd,Rs,RtRd = Rs XOR Rt Logical XOR ( レジスタ Rs と Rt の内容のビットごとの XOR演算結果をレジスタRd に格納する.) [000000][Rs:5][Rt:5][Rd:5][00000][100110]
戻る XORI Rt, Rs, immediate16Rt = Rs XOR immediate16 Logical XOR Immediate ( 16bitイミーディエトを符号拡張値とレジスタRsをビットXORした結果をレジスタRtに格納) [001110][Rs:5][Rt:5][immediate16:16]
戻る ZEB Zero-extend byte (MIPS16e? only) Rt = (ubyte) Rs
戻る ZEH Zero-extend half (MIPS16e only) Rt = (uhalf) Rs


















MIPS32に置き換える仮想命令
慣例的な表現MIPS32命令表現概要
戻る li Rt, value16ADDIU Rt, zero, value16 load immediate value(Rdレジスタにvalue16の値を設定する。)
戻る beqz Rs, offset16 BEQ Rs, zero, offset16 Branch on Equal to Zero(Rsが0で分岐。offset16はラベル指定「相対アドレス」)
戻る bnez Rs, offset16BNE Rs,$0,offset16 Branch on Not Equal to Zero(Rsが0でなければ分岐。offset16はラベル指定「相対アドレス」)
戻る bnezl Rs, offset16BNEL Rs,$0,offset16 Branch on Not Equal to Zero 「Branch Likely 命令」(offset16はラベル指定(相対アドレス))
戻る move Rd, Rs ADDU Rd,Rs,zero MOVE Rs to Rd (Rdレジスタに、Rsレジスタ内容を設定する処理です。)





















戻る
汎用レジスタの割り当て(0から31の各レジスタは、$0〜$31の表現でも可能)
0 zero Always equal to zero(常に0)
1 at Assembler temporary; used by the assembler(アセンブラのテンポラリレジスタ)
2-3 v0-v1 Return value from a function call(関数の戻り値)
4-7 a0-a3 First four parameters for a function call(関数への引数)
8-15 t0-t7 Temporary variables; need not be preserved(テンポラリレジスタ.関数呼び出しで破壊)
16-23 s0-s7 Function variables; must be preserved(関数呼び出しで不変なレジスタ)
24-25 t8-t9 Two more temporary variables(テンポラリレジスタ.関数呼び出しで破壊)
26-27 k0-k1 Kernel use registers; may change unexpectedly(OS用に予約済み)
28 gp Global pointer(大域変数領域のベースアドレス)
29 sp スタックポインタ. 実行時にスタックはアドレスの高い方から低い方へ進みます。 スタック上で次に空いている位置を指します。
30 fp/s8 Stack frame pointer or subroutine variable(s0-s7と同様で必要ならフレームポインタ)
31 ra Return address of the last subroutine call(関数から戻る場合のアドレス)
戻る










戻る
特殊機能レジスタ(Special Function Registers)の一部、『PORTA REGISTER MAP』など
レジスタ名アドレス機能概要備考
PORTB 0xbf88 6120代入や参照レジスタSW2はは0x0080の位置
PORTBCLR 0xbf88 6124代入でPORTBの指定ビットを0にする。対応出力端子をLowにする機能のレジスタLEDのD1は0x8000
PORTBSET 0xbf88 6128代入でPORTBの指定ビットを1にする。対応出力端子をHiにする機能のレジスタLEDのD1は0x8000
T4CON 0xbf88 0C00TYPE B TIMER4 CONTROL REGISTERDS60001168K-page 152参照
TMR40xbf88 0C10タイマの初期値
PR40xbf88 0C20タイマー周期設定
IFS00xbf88 1030Clear interrupt status flag(ビット位置で割り込み対象を指定)
0bit:CT,1bit:CS0,2bit:CS1,・・bit19:T4,・・・bit30:RTCC,bit31:FCE
DS60001168K-page 68参照
IEC00xbf88 1060interrupt enable flag(ビット位置で割込み許可割対象を指定)
0bit:CT,1bit:CS0,2bit:CS1,・・bit19:T4,・・・bit30:RTCC,bit31:FCE
DS60001168K-page 68参照
IFS10xbf88 1040Clear interrupt status flag(ビット位置で割り込み対象を指定)
0bit:CMP1,1bit:CMP2,2bit:CMP3,・・・・・bit31:DMA3
DS60001168K-page 68参照
IEC10xbf88 1070interrupt enable flag(ビット位置で割込み許可割対象を指定)
0bit:CMP1,1bit:CMP2,2bit:CMP3,・・・・・bit31:DMA3
DS60001168K-page 68参照















戻る
UMEHOSHI ITA マクロ(API)のアドレス 『hex(0xA0004000+マクロの添え字*4)で計算できます』
C言語マクロ表現アドレス機能概要
_switch2_state() 0xa000 401cSW2の状態を調べるマクロで押されている状態が1、そうでないなら0(添え字:7)
_send_string(s) 0xa000 41a4sの文字列を接続(USB)相手に送信する。
_nvm_erase_page(adr) 0xa000 40f0adr番地のEEPROMの1ページ(1024byte)を0xFFに初期化する。
_nvm_write_word(adr,word) 0xa000 40f4adr番地のEEPROMの1ワードにwordを記憶する。
_HANDLES[_IDX_TIMER_4_FUNC]0xa000 4094TIMER_4割り込み関数を変更登録の対象(添え字:37)
_HANDLES[_IDX_HANDLE_USER_SET_FUNC]0xa000 40c0 IOなどの初期化の起動前に呼び出す関数の記憶要素(添え字:48)
_HANDLES[_IDX_INIT_SUB_FUNC]0xa000 40c8 IOなどの初期化の起動後に呼び出す関数の記憶要素(添え字:50)
戻る 終端