Micro #21
08 июля 1999

Tutorial - Programming in machine code and assembly language (part one).

<b>Tutorial</b> - Programming in machine code and assembly language (part one).
          >



         PERSONAL COMPUTER

              "ZX-SPECTRUM"


    Programming in machine code

          and Assembler


               Moscow 1993



  The book is the most accessible edition of Programming in 
machine code for widespread personal

computers "ZX-Spectrum" (system "Sinclair"). In an accessible 
form for beginners consider a system command processor,

describes the built-in calculator, dismantled
numerous examples. The book contains interesting 
recommendations for viewing native proprietary programs. 

  Designed for independent study.



                ACKNOWLEDGEMENTS


  The book you hold in your hands already
gained fame as the most
accessible tutorial for those who want to
overcome the psychological barrier and move from programming in 
BASIC programming in machine code, or simply wants to 
understand the machine code branded programs. The first edition 
of this book we published two years ago, in 1990, and now in 
the country already has thousands of fans household personal 
computers such as ZX_Spectrum (system, "Sinclair"), 
self-mastered the subtleties of computer programming on this 
book. The first edition was published in three volumes. Now we 
have combined all three volumes (tutorial, workshop and 
directory) within a single book, and corrected the number of 
significantly (Approximately 20%) completed the contents.

Major revisions have sections devoted to the description of the 
system interrupt laptop, parsing the concept of streams and 
canals, the concept of assembler directives and issues related 
to standardization of Russification computers. As shown by the 
first experience, these questions need to be strong 
illumination. 

  "Inforkom" continues to work on a book about computers 
Spectrum and compatible with them. At the moment, launched a 
multi-volume publication on working with graphics Spectrum. 
Despite the fact that each of these volumes is an independent 
academic unit and can be used independently from others, 
however, they can be considered a logical extension of this 
edition is least because "the first steps in the native Z-80" 
from natural causes become a basic reference book for our future

developments. "Inforkom" thanks all the readers of the first 
edition, sent their feedback, comments and recommendations, and 
particularly expressed personal gratitude to our correspondents 
Bayanova KN for preparing sections I.5.18, II.4.4.7, III.5 and 
Pashorinu VI for preparing the section II.5.5.


                               "Inforkom.

                      Moscow, August 1992.



                 INTRODUCTION


  Conducted in early 1990 survey of our customers showed their 
keen interest in the development of programming in machine code 
for the Sinclair-compatible computers that have received a our 
country is the most widely among PC-class household.


  Z-80 processor, which assembled on the basis of
computers in this system has gained wide
popularity in the world due to its versatility, the 
availability of a vast system of production and technology 
teams to provide him with large volumes at relatively low price.


  This processor is used not only in
multiple computers that are part
system, "Sinclair Spectrum, but in other computer systems. 
Among them, computers family MSX ("YAMAHA", "SPEKTROVIDEO"

Toshiba, Panasonic, etc.), computers
Systems "Enterprise", "SHARP, many computers the company" 
AMSTRAD ", etc. In principle, material in this book can be used 
by 90% and those who work with computers these systems. 
Currently, CPU Z-80 is very well documented in world 
literature. The most fundamental works for programmers of any 
level are the monograph Lance Leventhal (LANCE A. LEWENTHAL) 
"Programming Assembler Z-80 "(" Z-1980 ASSEMBLY PROGRAMMING "), 
as well as the" Procedures in Assembly Processor Z-80 "(" Z-80 
ASSEMBLY LANGUAGE SUBROUTINES). 

  These are very good books, unfortunately,
very large (on p. 500-600) and translated into Russian, which 
makes doubtful the possibility of their wide distribution here 
in the coming years. 

  Numerous other books overseas
authors devoted to programming for
Sinclair-compatible computers in the machine
code are as weaknesses or
lack of systematic exposition,
or improved guidance of the material. In the first case they are
good assistant guide, and the second - a good tutorial, but for 
those who been prepared in principle. Textbook is

for those who are self begins to understand from the outset, 
they can be very limited. 

  In his book, bring to your attention, we have tried, as have 
