Serial Communication
Serial Communication
Introduction to Assembly Language Program in 8086/80386 machines and Serial Communication using
assembly language programming.
OBJECTIVE
THEORY
8086 microprocessor
Features of 8086
- 8086 is a 16bit processor. Its ALU, internal registers works with 16bit binary word
- 8086 has a 16bit data bus. It can read or write data to a memory/port either 16bits or 8 bit at a time
- 8086 has a 20bit address bus which means, it can address up to 220 = 1MB memory location
- Frequency range of 8086 is 6-10 MHz
The 8086 microprocessor has a total of fourteen registers that are accessible to the programmer. It is divided
into four groups. They are:
Accumulator
AX
Base
BX
Count
CX
Data
DX
Accumulator register consists of two 8-bit registers AL and AH, which can be combined together and
used as 16-bit register AX. AL in this case contains the low order byte of the word, and AH contains the
high-order byte. Accumulator can be used for I/O operations and string manipulation.
Base register consists of two 8-bit registers BL and BH, which can be combined together and used as
a 16-bit register BX. BL in this case contains the low-order byte of the word, and BH contains the high-order
byte. BX register usually contains a data pointer used for based, based indexed or register indirect addressing.
Count register consists of two 8-bit registers CL and CH, which can be combined together and used
as a 16-bit register CX. When combined, CL register contains the low order byte of the word, and CH
contains the high-order byte. Count register can be used in Loop, shift/rotate instructions and as a counter in
string manipulation.
Data register consists of two 8-bit registers DL and DH, which can be combined together and used as
a 16-bit register DX. When combined, DL register contains the low order byte of the word, and DH contains
the high-order byte. Data register can be used as a port number in I/O operations. In integer 32-bit multiply
and divide instruction the DX register contains high-order word of the initial or resulting number.
Index/Pointer registers
These registers can also be called as Special Purpose registers.
15
Stack Pointer
SP
Base Pointer
BP
Source Index
SI
Destination Index
DI
Stack Pointer (SP) is a 16-bit register pointing to program stack, i.e. it is used to hold the address of
the top of stack.
Base Pointer (BP) is a 16-bit register pointing to data in stack segment. It is usually used by
subroutines to locate variables that were passed on the stack by a calling program. BP register is usually used
for based, based indexed or register indirect addressing.
Source Index (SI) is a 16-bit register. SI is used for indexed, based indexed and register indirect
addressing, as well as a source data addresses in string manipulation instructions. Used in conjunction with
the DS register to point to data locations in the data segment.
Destination Index (DI) is a 16-bit register. Used in conjunction with the ES register in string
operations. DI is used for indexed, based indexed and register indirect addressing, as well as a destination
data addresses in string manipulation instructions.
Segment registers
Most of the registers contain data/instruction offsets within 64 KB memory segment. There are four
different 64 KB segments for instructions, stack, data and extra data. To specify where in 1 MB of processor
memory these 4 segments are located the processor uses four segment registers.
15
Code Segment
CS
Data Segment
DS
Stack Segment
SS
Extra Segment
ES
Code segment (CS) is a 16-bit register containing address of 64 KB segment with processor
instructions. The processor uses CS segment for all accesses to instructions referenced by instruction pointer
(IP) register. CS register cannot be changed directly. The CS register is automatically updated during far
jump, far call and far return instructions.
Stack segment (SS) is a 16-bit register containing address of 64KB segment with program stack. By
default, the processor assumes that all data referenced by the stack pointer. (SP) and base pointer (BP)
registers is located in the stack segment. SS register can be changed directly using POP instruction.
Data segment (DS) is a 16-bit register containing address of 64KB segment with program data. By
default, the processor assumes that all data referenced by general registers (AX, BX, CX, DX) and index
register (SI, DI) is located in the data segment. DS register can be changed directly using POP and LDS
instructions.
Extra segment (ES) used to hold the starting address of Extra segment. Extra segment is provided for
programs that need to access a second data segment. Segment registers cannot be used in arithmetic
operations.
Other registers
-
- Flag Register
contains a group of status bits called flags that indicate the status of the CPU or the result of
arithmetic operations. There are two types of flags;
Status flags - reflect the result of executing an instruction. The programmer cannot set/reset
these flags directly. There are six types of status flags;
The Carry Flag (C)
The Overflow Flag (O)
The Sign Flag (S)
The Zero Flag (Z)
The Auxiliary Carry Flag (A)
The Parity Flag (P)
Control flags - enable or disable certain CPU operations. The programmer can set/reset these
bits to control the CPU's operation. There are three types of control flags;
The Direction Flag (D)
The Interrupt Flag (I)
The Trap Flag (T)
String instructions
80386 microprocessor
Features of 8086
The 80386 instruction set is upward compatible with all its predecessors.
The 80386 can run 8086 applications under protected mode in its virtual 8086 mode of operation.
With the 32 bit address bus, the 80386 can address up to 4Gbytes of physical memory. The physical
memory is organized in terms of segments of 4Gbytes at maximum.
The 80386 CPU supports 16K number of segments and thus the total virtual space of
4GB * 16KB = 64 TB.
The 80386 microprocessor has a total of fourteen registers that are accessible to the programmer. It is divided
into four groups. They are:
16 15
AX
EAX
BX
EBX
CX
ECX
DX
EDX
SI
ESI
DI
EDI
BP
EBP
SP
ESP
Code Segment
SS
Stack Segment
DS
ES
Data Segment
FS
GS
Instruction pointer and Flag register
IP
FLAGS
EIP
EFLAGS
PROCEDURE
Run the program step by step with using the function key F8
Write an ALP for input string from the keyboard and print it on the screen
Write an ALP for transmission in one computer and receiving in another computer using serial
communication port
Correct code,
Function
Decimal
Binary
Hex decimal
110
110
BC
Y=A+(B-C)
Function
Decimal
Binary
Hex decimal
110
110
B*C
36
100100
24
X=A-(B*C)
-36
11011100
DC
Function
Decimal
Binary
Hex decimal
-36
11011100
DC
Z=X XOR Y
-36
11011100
DC
(ii).
For the Y value;
Function
Decimal
Binary
Hex decimal
110
110
A+B
110
Y=(A+B)*C
36
100100
24
Function
Decimal
Binary
Hex decimal
110
110
A+B
110
A-B
-6
11111010
FA
X=(A+B) OR (A-B)
254
11111110
FE
Function
Decimal
Binary
Hex decimal
36
100100
24
254
11111110
FE
Z=X XOR Y
218
11011010
DA
(iii).
For the Y value;
Function
Decimal
Binary
Hex decimal
110
110
A/B
Y=(A/B)-C
-6
11111010
FA
Function
Decimal
Binary
Hex decimal
110
110
X=A-C
-6
11111010
FA
Function
Decimal
Binary
Hex decimal
-6
11111010
FA
-6
11111010
FA
Z=X XOR Y
(iv).
For the Y value;
Function
Decimal
Binary
Hex decimal
110
110
Y=A*B
Function
Decimal
Binary
Hex decimal
110
110
X=B+A
110
Function
Decimal
Binary
Hex decimal
110
Z=X XOR Y
110
(v).
For the Y value;
Function
Decimal
Binary
Hex decimal
110
110
A+B
110
Y=(A+B) OR C
110
Function
Decimal
Binary
Hex decimal
110
110
X=C*A
Function
Decimal
Binary
Hex decimal
110
Z=X XOR Y
110
Step 3
(i).
Function
Decimal
Binary
Hex Decimal
Z=X XOR Y
-36
11011100
DC
ROR Z,1
110
1101110
6E
ROR Z,5
230
11100110
E6
(ii).
Function
Decimal
Binary
Hex Decimal
Z=X XOR Y
218
11011010
DA
ROR Z,1
109
1101101
6D
ROR Z,5
214
11010110
D6
(iii).
Function
Decimal
Binary
Hex Decimal
Z=X XOR Y
ROR Z,1
ROR Z,5
(iv).
Function
Decimal
Binary
Hex Decimal
Z=X XOR Y
110
ROR Z,1
11
ROR Z,5
48
110000
30
(v).
Function
Decimal
Binary
Hex Decimal
Z=X XOR Y
110
ROR Z,1
11
ROR Z,5
48
110000
30
An ALP for input string from the keyboard and print it on the screen
An ALP for transmission in one computer and receiving in another computer using serial communication
port.
ALP for transmission,
DISCUSSION
First, the sample program was type and run. .MODE SMALL means the type of program save in
memory. We can use SMALL or LARGE for this. .STACK 100H means the size of STACK. .CODE use to
start the program. But when the program was run, I couldnt see the terminated code. The reason is small
problem of code. Int 21 is DOS function code, it provided by DOS operating system in this program. 00H
value moves the AL in this program. The code was return by 00H. So the program didnt terminate. 4CH
value moves the A, then return control to the operating system (stop program). Then value of AL showed as
the exit code.
The moment of run the one instruction, we can see variable value of the main registers in side. Also
we can see the variable value of flags.
The Carry Flag (C): This flag is set when the result of an unsigned arithmetic operation is too large to
fit in the destination register. This happens when there is an end carry in an addition operation or
there an end borrows in a subtraction operation. A value of 1 = carry and 0 = no carry.
The Zero Flag (Z): This flag is set when the result of an arithmetic or logic operation is equal to zero.
A value of 1 = zero and a value of 0 = not zero.
The Sign Flag (S): This flag is set when the result of an arithmetic or logic operation is negative. This
flag is a copy of the MSB of the result (i.e. the sign bit). A value of 1 = negative and 0 = positive.
The Overflow Flag (O): This flag is set when the result of a signed arithmetic operation is too large to
fit in the destination register (i.e. when an overflow occurs). Overflow can occur when adding two
numbers with the same sign (i.e. both positive or both negative). A value of 1 = overflow and 0 = no
overflow.
The Parity Flag (P): This flags reflects the number of 1s in the result of an operation. If the number of
1s is even its value = 1 and if the number of 1s is odd then its value = 0.
The Auxiliary Carry Flag (A): This flag is set when an operation causes a carry from bit 3 to bit 4 (or
a borrow from bit 4 to bit 3) of an operand. A value of 1 = carry and 0 = no carry.
The Interrupt Flag (I): Dictates whether or not system interrupts can occur. Interrupts are actions
initiated by hardware block such as input devices that will interrupt the normal execution of
programs. The flag values are 0 = disable interrupts or 1 = enable interrupts and can be manipulated
by the CLI (clear I) and STI (set I) instructions.
The Direction Flag (D): Affects the direction of moving data blocks by such instructions as MOVS,
CMPS and SCAS. The flag values are 0 = up and 1 = down and can be set/reset by the STD (set D)
and CLD (clear D) instructions.
Then used the register number and solved the calculation for second practical. According to my register
number, I had to write a programs using XOR operator.
The XOR operation is again carried out in a similar way to the AND and OR operation. The
constraints on the operands are also similar. The XOR operation gives a high output, when the 2 input bits
are dissimilar. Otherwise, the output is zero. Logical XOR (Exclusive OR) compare between all bits of two
operands. Result is stored in first operand.
The final answer was settled to the AL register. Then the program terminated, we could see the final
answer as the exit code.
After that, we used the new code to this program for the rotate the answer. ROR instruction was used
for this.
This instruction rotates all the bits in a specified byte or word to the right some number of bit
positions. LSB is placed as a new MSB and a new CF. The destination can be of byte size or of word size,
also it can be a register or a memory location. Number of shifts is indicated by the count.
General format - ROR destination, count
Then we wrote an ALP for input string from the keyboard and print it on the screen. Int 21 was used for this.
AH=0Ah - input of a string to DS:DX, fist byte is buffer size, second byte is number of chars actually read.
this function does not add '$' in the end of string. to print using AH=9 you must set dollar character at the end
of it and start printing from address DS:DX + 2.
After that, wrote an ALP for transmission in one computer and receiving in another computer using serial
communication port.
A serial port is a connector and related electronics that uses one of a number of serial input/output
(I/O) standards to interface data communications equipment (DCE) and data terminal equipment (DTE).
Comport is divided in to two segments.
First, we should be declaring the LCR, LSR and THR. In a LCR, Bits 0 and 1 define the word length
(number of data bits). 8 bits length is usually used today. So we can use 00000011B.
We used IN and OUT instructions for this programs.
The IN instruction will copy data from a port to the accumulator. If 8 bit is read the data will go to AL and
if 16 bit then to AX. Similarly OUT instruction is used to copy data from accumulator to an output port. Both IN
and OUT instructions can be done using direct and indirect addressing modes.
Also we used Int 21/AH=01H for this. Because, it read character from standard input, with echo,
result is stored in AL. If there is no character in the keyboard buffer, the function waits until any key is
pressed.
In a LSR, Bit 5 shows that transmitter holding register is empty (when set). In this program checked
value of LSR. When the 20H value settled the LSR, set the output by THR. After that connected the serial
port and run this program, then we could understand this. When we type on our computer screen, it show the
connected computer.
In the receive program, we could see words on our computer screen but type this word on connected
computer screen.
In this program, LSR bit 1 show the data ready. Then the program checked the value of LSR. When the 01H
value settled the LSR, set the input by THR.