162 lines
7.2 KiB
Plaintext
162 lines
7.2 KiB
Plaintext
|
||
ÛÛÛÛÛÛÛ Û Û ÛÛÛÛÛÛÛÛÛ Û ÛÛÛÛÛÛÛÛ
|
||
Û Û Û Û Û ÛÛÛ ÛÛ
|
||
Û Û Û Û Û Û ÛÛ
|
||
ÛÛÛÛÛÛÛÛÛÛÛ Û Û Û Û
|
||
Û Û Û Û Û Û
|
||
Û Û Û Û Û Û
|
||
Û Û ÛÛÛÛÛÛ ÛÛÛÛÛÛÛÛÛ Û
|
||
|
||
|
||
|
||
ÛÛÛ ÛÛÛ ÛÛÛÛ ÛÛÛÛÛÛÛ ÛÛÛÛ ÛÛÛÛÛÛÛÛ Û Û Û ÛÛÛÛÛÛÛ
|
||
Û ÛÛÛ Û Û Û Û Û Û ÛÛ Û ÛÛ Û Û
|
||
Û Û Û Û Û ÛÛÛÛ Û Û ÛÛ Û Û Û Û ÛÛÛÛÛ
|
||
Û Û ÛÛÛÛÛÛÛÛ Û ÛÛ ÛÛÛÛÛÛÛÛ ÛÛ Û Û Û Û Û
|
||
Û Û Û Û ÛÛÛÛÛÛÛ Û Û ÛÛÛÛÛÛÛÛ Û Û ÛÛ ÛÛÛÛÛÛÛ
|
||
|
||
|
||
|
||
Distributed By Amateur Virus Creation & Research Group (AVCR)
|
||
ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ
|
||
An introduction to ASM
|
||
|
||
THE BASE OF 10
|
||
When most people see the number 10 they think of ten, or X. This
|
||
is because we are not computers, and we like small numbers. In our numbering
|
||
system, to go from 1 to 10 we multiply by 10, and to go from 10 to 100 we
|
||
multiply by ten again, refer to the chart below:
|
||
1 10 100 1000 10000
|
||
1 *10 *10 *10 *10
|
||
|
||
THE BASE OF 2
|
||
Your microprocessor has around 12 psudomemory locations which can
|
||
store a number, called a register. Each register contains a high, and a
|
||
low portion, each having an 8 bit capacity, thus you could have up to 24 8
|
||
bit memory locations if you do not need the whole register's memory capacity.
|
||
The register has either an on (true) or an off (false), and because of this
|
||
we can not have the luxury of a number higher than 1, for 0 is false and 1
|
||
is true. Each person has to work with 0's and 1's to make every number
|
||
imaginable!
|
||
The art of converting 1's and 0's into recognizable numbers and
|
||
working with these numbers is called binary arithmatic. Before we delve
|
||
into binary arithmatic lets look something more familiar:
|
||
|
||
Base --> 10ý <-- Exponent
|
||
|
||
We look at numbers with a BASE of 10, while binary arithmitic
|
||
looks at numbers with a base of 2:
|
||
|
||
128 64 32 16 8 4 2 1
|
||
|
||
BASED on 2--> 2^7 2^6 2^5 2^4 2^3 2^2 2^1 2^0
|
||
|
||
Keeping the above in mind, lets count to ten in binary arithmatic,
|
||
and a more familiar base 10 arithmatic:
|
||
|
||
0 = 0000
|
||
1 = 0001
|
||
2 = 0010
|
||
3 = 0011
|
||
4 = 0100
|
||
5 = 0101
|
||
6 = 0110
|
||
7 = 0111
|
||
8 = 1000
|
||
9 = 1001
|
||
10 = 1010
|
||
|
||
Are we excited yet? Well if not, then you will be soon, because
|
||
now we are going to operate with binary numbers:
|
||
|
||
Lets add 2 and 3 in base 10 and binary:
|
||
1
|
||
2 0010
|
||
+3 +0011
|
||
--- ------
|
||
5 0101
|
||
|
||
Confused yet? Well lets take this step by step. To add 0010 (2)
|
||
and 0011 (3) we need to add up the digits as we would in base 10. 1+0 is
|
||
1, and we make a 1 in binary with 0001, easy. Now, lets take 1+1=2, how
|
||
do we make a two in binary? A two in binary is 0010, so the last number
|
||
goes in the answer space, and the 1 is carried. 1+0+0=1 and a 1 in binary
|
||
is 0001, so just a 1 is needed. Finally 0+0 in binary is 0000 so a 0 is
|
||
needed. Thats not so hard, is it?
|
||
Alright, now we must subtract numbers in binary. Lets take 3 and 2:
|
||
|
||
3 0011
|
||
-2 -0010
|
||
--- ------
|
||
1 0001
|
||
|
||
Nice and easy, you deserve a break after the adding <G>, so the
|
||
subtracting is exactly the opposite of adding, not much to learn!
|
||
|
||
INCREMENT \ DECREMENT
|
||
To increment something is to add 1 to it, so if we increment the
|
||
base 10 number 3 we get 4, much the same way, if we increment the binary
|
||
number 0011 we get 0100. The ASM instruction to increment is:
|
||
INC #
|
||
# could be a binary number, but it also could be a register. If
|
||
the number 0001 is stored in the AH register then "INC AH" would store
|
||
0010 in the AH register.
|
||
To decrement something is to subtract 1 from it, so if we decrement
|
||
the base 10 number 3 we get 2, much the same way, if we increment the binary
|
||
number 0011 we get 0010. The decrement syntax is:
|
||
DEC #
|
||
The processor can only increment to the # 9999, and then it goes back
|
||
to 0000, BUT a flag is set explaining that we are not at 0000 but rather at
|
||
10,000d (I would rather not figure out how to write 10,000 in binary so I
|
||
just put a d after it to indicate decimal, that is a valid ASM argument)!
|
||
|
||
MOV IN ALL ITS GLORY:
|
||
The MOV statement moves a number from the register to memory, or
|
||
from the memory to a register, or even within each. The syntax for the
|
||
MOV statement is:
|
||
|
||
MOV dest,source
|
||
|
||
Thus, if I type "MOV AX,BX" the processor will move the contents
|
||
of the BX register into the AX register. If I type "MOV [AX],BX" then the
|
||
processor will move what is in the BX register into the number location
|
||
in your RAM corisponding to the number in the AX register.
|
||
|
||
INT IT THE EASY WAY:
|
||
The INT argument calls a dos software interrupt or a hardware
|
||
interrupt, but lets first talk about the software interrupt. A software
|
||
interrupt is very similar to a subroutine, in that the program is written
|
||
for you, and you only have to put in the information explaining where
|
||
everything is. The syntax for the INT argument is:
|
||
INT #
|
||
Lets take an example, we will park the hard disk heads using a dos
|
||
software interrupt:
|
||
|
||
MOV AH,19h ; puts 19 hexidecimal in the AH (A high) register.
|
||
MOV DL,80h ; puts 80 hexidecimal in the DL (D low) register.
|
||
INT 13h ; calls the interrupt
|
||
|
||
See how easy it is to use software interrupts? Each interrupt has
|
||
its own command set, so you need to get a list of interrupts, and what
|
||
arguments you need in which registers.
|
||
|
||
PUSH AND POP:
|
||
The PUSH statement pushes a register into memory and the POP
|
||
statement pops it back into the register:
|
||
|
||
PUSH AH
|
||
MOV AH,19h
|
||
MOV DL,80h
|
||
INT 13h
|
||
POP AH
|
||
|
||
This simple program saves the AH register, then it parks the heads,
|
||
and lastly it restores the AH register.
|
||
|
||
This is the end of issue one of an Introduction to ASM, in our
|
||
next issue we will discuss the functions of all of the ASM codes, and
|
||
explain hardware interrupts, and MUCH more, so look for the next issue
|
||
of AVCR Magazine and look for AVCR-01.006!
|
||
Written By:
|
||
Th<54> Patron
|