managed to combine pop, systematic and informative 
presentation. Those who do not need to learn elementary 
programming in machine code can go directly to the second part 
of the "Workshop ...". Not to duplicate the background material,

which is necessary as those who work with
the first part, and those who work with
second, we took it apart, a third
part.

  We highly recommend reading accompany
this book is an independent code review
proprietary programs with a
disassembliruyuschey programs such as MONITOR 16/48, MONS 3, 
ULTIMON etc. 

  We must also advise you on our
periodical "ZX-REVIEW." On his
pages you can find almost anything
You may be required from the software and
Computer Information Management
system "Sinclair" and something that is associated with
hardware issues.

  We may purchase complete sets of annual "ZX-Review" for 1991 
and for 1992 year, carried out in book form.

Go out and releases of 1993. For the record
indicate that the volume of a complete annual
Kit "ZX-Revue" about 5 times greater than the volume of this 
book. 

  Your suggestions, comments and suggestions
You can send us the address 121019,
Moscow, G-19, PO Box 16. You can always
choose from a list of literature issued by us that you would 
like. 



     I. FIRST STEPS IN native



      1. MOST - THE FIRST STEP ...


  Many fans do not suffer serious
difficulties in learning BASIC. For this
rather relatively little practice.
But sooner or later they will come to the barrier
"Native". It is sad, but
some way in front of him and stopped.
This does not in any way connected with lack of desire or 
ability, just a lot do not know where to start. If in BASIC

You can start with anything (for error
the computer itself to correct you), here you
Processor find yourself with one on one, and
such a trial and error method does not work.
In short, there is a psychological
barrier, which can be difficult to overcome in
alone. It is known that in order to
learn to program, you must take and
start programming. "Inforkom offers you the following 
compromise approach - first under this chapter, we will, taking 
"the bull the horns, "simply start programming, and

then devote the remainder of the book is a systematic 
presentation of the material. Thus, let's write the first 
program in machine code. First of all, we select for it memory 
area. If you've read our book "Great opportunities for your 
Spectrum, you know that for BASIC in-

computer memory reserved memory area
starting from the address pointed to by the system variable 
PROG and ends with the address pointed to by the system 
variable RAMTOP. Suppose you want to write the program into 
machine code starting at address 30000. Give the command CLEAR 
29999. This will install RAMTOP in 29999 and your program will 
be protected from possible damage from BASIC. Even if you

give the command NEW, memory areas that are above RAMTOP, will 
not be affected. 

  Now, let two straight team one by
other:

POKE 30000,0
POKE 30001,201


  We have now recorded two numbers in the correct
us to address. They form a simple program. Run it with the 
command RANDOMIZE USR 30000. Try it yourself ... You think that 
nothing happened, but it not so. First, the processor addressed 
at 30000 and found a number of 0, which denotes the machine 
operation code NOP. Operation NOP (NO OPERATION - no surgery) 
tells the processor that do nothing not necessary. During 
0.0000014 sec. he really does not do anything, and then moves 
on to the following address, where he finds 

islo 201.

  This command RET (RETURN - return). She
allows the processor to cease this
place the program in machine code and get back to where it is 
called, ie in our case - in BASIC. This is the processor and 
did about what you got the message BASIC "OK."


  If all you read here, you
clear, then you already understand how programs are compiled 
into machine code. You can certainly argue that the benefits of 
such programs are not very many, but not now in

This is the essence. It is important that you understand that a 
certain sequence of numbers can be sequence of commands to the 
processor Z-80.


  Unfortunately for us there is little evidence
simple sequence of numbers such as such as 0 and 201. Keep in 
mind Codes all commands of the processor (and there are about 
seven hundred) is not easy, but it is simplified by the fact 
that is an intermediate language between the processor

and a man - Assembly language. Each
code has a mnemonic assembler. Mnemonic - a collection of 
letters stands for the English words. For our example program 
in Assembly as follows: 


                   NOP

                   RET


  Translating these mnemonics into machine code
You can also instruct your computer. For this
There are special programs that
also called assemblers. There are also opposing the program - 
the disassembly. They conversely convert machine code to 
mnemonic assembler. 

  And those programs and others quite a lot. Often they are 
