8086 program to determine subtraction of corresponding elements of two arrays

In this program we will see how to subtract the contents of two different arrays.

Problem Statement

Write 8086 Assembly language program to subtract the contents to corresponding elements which are stored in two different arrays

Discussion

In this example there are two different arrays. The arrays are stored at location 501 onwards and 601 onwards. The size of these two arrays are stored at offset location 500. We are taking the array size to initialize the counter, then by using loops we are subtracting the elements one by one

Input

Address Data
500 04
501 09
502 03
503 08
504 06
601 04
602 01
603 02
604 03

Flow Diagram

Program

<span class="pln">    MOV SI</span><span class="pun">,</span><span class="pln"> </span><span class="lit">500</span><span class="pln">     </span><span class="pun">;</span><span class="typ">Point</span><span class="pln"> </span><span class="typ">Source</span><span class="pln"> index to </span><span class="lit">500</span>
<span class="pln">    MOV CL</span><span class="pun">,</span><span class="pln"> </span><span class="pun">[</span><span class="pln">SI</span><span class="pun">]</span><span class="pln">    </span><span class="pun">;</span><span class="typ">Load</span><span class="pln"> the array size </span><span class="kwd">into</span><span class="pln"> CL</span>
<span class="pln">    MOV CH</span><span class="pun">,</span><span class="pln"> </span><span class="lit">00</span><span class="pln"> </span><span class="pun">;</span><span class="typ">Clear</span><span class="pln"> </span><span class="typ">Upper</span><span class="pln"> half of CX</span>
<span class="pln">    INC SI   </span><span class="pun">;</span><span class="typ">Increase</span><span class="pln"> SI </span><span class="kwd">register</span><span class="pln"> to point </span><span class="kwd">next</span><span class="pln"> location</span>
<span class="pln">    MOV DI</span><span class="pun">,</span><span class="pln"> </span><span class="lit">601</span><span class="pln">     </span><span class="pun">;</span><span class="typ">Destination</span><span class="pln"> </span><span class="kwd">register</span><span class="pln"> points to </span><span class="lit">601</span>
<span class="pln">L1</span><span class="pun">:</span><span class="pln"> MOV AL</span><span class="pun">,</span><span class="pln"> </span><span class="pun">[</span><span class="pln">SI</span><span class="pun">]</span><span class="pln">    </span><span class="pun">;</span><span class="typ">Load</span><span class="pln"> A </span><span class="kwd">with</span><span class="pln"> the data stored at SI</span>
<span class="pln">    SUB AL</span><span class="pun">,</span><span class="pln"> </span><span class="pun">[</span><span class="pln">DI</span><span class="pun">]</span><span class="pln">    </span><span class="pun">;</span><span class="typ">Subtract</span><span class="pln"> DI element </span><span class="kwd">from</span><span class="pln"> AL</span>
<span class="pln">    MOV </span><span class="pun">[</span><span class="pln">SI</span><span class="pun">],</span><span class="pln"> AL    </span><span class="pun">;</span><span class="typ">Store</span><span class="pln"> AL to SI address</span>
<span class="pln">    INC SI   </span><span class="pun">;</span><span class="pln">SI </span><span class="typ">Point</span><span class="pln"> to </span><span class="kwd">next</span><span class="pln"> location</span>
<span class="pln">    INC DI   </span><span class="pun">;</span><span class="pln">DI </span><span class="typ">Point</span><span class="pln"> to </span><span class="kwd">next</span><span class="pln"> location</span>
<span class="pln">    LOOP L1     </span><span class="pun">;</span><span class="typ">Jump</span><span class="pln"> to L1 </span><span class="kwd">until</span><span class="pln"> the counter becomes </span><span class="lit">0</span>
<span class="pln">    HLT </span><span class="pun">;</span><span class="typ">Terminate</span><span class="pln"> the program</span>

Output

Address Data
500 04
501 05
502 02
503 06
504 03
Updated on: 2019-07-30T22:30:26+05:30

415 Views

Kickstart Your Career

Get certified by completing the course

Get Started
Advertisements