Pages

Saturday, 26 January 2013

Introduction to Assembly Language Programming

Introduction to Assembly Language Programming


Registers:

Register are used to store information temporarily, while the information could be

  • a byte of data to be processed, or
  • an address pointing to the data to be fetched
The 8 bits of a register are shown from MSB D7 to the LSB D0
  • With an 8-bit data type, any data larger than 8 bits must be broken into 8-bit chunks before it is processed
The most widely used registers are
  • A (Accumulator)
  • For all arithmetic and logic instructions
  • B, R0, R1, R2, R3, R4, R5, R6, R7
  • DPTR (data pointer), and PC (program counter)

MOV Command

MOV destination, soruce
purpose of this command copy source to destination.
symbol "#" shows that it is value (number)

Example: 

MOV A,#55H ;load value 55H into reg. A
                        ;NOTE: Method use to transfer value is known as
                        ;Direct Addressing mode
MOV R0,A ;copy contents of A into R0
;(now A=R0=55H)
                        ;NOTE: Method use to transfer value is known as
                        ;Register Addressing mode
MOV R1,A ;copy contents of A into R1
;(now A=R0=R1=55H)
MOV R2,A ;copy contents of A into R2
;(now A=R0=R1=R2=55H)
MOV R3,#95H ;load value 95H into R3
;(now R3=95H)
MOV A,R3 ;copy contents of R3 into A
;now A=R3=95H

important points 



  • MOV A, #23H
    • if you forgot to add symbol "#" then it will consider it as location. With this symbol it will consider it as value.
  • MOV R5, #0F9H
    • Add an extra 0 before HEX number A to F to indicate that it isis a hex number and not a letter as done in example; MOV R5, #0F9H
  • If values 0 to F moved into an 8-bit register, the rest of the bits are assumed all zeros
    • “MOV A, #5”, the result will be A=05; i.e., A= 00000101 in binary
  • Moving a value that is too large into a register will cause an error 
    • MOV A, #7F2H ; ILLEGAL: 7F2H>(FFH) 8 bits 

ADD command


ADD A, source
The ADD instruction tells the CPU to add the source byte to accumulator register A and put the result in register A
  • Source operand can be either a register or immediate data, but the destination must always be register A
  • Remember: “ADD R4, A” and “ADD R2, #12H” are invalid since A must be the destination of any arithmetic operation
Example:
MOV A, #25H ;load 25H into A
MOV R2, #34H ;load 34H into R2
ADD A, R2            ;add R2 to Accumulator
                              ;(A = A + R2)
There are always many ways to write the same program, depending on the registers used
MOV A, #25H ;load one operand
                              ;into A (A=25H)
ADD A, #34H        ;add the second
                               ;operand 34H to A


No comments:

Post a Comment