Misplaced Pages

A86 (software)

Article snapshot taken from Wikipedia with creative commons attribution-sharealike license. Give it a read and then ask your questions in the chat. We can research this topic together.

A86 is an assembler for MS-DOS which generates 16-bit code for the Intel x86 family of microprocessors . Written by Eric Isaacson, it released as shareware in June 1986. The assembler is contained in one 32K executable and can directly produce a COM file or an object file for use with a standard linker . It comes with a debugger , D86 . Speed of assembly is a primary selling point, and Isaacson claimed that A86 could assemble 100,000 lines of source per second on a Pentium II or better. Isaacson added 32-bit support in the mid 1990s in the form of A386 and D386 . These were not distributed as shareware, but were provided to users who registered A86.

#881118

20-413: While supporting expected x86 syntax, A86 and A386 do not require directives , such as ASSUME , SEGMENT , and PROC , which Microsoft Macro Assembler and other contemporaries rely on. A86 and A386 have a custom syntax for macros and local labels which is incompatible with other assemblers. There are also a variety of syntactical tweaks allowing more concise source code. The A86 family of products

40-406: A preprocessor to specify compiler behavior, or function as a form of in-band parameterization. In some cases directives specify global behavior, while in other cases they only affect a local section, such as a block of programming code. In some cases, such as some C programs, directives are optional compiler hints and may be ignored, but normally they are prescriptive and must be followed. However,

60-408: A directive does not perform any action in the language itself, but rather only a change in the behavior of the compiler. This term could be used to refer to proprietary third-party tags and commands (or markup) embedded in code that result in additional executable processing that extend the existing compiler, assembler and language constructs present in the development environment. The term "directive"

80-439: A forward branch can be specified by prefixing the label reference with the greater than symbol (e.g., >L2 ). Numbers starting with a zero are hexadecimal , such as 00FF , instead of using a prefix such as "0x" or "$ ". A trailing "K" indicates kibibytes . 16K is the same as 16*1024 or 16384. Multiple registers can be pushed or popped on the same source line. push eax, edx, ebp generates one instruction for each of

