A86 (software): Difference between revisions
GreenC bot (talk | contribs) |
copyediting |
||
(45 intermediate revisions by 15 users not shown) | |||
Line 1: | Line 1: | ||
{{Short description|Assembler and debugger for MS-DOS}} |
|||
{{Redirect|A386|the A road in England|A386 road ( |
{{Redirect|A386|the A road in England|A386 road (England)}} |
||
{{Infobox software |
{{Infobox software |
||
| name = A86 |
| name = A86 |
||
Line 6: | Line 7: | ||
| developer = Eric Isaacson |
| developer = Eric Isaacson |
||
| latest release version = 4.05 |
| latest release version = 4.05 |
||
| latest release date = |
| latest release date = 14 January 2000 |
||
| operating system = [[DOS]] |
| operating system = [[MS-DOS]] |
||
| platform = [[x86]] |
| platform = [[x86]] |
||
| genre = [[Assembly language#Assembler|Assembler]] |
| genre = [[Assembly language#Assembler|Assembler]] |
||
Line 13: | Line 14: | ||
| website = {{URL|eji.com/a86}} |
| website = {{URL|eji.com/a86}} |
||
}} |
}} |
||
'''A86''' is computer [[software]], a compact commercial [[Assembly language#Assembler|assembler]] developed for the [[Intel]] [[x86]] family of [[microprocessor]]s by Eric Isaacson, and sold initially as [[shareware]] in the 1980s. The assembler is contained in one 32 K executable and can directly produce a [[DOS]] compatible [[COM file]] or an [[object file]] for use with a standard linker. ''A86'' uses a slightly simpler [[Syntax of programming languages|syntax]] for source code and requires no extensive use of directives as do contemporaries such as the [[Microsoft Macro Assembler]] (MASM). Isaacson claims that ''A86'' can assemble 100,000 lines of source per second on a [[Pentium II]] or better.<ref>{{cite web|last1=Isaacson|first1=Eric|title=A86/A386 and D86/D386 features|url=http://eji.com/a86/features.htm#FeaturesA86|date=2006}}</ref> It comes with a [[debugger]], ''D86''.<ref name="A86">{{cite web|url=http://eji.com/a86/|title=A86/A386 assembler and D86/D386 debugger|year=2008|accessdate=2008-07-02|first1=Eric|last1=Isaacson| archiveurl= https://web.archive.org/web/20080702100913/http://eji.com/a86/| archivedate= 2 July 2008 <!--DASHBot-->| deadurl= no}}</ref><ref name="WhichAsm">{{cite web|url=http://webster.cs.ucr.edu/AsmTools/WhichAsm.html|title=Which Assembler is the Best?|accessdate=2008-05-18|author=Randall Hyde| archiveurl= https://web.archive.org/web/20080515212630/http://webster.cs.ucr.edu/AsmTools/WhichAsm.html| archivedate= 15 May 2008 <!--DASHBot-->| deadurl= no}}</ref> |
|||
'''A86''' is an [[assembler (computing)|assembler]] for [[MS-DOS]] which generates 16-bit code for the [[Intel]] [[x86]] family of [[microprocessor]]s. 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 (computing)|linker]]. It comes with a [[debugger]], '''D86'''.<ref name="A86">{{cite web|url=http://eji.com/a86/|title=A86/A386 assembler and D86/D386 debugger|year=2008|access-date=2008-07-02|first1=Eric|last1=Isaacson| archive-url= https://web.archive.org/web/20080702100913/http://eji.com/a86/| archive-date= 2 July 2008 | url-status= live}}</ref><ref name="WhichAsm">{{cite web|url=http://webster.cs.ucr.edu/AsmTools/WhichAsm.html |title=Which Assembler is the Best? |access-date=2008-05-18 |author=Randall Hyde |archive-url=https://web.archive.org/web/20080515212630/http://webster.cs.ucr.edu/AsmTools/WhichAsm.html |archive-date=15 May 2008 |url-status=dead }}</ref> 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.<ref>{{cite web|last1=Isaacson|first1=Eric|title=A86/A386 and D86/D386 features|url=http://eji.com/a86/features.htm#FeaturesA86|date=2006}}</ref> Isaacson added [[32-bit]] support in the mid 1990s in the form of '''A386''' and '''D386'''.<ref name="A86"/><ref name="WhichAsm"/> These were not distributed as shareware, but were provided to users who registered A86. |
|||
''A86/D86'' targets [[16-bit]] x86 platforms. Isaacson added 32-bit support in the mid 1990s in the form of ''A386'' and ''D386''.<ref name="A86"/><ref name="WhichAsm"/> These were not distributed as shareware, but were provided to users who registered A86. |
|||
While supporting expected x86 syntax, A86 and A386 do not require [[Directive (programming)|directives]], such as <code>ASSUME</code>, <code>SEGMENT</code>, and <code>PROC</code>, 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 was never ported to [[Microsoft Windows]], but it is possible to use the [[object files]] created by A386 with a Windows linker.<ref>{{cite web|last1=Isaacson|first1=Eric|title=A386 and Win32 Programming|url=http://www.eji.com/a86/aw.htm|date=2006}}</ref> The assembler does not support [[64-bit]] code. |
||
==A86-specific features== |
==A86-specific features== |
||
Any label |
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 {{code|L1}} through {{code|L9}} for normal code and {{code|M1}} through {{code|M9}} in [[Macro (computer science)|macros]]. Branches to local labels are assumed to be backward, but a forward branch can be specified by prefixing the label reference with the greater than symbol (e.g.,{{code|>L2}}). |
||
Numbers starting with a zero are [[hexadecimal]], such as {{code|00FF}}, instead of using a prefix such as "0x" or "$". A trailing "K" indicates [[kibibytes]].<ref>{{cite web |last1=Hague |first1=James |title=Kilobyte Constants, a Simple and Beautiful Idea that Hasn't Caught On |url=https://prog21.dadgum.com/32.html |website=Programming in the 21st Century |date=July 20, 2008}}</ref> {{code|16K}} is the same as 16*1024 or 16384. |
|||
⚫ | |||
There's shorthand for conditionally executing a single instruction. {{code|if z mov ax,bx}} outputs two instructions: a conditional branch followed by the move. |
|||
If {{code|ret}} is specified as the label for a conditional branch, it automatically targets a return instruction within the 8-bit branch range (e.g., {{code|jz ret}}). |
|||
Numbers starting with a zero are hexadecimal, such as <code>00FF</code>, instead of using a custom prefix. |
|||
Macros use a different syntax than contemporaneous assemblers. |
|||
⚫ | |||
==Code fingerprint== |
==Code fingerprint== |
||
The assembler |
The assembler 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 the [[source code]].<ref name="El-Khalil">{{cite book |last1= El-Khalil |first1= Rakan |last2= Keromyti |first2= Angelos D. |year= 2004 |chapter= Hydan: Hiding Information in Program Binaries |chapter-url= http://www.cs.jhu.edu/~rubin/courses/fall04/hydan.pdf |editor= Lopez, Javier |editor2=Qing, Sihan |editor3=Okamoto, Eiji |title= Information and communications security: 6th International Conference, ICICS 2004, Malaga, Spain, October 27–29, 2004 : Proceedings |series= Lecture Notes in Computer Science |volume= 3269 |publisher= [[Springer Science+Business Media|Springer]] |isbn= 3-540-23563-9 |page= 190}}</ref> |
||
==References== |
==References== |
||
Line 38: | Line 46: | ||
[[Category:Debuggers]] |
[[Category:Debuggers]] |
||
[[Category:DOS software]] |
[[Category:DOS software]] |
||
[[Category:Programming tools for Windows]] |
|||
[[Category:Shareware]] |
[[Category:Shareware]] |
||
[[Category:Assembly language software]] |
Latest revision as of 19:01, 31 October 2024
Developer(s) | Eric Isaacson |
---|---|
Stable release | 4.05
/ 14 January 2000 |
Operating system | MS-DOS |
Platform | x86 |
Type | Assembler |
License | Proprietary |
Website | eji |
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.[1][2] 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.[3] Isaacson added 32-bit support in the mid 1990s in the form of A386 and D386.[1][2] These were not distributed as shareware, but were provided to users who registered A86.
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 was never ported to Microsoft Windows, but it is possible to use the object files created by A386 with a Windows linker.[4] The assembler does not support 64-bit code.
A86-specific features
[edit]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 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.[5] 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 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.
Code fingerprint
[edit]The assembler 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 the source code.[6]
References
[edit]- ^ a b Isaacson, Eric (2008). "A86/A386 assembler and D86/D386 debugger". Archived from the original on 2 July 2008. Retrieved 2008-07-02.
- ^ a b Randall Hyde. "Which Assembler is the Best?". Archived from the original on 15 May 2008. Retrieved 2008-05-18.
- ^ Isaacson, Eric (2006). "A86/A386 and D86/D386 features".
- ^ Isaacson, Eric (2006). "A386 and Win32 Programming".
- ^ Hague, James (July 20, 2008). "Kilobyte Constants, a Simple and Beautiful Idea that Hasn't Caught On". Programming in the 21st Century.
- ^ El-Khalil, Rakan; Keromyti, Angelos D. (2004). "Hydan: Hiding Information in Program Binaries" (PDF). In Lopez, Javier; Qing, Sihan; Okamoto, Eiji (eds.). Information and communications security: 6th International Conference, ICICS 2004, Malaga, Spain, October 27–29, 2004 : Proceedings. Lecture Notes in Computer Science. Vol. 3269. Springer. p. 190. ISBN 3-540-23563-9.