dbo:abstract |
In computer programming, a branch table or jump table is a method of transferring program control (branching) to another part of a program (or a different program that may have been dynamically loaded) using a table of branch or jump instructions. It is a form of multiway branch. The branch table construction is commonly used when programming in assembly language but may also be generated by compilers, especially when implementing optimized switch statements whose values are densely packed together. (en) Eine Sprungtabelle (auch Verzweigungstabelle oder Sprungleiste genannt; englisch jump table) ist in der Programmierung eine Methode, bei der eine Verzweigung des Programmflusses durch eine Tabelle von Sprunganweisungen realisiert wird. (de) En programación, se denomina tabla de saltos a un método eficiente de transferencia de control de programas saltando a otra parte del código mediante una tabla de instrucciones de salto. Este sistema es utilizado normalmente en la programación en ensamblador aunque estas tablas también pueden ser generadas por un compilador. Una tabla de saltos consiste en una lista de instrucciones de que se ejecutan utilizando un offset creado mediante la multiplicación de un índice secuencial por la longitud de la instrucción (los bytes que ocupa en memoria cada instrucción). Se basa en el hecho de que las instrucciones de salto en código máquina tienen una longitud fija y pueden ser ejecutadas de forma extremadamente eficiente por la mayoría del hardware, además de ser más útil cuando se trabaja con datos sin formato fácilmente convertibles a valores secuenciales de índice. Dados estos datos, una tabla de saltos suele ser bastante eficiente, siguiendo normalmente estos pasos: opcional de los datos de entrada, transformación de los mismos en un offset dentro de la tabla de saltos (esto suele necesitar multiplicarlos o desplazarlos para su longitud coincida con las instrucciones de salto) y salto a una dirección obtenida a partir de la base de la tabla y el offset generado (esta operación suele incluir la suma del offset al registro del contador de programa). Otro método de implementación de las tablas de saltos consiste en un array de direcciones desde las cuales es capturada la dirección necesaria para saltar. Este método suele implicar un menor tamaño del código y evita los saltos indirectos. Normalmente el método empleado para construir la tabla de saltos suele venir determinada por la arquitectura del procesador en el cual va a ser ejecutado el código. Las tablas de saltos suelen usarse en el desarrollo de sistemas operativos. Tanto las llamadas al sistema como las funciones de biblioteca pueden ser referenciadas mediante un índice entero de una tabla de saltos. Con esto se consigue una mejora de la compatibilidad con las versiones siguientes: si el código de una función y la dirección de su destino de salto son modificados, solamente hará falta reajustar la instrucción de salto en la tabla, de este modo todas las aplicaciones compiladas utilizando código de la biblioteca y/o sistema operativo en cuestión no necesitan modificación alguna. Además, las llamadas a funciones por su número (el índice en la tabla) pueden ser útiles en ciertos programas. (es) 컴퓨터 프로그래밍에서 분기 테이블(branch table) 또는 점프 테이블(jump table)은 분기나 점프 명령어들을 이용해서, 프로그램의 제어를 프로그램의 다른 부분으로 옮기는 방법이다. 이것은 의 형태이다. 분기 테이블 구조는 주로 Switch 문을 구현하는, 컴파일러에 의해 생성된 어셈블리어 프로그램에 사용된다. (ko) テーブルジャンプは計算機プログラムの制御方式の一つである。テーブルジャンプに使用するテーブルをジャンプテーブルと呼ぶ。 ジャンプ命令を実行する際、ジャンプ先の番地(アドレス)を予め表の形でメモリに記憶させておき、それを参照してジャンプする方式。自己書き換えなどのテクニックと併用して使われる。複数の分岐先がある場合でも、短時間でジャンプが可能となる。 高級言語にもジャンプテーブルによる実装を考慮したものがあった。Pascalのcase文が変数に順序型のみを許容しているのが一例である。 Unix系オペレーティングシステムのダイナミックリンクライブラリは、ロードされるアドレスが固定されていない。このため一種のテーブルジャンプでライブラリ内のサブルーチンにジャンプするようになっている。実行プログラムをロードした当初、そのジャンプテーブルは全てローダー (loader) にジャンプするように設定されている。ローダーはジャンプに使用されたテーブルのエントリに対応するライブラリルーチンにジャンプするのだが、その際にジャンプテーブル自身を書き換えて次回のコールからは直接ライブラリルーチンにジャンプするように変更する。 カーネルモードで実行されるデバイスドライバやファイルシステムもテーブルジャンプを使用してカーネル本体とのインターフェイスを実装していることが多い。open、close、read、writeといったシステムコールの処理は最終的に個別のドライバやファイルシステムのコードを呼び出す。しかし、いずれも種類が豊富であるし、カーネルにリンクして構成されない場合もあるため、直接呼び出すことはできず、テーブルジャンプで呼び出すようになっている。例えば、Unix系では仮想ファイルシステムが個別のファイルシステムのサブルーチンを登録するジャンプテーブルを管理する。ただし、この種の実装では単なる配列にアドレスを登録するのではなく、ドライバやファイルシステムの管理データ構造にジャンプテーブルが格納されている。従って、これはオブジェクト指向でいうカプセル化やポリモーフィズムに近い。 (ja) |
dbo:wikiPageExternalLink |
http://www.rmbconsulting.us/Publications/PointerToFunction.pdf http://en.wikibooks.org/wiki/360_Assembly/Branch_Instructions http://www.eventhelix.com/realtimemantra/Basics/CToAssemblyTranslation2.htm http://www.eventhelix.com/realtimemantra/Basics/CToAssemblyTranslation3.htm https://web.archive.org/web/20120212110151/http:/www.netrino.com/node/137 |
dbo:wikiPageID |
6894800 (xsd:integer) |
dbo:wikiPageLength |
15906 (xsd:nonNegativeInteger) |
dbo:wikiPageRevisionID |
1113038318 (xsd:integer) |
dbo:wikiPageWikiLink |
dbr:Processor_register dbr:Entry_point dbr:Multiple_(mathematics) dbr:Bit_shift dbr:Algorithmic_efficiency dbc:Computer_performance dbr:Indirect_branch dbr:Indirection dbr:Compiler dbr:Offset_(computer_science) dbr:Branch_(computer_science) dbr:Control_table dbc:Conditional_constructs dbr:Call_site dbr:Computer_architecture dbr:Computer_data_storage dbr:Computer_programming dbr:Embedded_system dbr:Function_pointer dbr:Pointer_(computer_programming) dbr:Program_counter dbr:C++ dbr:C_(programming_language) dbr:Data_compression dbr:Data_validation dbr:Wikibooks dbr:Dispatch_table dbr:Just-in-time_compilation dbr:Late_binding dbr:ASCII dbr:Addition dbr:PIC_microcontroller dbr:PL/I dbr:Machine_code dbr:Hash_table dbc:Control_flow dbr:Interrupt dbr:Array_data_structure dbr:Assembly_language dbc:Articles_with_example_C_code dbr:Code dbr:Threaded_code dbr:IBM_S/360 dbr:IBM/360 dbr:Instruction_(computer_science) dbr:Instruction_set dbr:Integer dbr:Operating_system dbr:Optimizing_compiler dbr:CPU dbr:System_call dbr:Lookup_table dbr:Loop_unrolling dbr:Virtual_method_table dbr:Computed_goto dbr:Library_(computer_science) dbr:Multiway_branch dbr:Switch_statement dbr:Sequential dbr:Raw_data dbr:Function_(computing) dbr:Program_flow dbr:Binary_chop dbr:Memory_(computers) dbr:Trivial_hash_function dbr:Unconditional_branch |
dbp:wikiPageUsesTemplate |
dbt:Commonscat dbt:Original_research dbt:Reflist dbt:Short_description |
dct:subject |
dbc:Computer_performance dbc:Conditional_constructs dbc:Control_flow dbc:Articles_with_example_C_code |
gold:hypernym |
dbr:Method |
rdf:type |
dbo:Software yago:WikicatConditionalConstructs yago:Abstraction100002137 yago:Cognition100023271 yago:Concept105835747 yago:Content105809192 yago:Idea105833840 yago:PsychologicalFeature100023100 yago:WikicatProgrammingConstructs |
rdfs:comment |
In computer programming, a branch table or jump table is a method of transferring program control (branching) to another part of a program (or a different program that may have been dynamically loaded) using a table of branch or jump instructions. It is a form of multiway branch. The branch table construction is commonly used when programming in assembly language but may also be generated by compilers, especially when implementing optimized switch statements whose values are densely packed together. (en) Eine Sprungtabelle (auch Verzweigungstabelle oder Sprungleiste genannt; englisch jump table) ist in der Programmierung eine Methode, bei der eine Verzweigung des Programmflusses durch eine Tabelle von Sprunganweisungen realisiert wird. (de) 컴퓨터 프로그래밍에서 분기 테이블(branch table) 또는 점프 테이블(jump table)은 분기나 점프 명령어들을 이용해서, 프로그램의 제어를 프로그램의 다른 부분으로 옮기는 방법이다. 이것은 의 형태이다. 분기 테이블 구조는 주로 Switch 문을 구현하는, 컴파일러에 의해 생성된 어셈블리어 프로그램에 사용된다. (ko) En programación, se denomina tabla de saltos a un método eficiente de transferencia de control de programas saltando a otra parte del código mediante una tabla de instrucciones de salto. Este sistema es utilizado normalmente en la programación en ensamblador aunque estas tablas también pueden ser generadas por un compilador. (es) テーブルジャンプは計算機プログラムの制御方式の一つである。テーブルジャンプに使用するテーブルをジャンプテーブルと呼ぶ。 ジャンプ命令を実行する際、ジャンプ先の番地(アドレス)を予め表の形でメモリに記憶させておき、それを参照してジャンプする方式。自己書き換えなどのテクニックと併用して使われる。複数の分岐先がある場合でも、短時間でジャンプが可能となる。 高級言語にもジャンプテーブルによる実装を考慮したものがあった。Pascalのcase文が変数に順序型のみを許容しているのが一例である。 Unix系オペレーティングシステムのダイナミックリンクライブラリは、ロードされるアドレスが固定されていない。このため一種のテーブルジャンプでライブラリ内のサブルーチンにジャンプするようになっている。実行プログラムをロードした当初、そのジャンプテーブルは全てローダー (loader) にジャンプするように設定されている。ローダーはジャンプに使用されたテーブルのエントリに対応するライブラリルーチンにジャンプするのだが、その際にジャンプテーブル自身を書き換えて次回のコールからは直接ライブラリルーチンにジャンプするように変更する。 (ja) |
rdfs:label |
Sprungtabelle (de) Branch table (en) Tabla de saltos (es) 분기 테이블 (ko) テーブルジャンプ (ja) |
owl:sameAs |
freebase:Branch table yago-res:Branch table wikidata:Branch table dbpedia-de:Branch table dbpedia-es:Branch table dbpedia-ja:Branch table dbpedia-ko:Branch table https://global.dbpedia.org/id/4b7ux |
prov:wasDerivedFrom |
wikipedia-en:Branch_table?oldid=1113038318&ns=0 |
foaf:isPrimaryTopicOf |
wikipedia-en:Branch_table |
is dbo:wikiPageDisambiguates of |
dbr:Branch_(disambiguation) |
is dbo:wikiPageRedirects of |
dbr:Transfer_vector dbr:Jump_table |
is dbo:wikiPageWikiLink of |
dbr:Branch_(disambiguation) dbr:Algorithmic_efficiency dbr:Duff's_device dbr:Indirect_branch dbr:Function_(computer_programming) dbr:Branch_(computer_science) dbr:Motorola_68000 dbr:Control_table dbr:Transfer_vector dbr:LuaJIT dbr:Board_representation_(computer_chess) dbr:Call_site dbr:WDC_65C02 dbr:Dispatch_table dbr:KERNAL dbr:Procedural_programming dbr:Jump_table dbr:TI_MSP430 dbr:Thunk dbr:Threaded_code dbr:Name_binding dbr:Lookup_table dbr:Loop_unrolling dbr:Virtual_method_table dbr:Multiple_dispatch dbr:Multiway_branch dbr:Switch_statement |
is rdfs:seeAlso of |
dbr:Goto |
is foaf:primaryTopic of |
wikipedia-en:Branch_table |