Open main menu
Home
Random
Recent changes
Special pages
Community portal
Preferences
About Wikipedia
Disclaimers
Incubator escapee wiki
Search
User menu
Talk
Dark mode
Contributions
Create account
Log in
Editing
Zilog Z80
(section)
Warning:
You are not logged in. Your IP address will be publicly visible if you make any edits. If you
log in
or
create an account
, your edits will be attributed to your username, along with other benefits.
Anti-spam check. Do
not
fill this in!
==== Datapoint 2200 and Intel 8008 ==== The first Intel 8008 [[assembly language]] was based on a simple (but systematic) syntax inherited from the Datapoint 2200 design. This original syntax was later transformed into a new, somewhat more traditional, assembly language form for this same original 8008 chip. At about the same time, the new assembly language was also extended to accommodate the additional addressing modes in the more advanced Intel 8080 chip (the 8008 and 8080 shared a language subset without being [[binary-code compatibility|binary compatible]]; however, the 8008 was binary compatible with the Datapoint 2200). In this process, the mnemonic <code>L</code>, for ''LOAD'', was replaced by various abbreviations of the words ''LOAD'', ''STORE'' and ''MOVE'', intermixed with other symbolic letters. The mnemonic letter <code>M</code>, for ''memory'' (referenced by HL), was lifted out from within the instruction mnemonic to become a syntactically freestanding ''operand'', while registers and combinations of registers became inconsistently denoted; either by abbreviated operands (MVI D, LXI H and so on), within the instruction mnemonic itself (LDA, LHLD and so on), or both at the same time (LDAX B, STAX D and so on). {| class="wikitable" |- ! Intel 8008<br />Datapoint 2200 ! Intel 8080<br />Intel 8085 ! Zilog Z80 ! Intel 8086/<br />Intel 8088 |- ! <small>before ca. 1973</small> ! <small>ca. 1974</small> ! <small>1976</small> ! <small>1978</small> |- | <syntaxhighlight lang="nasm" inline>LBC</syntaxhighlight> | <syntaxhighlight lang="nasm" inline>MOV B,C</syntaxhighlight> | <syntaxhighlight lang="nasm" inline>LD B,C</syntaxhighlight> | <syntaxhighlight lang="nasm" inline>MOV CH,CL</syntaxhighlight> |- | <syntaxhighlight lang="nasm" inline>--</syntaxhighlight> | <syntaxhighlight lang="nasm" inline>LDAX B</syntaxhighlight> | <syntaxhighlight lang="nasm" inline>LD A,(BC)</syntaxhighlight> | <syntaxhighlight lang="nasm" inline>--</syntaxhighlight> |- | <syntaxhighlight lang="nasm" inline>LAM</syntaxhighlight> | <syntaxhighlight lang="nasm" inline>MOV A,M</syntaxhighlight> | <syntaxhighlight lang="nasm" inline>LD A,(HL)</syntaxhighlight> | <syntaxhighlight lang="nasm" inline>MOV AL,[BX]</syntaxhighlight> |- | <syntaxhighlight lang="nasm" inline>LBM</syntaxhighlight> | <syntaxhighlight lang="nasm" inline>MOV B,M</syntaxhighlight> | <syntaxhighlight lang="nasm" inline>LD B,(HL)</syntaxhighlight> | <syntaxhighlight lang="nasm" inline>MOV CH,[BX]</syntaxhighlight> |- | <syntaxhighlight lang="nasm" inline>--</syntaxhighlight> | <syntaxhighlight lang="nasm" inline>STAX D</syntaxhighlight> | <syntaxhighlight lang="nasm" inline>LD (DE),A</syntaxhighlight> | <syntaxhighlight lang="nasm" inline>--</syntaxhighlight> |- | <syntaxhighlight lang="nasm" inline>LMA</syntaxhighlight> | <syntaxhighlight lang="nasm" inline>MOV M,A</syntaxhighlight> | <syntaxhighlight lang="nasm" inline>LD (HL),A</syntaxhighlight> | <syntaxhighlight lang="nasm" inline>MOV [BX],AL</syntaxhighlight> |- | <syntaxhighlight lang="nasm" inline>LMC</syntaxhighlight> | <syntaxhighlight lang="nasm" inline>MOV M,C</syntaxhighlight> | <syntaxhighlight lang="nasm" inline>LD (HL),C</syntaxhighlight> | <syntaxhighlight lang="nasm" inline>MOV [BX],CL</syntaxhighlight> |- | <syntaxhighlight lang="nasm" inline>LDI 56</syntaxhighlight> | <syntaxhighlight lang="nasm" inline>MVI D,56</syntaxhighlight> | <syntaxhighlight lang="nasm" inline>LD D,56</syntaxhighlight> | <syntaxhighlight lang="nasm" inline>MOV DL,56</syntaxhighlight> |- | <syntaxhighlight lang="nasm" inline>LMI 56</syntaxhighlight>{{efn|Load memory immediate not available on Datapoint 2200.}} | <syntaxhighlight lang="nasm" inline>MVI M,56</syntaxhighlight> | <syntaxhighlight lang="nasm" inline>LD (HL),56</syntaxhighlight> | <syntaxhighlight lang="nasm" inline>MOV byte ptr [BX],56</syntaxhighlight> |- | <syntaxhighlight lang="nasm" inline>--</syntaxhighlight> | <syntaxhighlight lang="nasm" inline>LDA 1234</syntaxhighlight> | <syntaxhighlight lang="nasm" inline>LD A,(1234)</syntaxhighlight> | <syntaxhighlight lang="nasm" inline>MOV AL,[1234]</syntaxhighlight> |- | <syntaxhighlight lang="nasm" inline>--</syntaxhighlight> | <syntaxhighlight lang="nasm" inline>STA 1234</syntaxhighlight> | <syntaxhighlight lang="nasm" inline>LD (1234),A</syntaxhighlight> | <syntaxhighlight lang="nasm" inline>MOV [1234],AL</syntaxhighlight> |- | <syntaxhighlight lang="nasm" inline>--</syntaxhighlight> | <syntaxhighlight lang="nasm" inline>--</syntaxhighlight> | <syntaxhighlight lang="nasm" inline>LD B,(IX+56)</syntaxhighlight> | <syntaxhighlight lang="nasm" inline>MOV CH,[SI+56]</syntaxhighlight> |- | <syntaxhighlight lang="nasm" inline>--</syntaxhighlight> | <syntaxhighlight lang="nasm" inline>--</syntaxhighlight> | <syntaxhighlight lang="nasm" inline>LD (IX+56),C</syntaxhighlight> | <syntaxhighlight lang="nasm" inline>MOV [SI+56],CL</syntaxhighlight> |- | <syntaxhighlight lang="nasm" inline>--</syntaxhighlight> | <syntaxhighlight lang="nasm" inline>--</syntaxhighlight> | <syntaxhighlight lang="nasm" inline>LD (IY+56),78</syntaxhighlight> | <syntaxhighlight lang="nasm" inline>MOV byte ptr [DI+56],78</syntaxhighlight> |- | <syntaxhighlight lang="nasm" inline>--</syntaxhighlight> | <syntaxhighlight lang="nasm" inline>LXI B,1234</syntaxhighlight> | <syntaxhighlight lang="nasm" inline>LD BC,1234</syntaxhighlight> | <syntaxhighlight lang="nasm" inline>MOV CX,1234</syntaxhighlight> |- | <syntaxhighlight lang="nasm" inline>--</syntaxhighlight> | <syntaxhighlight lang="nasm" inline>LXI H,1234</syntaxhighlight> | <syntaxhighlight lang="nasm" inline>LD HL,1234</syntaxhighlight> | <syntaxhighlight lang="nasm" inline>MOV BX,1234</syntaxhighlight> |- | <syntaxhighlight lang="nasm" inline>--</syntaxhighlight> | <syntaxhighlight lang="nasm" inline>SHLD 1234</syntaxhighlight> | <syntaxhighlight lang="nasm" inline>LD (1234),HL</syntaxhighlight> | <syntaxhighlight lang="nasm" inline>MOV [1234],BX</syntaxhighlight> |- | <syntaxhighlight lang="nasm" inline>--</syntaxhighlight> | <syntaxhighlight lang="nasm" inline>LHLD 1234</syntaxhighlight> | <syntaxhighlight lang="nasm" inline>LD HL,(1234)</syntaxhighlight> | <syntaxhighlight lang="nasm" inline>MOV BX,[1234]</syntaxhighlight> |- | <syntaxhighlight lang="nasm" inline>--</syntaxhighlight> | <syntaxhighlight lang="nasm" inline>--</syntaxhighlight> | <syntaxhighlight lang="nasm" inline>LD BC,(1234)</syntaxhighlight> | <syntaxhighlight lang="nasm" inline>MOV CX,[1234]</syntaxhighlight> |- | <syntaxhighlight lang="nasm" inline>--</syntaxhighlight> | <syntaxhighlight lang="nasm" inline>--</syntaxhighlight> | <syntaxhighlight lang="nasm" inline>LD IX,(1234)</syntaxhighlight> | <syntaxhighlight lang="nasm" inline>MOV SI,[1234]</syntaxhighlight> |}''Illustration of four syntaxes, using samples of equivalent, or (for 8086) very similar, load and store instructions.<ref name="Durda 2012">{{Cite web |last=Durda IV |first=Frank |date=2012 |title=8080/Z80 Instruction Set |url=http://nemesis.lonestar.org/computers/tandy/software/apps/m4/qd/opcodes.html |url-status=dead |archive-url=https://web.archive.org/web/20160211094642/http://nemesis.lonestar.org/computers/tandy/software/apps/m4/qd/opcodes.html |archive-date=February 11, 2016 |access-date=July 22, 2009}}</ref> The Z80 syntax uses parentheses around an expression to indicate that the value should be used as a memory address (as mentioned below), while the 8086 syntax uses brackets instead of ordinary parentheses for this purpose. Both Z80 and 8086 use the + sign to indicate that a constant is added to a base register to form an address. Note that the 8086 is not a complete superset of the Z80. BX is the only 8086 register pair that can be used as a pointer.''
Edit summary
(Briefly describe your changes)
By publishing changes, you agree to the
Terms of Use
, and you irrevocably agree to release your contribution under the
CC BY-SA 4.0 License
and the
GFDL
. You agree that a hyperlink or URL is sufficient attribution under the Creative Commons license.
Cancel
Editing help
(opens in new window)