combined in packages. Widely distributed packages of firm 
GENS3/MONS3 HISOFT and EDITAS / MONITOR 16/48 firm PICTURESQUE. 
Here GENS3 and EDITAS - assemblers and MONS3, MONITOR 16, 
MONITOR 48 - disassembler. 

  Now let us return to our first
program and try it a few develop to it still doing something. 
CPU Z-80 has several registers, the which have names - "A", 
"B", "C", etc. Each can contain one kakoelibo integer from 0 to 
255 (ie one bytes).


  There are dozens of commands of the processor,
that allow you to copy the contents of
registers from one to another, and perform communications with 
the outside world, including and RAM.


  For example, the assembly instructions LD B, A
(Machine code - 71) means "to download
And the contents of the register in the register ". LD -
is an abbreviation for LOAD (LOAD - LOAD).

  Likewise, LD C, B (the machine code 72)
means "to load the register with the contents
register. You can load the registers and
integers. For example, LD A, N - means
"Get to the register and the integer N, where
N may be a number from 0 to 255. "Prior to this
all the teams were single byte. The same team - two-byte. First 
comes the machine code - 62, followed by the number itself - N. 
Thus, For example, LD A, 77 (get to the register A

number 77) will be: 62.77.
Here 62 - operation code - he said
the processor that needs to be done, and 77 - is
operand. We note here that there are operations and trehbaytnye 
and four-byte. The first byte, as a rule - the operation code, 
and following it - the operands. We're talking

"Normally" because there are some
operations, which code is written by two
Bytes / 1.

  So, we are ready to make writing a program that will be to 
throw any number from one register processor to another.


/ 1 BACKGROUND: CPU Z-80
developed on the basis of its predecessor, the processor 8080. 
Most of the teams they are the same, but for the Z-80 was added 
dozens of new commands. To distinguish them from commands 8080, 
they begin with the prefix 203, 221, 237 or 253 (In hexadecimal 
code, respectively: CB, DD, ED or FD). Therefore there 
operation code which consists of two bytes followed by operands.


ASSEMBLER Machine Code
NOP 30000 0
LD A, 77 30001 62

                            30002 77
LD B, A 30003 1971
LD C, B 30004 72
RET 30005 201


  Much more interesting would be to organize
exchange between the processor and the computer's memory. 
Commands that allow you to do it, too much. For example, a team 
of LD (NN), A. Its native Code - 50. It means: "Load a memory 
location whose address is given double-byte number NN, the 
contents of register A ". This team - trehbaytnaya. The first is

opcode (50), and after - the two-byte
operand NN, which specifies a desired address. For example, if 
you need an address of 30008, then the operand NN will be: 56,

117, because 117 * 256 + 56 = 30008.

  This two-byte operand is of an older
part and younger. Remember that double-byte numbers (usually 
the address) is stored in the memory is always in reverse 
order, ie significant byte first, and then Senior

/ 1.

  Thus, the assembly instructions LD
(30,008), A, native is written as:
50, 56, 117.

  There is also the opposing team, LD
A, (NN) - "Worth the register and the contents
memory, given the address of NN ". Her
code - 58, followed by two bytes,
pointing to the address: first, junior, and
then - Senior. Then LD A, (30007) can be written as follows: 
58, 55, 117. 

  Now we can move the contents of memory cells from one to 
another, copying it through the register and the processor. 

/ 1 BACKGROUND: Our everyday
Experience teaches that the first are senior level, and then 
junior. For example, among 567 First there are the hundreds 
(5), then - dozens (6) and then the identity (7). In a computer 
- on the contrary. This is due to the fact that first computers 
were so small memory, that of the senior ranks it then

and did not go. They were a later addition, and they had to 
take at first. 

  Now we can move the contents of memory cells from one to 
another, copying it through the register and the processor. 


               Before surgery

30007 30008


  N A. . . . . . . . -


        P R O C E S S O R



              After surgery

30007 30008


  N N


ASSEMBLER Machine Code

LD A, (30007) 30000 1958

                            30001 55

                            30002 117
LD (30008), A 30003 1950

                            30004 56

                            30005 117
RET 30006 201


  You can still somewhat complicate the task and