100-587: A hash symbol (#) with the exception of the import and module directives in C++ . Directives date to JOVIAL . COBOL Had a COPY directive. In ALGOL 68 , directives are known as pragmats (from "pragmatic"), and denoted pragmat or pr ; in newer languages, notably C, this has been abbreviated to "pragma" (no 't'). A common use of pragmats in ALGOL 68 is in specifying a stropping regime, meaning "how keywords are indicated". Various such directives follow, specifying

120-751: Is mission critical , and maintenance is growing more difficult. In December 2014, it was reported that software derived from JOVIAL code produced in the 1960s was involved in a major failure of the United Kingdom 's air traffic control infrastructure, and that the agency that uses it, NATS Holdings , was having to train its IT staff in JOVIAL so they could maintain this software, which was not scheduled for replacement until 2016. Languages influenced by JOVIAL include CORAL , SYMPL , Space Programming Language (SPL), and to some extent CMS-2 . An interactive subset of JOVIAL called TINT, similar to JOSS

140-537: Is also applied in a variety of ways that are similar to the term command . In C and C++ , the language supports a simple macro preprocessor . Source lines that should be handled by the preprocessor, such as #define and #include are referred to as preprocessor directives . Syntactic constructs similar to C's preprocessor directives, such as C# 's #if , are also typically called "directives", although in these cases there may not be any real preprocessing phase involved. All preprocessor commands begin with

160-407: The source code . Directive (programming) In computer programming , a directive or pragma (from "pragmatic") is a language construct that specifies how a compiler (or other translator ) should process its input. Depending on the programming language , directives may or may not be part of the grammar of the language and may vary from compiler to compiler. They can be processed by

180-453: The POINT, UPPER, RES (reserved), or quote regimes. Note the use of stropping for the pragmat keyword itself (abbreviated pr ), either in the POINT or quote regimes: Today directives are best known in the C language, of early 1970s vintage, and continued through the current C99 standard, where they are either instructions to the C preprocessor , or, in the form of #pragma , directives to

200-400: The compiler itself. They are also used to some degree in more modern languages; see below. JOVIAL JOVIAL is a high-level programming language based on ALGOL 58 , specialized for developing embedded systems (specialized computer systems designed to perform one or a few dedicated functions, usually embedded as part of a larger, more complete device, including mechanical parts). It

220-778: The equivalent time in the SAGE L-project. During the late 1970s and early 1980s, the United States Air Force adopted a standardized central processing unit (CPU), the MIL-STD-1750A , and subsequent JOVIAL programs were built for that processor. Several commercial vendors provided compilers and related programming tools to build JOVIAL for processors such as the MIL-STD-1750A, including Advanced Computer Techniques (ACT), TLD Systems , Proprietary Software Systems (PSS), and others. JOVIAL

SECTION 10

#1732772514882

240-421: The three operands . There's shorthand for conditionally executing a single instruction. if z mov ax,bx outputs two instructions: a conditional branch followed by the move. If ret is specified as the label for a conditional branch, it automatically targets a return instruction within the 8-bit branch range (e.g., jz ret ). Macros use a different syntax than contemporaneous assemblers. The assembler

260-534: Was a major system programming language through the 1960s and 1970s. JOVIAL was developed as a new "high-order" programming language starting in 1959 by a team at System Development Corporation (SDC) headed by Jules Schwartz to compose software for the electronics of military aircraft. The name JOVIAL is an acronym for Jules' Own Version of the International Algebraic Language ; International Algorithmic Language (IAL)

280-400: Was a name proposed originally for ALGOL 58 . According to Schwartz, the language was originally called OVIAL , but this was opposed for various reasons. JOVIAL was then suggested, with no meaning attached to the J . Somewhat jokingly it was suggested that the language be named after Schwartz, since he was the meeting chairperson , and this unofficial name stuck. During the 1960s, JOVIAL

300-761: Was a part of the US Military L-project series, particularly the ITT 465L Strategic Air Command Control System (the Strategic Automated Command and Control System (SACCS) project), due to a lack of real-time computing programming languages available. Some 95 percent of the SACCS project, managed by International Telephone & Telegraph (ITT) with software mainly written by SDC, was written in JOVIAL. The software project took two years and fewer than 1,400 programmer years, less than half of

320-416: Was designed to use particular instruction encodings which are functionally equivalent, but together create a fingerprint that's embedded in the executable file . This is mentioned in the legal terms section of the manual. The fingerprint makes it possible to tell if code was assembled with A86 and also to distinguish between registered and unregistered versions of the assembler. This analysis requires access to

340-401: Was developed in the 1960s. JOVIAL includes features not found in standard ALGOL, such as items (now called structures ), arrays of items, status variables (now called enumerations ) and inline assembly language . It also included provisions for "packed" data within tables. Table packing refers to the allocation of items within an entry to words of storage (bits in a unit of data). This

360-459: Was important with respect to the limited memory and storage of the computing systems of the JOVIAL era. The Communication Pool (COMPOOL) in Jovial is similar to libraries of header files for languages such as PL/I and C. Notable systems using embedded JOVIAL software include: The following example is taken from Computer Programming Manual for the JOVIAL (J73) Language. This example defines

380-483: Was never ported to Microsoft Windows , but it is possible to use the object files created by A386 with a Windows linker. The assembler does not support 64-bit code. Any label consisting of one letter followed by one or more digits is local and can be redefined as needed, with each definition replacing the prior. The manual recommends using L1 through L9 for normal code and M1 through M9 in macros . Branches to local labels are assumed to be backward, but

400-1035: Was standardized during 1973 with MIL-STD-1589 and was revised during 1984 with MIL-STD-1589C . It is still used to update and maintain software on older military vehicles and aircraft. There are three dialects in common use: J3, J3B-2, and J73. As of 2010 , JOVIAL is no longer maintained and distributed by the USAF JOVIAL Program Office (JPO). Software formerly distributed by the JPO is still available through commercial resources at Software Engineering Associates, Inc., (SEA) as are other combinations of host/target processors including Windows , Linux , Mac OS X on PowerPC , SPARC , VAX , 1750A , PowerPC , TI-9989 , Zilog Z800x , Motorola 680x0 , and IBM System 360 , System 370 , and System z . Further, DDC-I , which acquired parts of Advanced Computer Techniques, also lists JOVIAL compilers and related tools as of April 2020 . Most software implemented in JOVIAL

#881118