try to perform the addition of content
any two memory locations and send
the result for storage in any cell.
To perform arithmetic operations
such as the addition, the processor Z-80 well
has several teams. Consider the command
ADD A, B (its native code - 128). ADD = ADDITION = ADD.

  ADD A, B means the following: "Add
contents of register B to the CPU register content A and the 
result is to leave register a ".


  As you can see, this team single-byte,
as all indicate that where take
what to do with it and where to send the result, it has been by 
themselves. 

  Suppose you want to add the contents of cells 30013 and 
30014, and the result put a cell 30015. Then the program

in assembly and in the native will be
have the form:

ASSEMBLER MACHINE CODE COMMENTARY
LD A, (30013) 30000 1958 Worth as a result
                          Giustra A number

             30,001 in 1961 contained in

             30002 117 30013 address.
LD B, A 30 003 71 Upload a solution
                          Giustra B contains
                          My Registry A
LD A, (30014) 30 004 1958 Download to re
                          Giustra A number

             30,005 in 1962 contained in

             30006 117 30014 address.
ADD A, B 30007 128 added to with
                          derzhimomu A with
                          derzhimoe registration
                          RA VI
LD (30015), A 30 008 50 Upload containing
             30 009 63 zhimoe register A

             30010 117 against 30,015.
NOP 30,011 0 No operation.
RET 30012 201 go back to
                          where this space
                          gram causing
                          las.


  Try this program to work. Let
Do you want to add two numbers, say 50 and
70. First, allocate memory for the program in machine code.

10 CLEAR 29999


  Now we introduce the program into memory,
starting at address 30000.

20 FOR i = 30000 TO 30012: READ q: POKE i, q:
NEXT i
1930 DATA 58, 61, 117, 71, 58, 62, 117, 128,
50, 63, 117, 0, 201


  Write in a cell 30013 and 30014 are the two
numbers that we wish to add:

40 POKE 30013, 50: POKE 30014, 70


  Enter the command to execute our program in machine code.

50 RANDOMIZE USR 30000


  And finally, we start our BASIC program - RUN.

  After a second run for it and
message appears, DC It seems to be
Nothing has changed, but if you check what is in the 30015 
cell, then make sure that there is a result of the addition, ie 
number 120. 

PRINT PEEK 30015 will give you: 120 OK


  Thus, we have already met with several
processor commands the Z-80. Now we have to stop this 
superpopular exposition, since the system of commands that the 
processor is quite extensive and in such an approach would take 
her about a thousand pages. We hope that the psychological

You have already overcome the barrier and then we proceed to a 
systematic and gradual Development of the instruction processor.


  You seem to understand that every team in the native has its 
own mnemonic assembler, in which several letters are encoded 
operation. K Unfortunately, the literature is usually written 
professionals for professionals and they do not bother with 
translation into Russian mnemonic language, especially that of 
the Z-80 books in Russian are almost no (there are several 
departmental transfers). Therefore, "Inforkom" in his "Handbook 
.." (Part 3) paid place a dictionary to translate the mnemonic 
assembler normal English, but through He and the Russian 
language. 

  In concluding this chapter, several general
comments. Different processors have different instruction sets. 
Knowledge of the instruction processor Z-80 does not mean that 
You will be able to understand the native other computers 
collected at other processors, but exactly what their

development will you dozens of times faster.

  Even for only one CPU Z-80
entity has not yet been standardized.
Many of the assembled program, for example,
EDITAS, ZEUS, GENS1 ... GENS3 and others have
deviations in the form of a record of mnemonics, but they
insignificant and always negotiated in
the accompanying instructions to the program.


Lyrics provided by Michael (MIHEICH)

                                10.07.1999





Other articles:

AD & D - The value of ability.

Prohodilka - the passing game Magician land.

Tutorial - Programming in machine code and assembly language (part one).



Similar articles:
Coding - IM 2 mode when working in TR-DOS (version Loader'a).
Ether - Nick loves Masha, Olga loves Masha, Sveta loves Masha.
Demoparty - Cusick from Sinclair Club organizes KIDSOFT'2004.
Everything - the interview is very familiar to all group FLASH Inc.

В этот день...   21 November