Experiment Number 1 8086 Programming by Ravinder Nath Rajotiya - April 19, 2019May 25, 20220 Share on Facebook Share Send email Mail Print Print Table of Contents Toggle AIM :Write a program to add and subtract two 16-bit numbers with/ without carry using 8086Objective:System Requirement :Setting up the Trainer Kit:Flowchart to Add two 16-bit numbers:Algorithm:Address Map for DATAExecuting The ProgramVerification of ResultResultSubtraction of two 16-bit numbersExperiment-1 Viva Question: AIM :Write a program to add and subtract two 16-bit numbers with/ without carry using 8086 Objective: To understand working of 8086 Based System. To draw flowchart of the 16-bit Addition To develop and execute program, To verify the result of two 16-bit long number. System Requirement : 8086 Trainer Kit with Key Board Setting up the Trainer Kit: Ensure that standard IBM PC/AT system keyboard is connected System is Powered ON Student has a handy opcode table for programming Use data Address as : For Program Code segment address : 1000 Offset address : 0200 For Data segment address 0000 offset address : 1300 Flowchart to Add two 16-bit numbers: Flowchart to add two 16-bit numbers Algorithm: Start Initialize the BX, and SI Registers Read the contents of the memory pointer by SI register in register AX Increment the SI register content Read the contents of the memory pointer by SI register in register BX Add content of AX and BX Increment the SI register content Check if carry is generated If yes increment BL, SI and save carry End of the program Explanation of the Code for Adding two 16-bit numbers: Explanation of the Code for Adding two 16-bit numbers: Line Number Address Op-Code Mnemonic Code Explanation 1 1000: 0200 F8 CLC ; Clear the Carry Flag 2 1000:0201 BE 00 13 MOV SI, 1300 Initialize SI register to starting address of 16-bit data 3 10000204 8B 04 MOV AX, [SI] Move 1st 16-bit data pointed by SI into AX register 4 1000: 0206 46 INC SI ; Increment the address pointer (SI) 5 1000: 0207 46 INC SI ; Increment the address pointer (SI) 6 1000: 0208 8B 1C MOV BX, [SI] ; transfer 2nd 16-bit data into the register BX 7 1000: 020A 03 C3 ADD AX, BX ;Add content of register AX and BX 8 1000:020C B8 00 00 MOV BX, 0000h ; Initialize BX to hex 0000 9 1000: 020F 46 INC SI ; Increment the address pointer (SI) to save 16-bit result 10 1000: 0210 46 INC SI ; Increment the address pointer (SI) 11 1000: 0211 89 04 MOV [SI], AX ; save 16-bit result at location pointed by SI register 12 1000: 0213 73 01 JNC SaveCarry ; Check if carry was generated as a result of addition and if so, jump to location ……. 13 1000: 0215 FE C3 INC BL ; do nothing 14 1000: 0216 90 SaveCarry : NOP ; increment BL to mean carry was generated 15 1000: 0218 46 INC SI ; ; Increment the address pointer (SI) to save Carry 15 1000: 0219 46 INC SI ; ; Increment the address pointer (SI) to save Carry 16 1000: 021A 88 1C MOV [SI], BL ; Save carry at address pointed by SI 17 1000: 021C F4 HLT ; Stop execution Execution of Program on 8086 Kit Address Map for DATA Data Segment Address DATA 1st 16-bit DATA Segment : Offset: 0000 : 1300 5678h 2nd 16-bit DATA Segment : Offset: 0000 : 1302 6789h Executing The Program Key Pressed/Action Display on LCD Press G from Keyboard BURST Press Enter Segm_Adr 1000 Press Enter Ofst 0200 Press Enter Wait Cmd_Wrd= Do not press the Reset Key; Check the result by using Sub_Mir (S) Command Verification of Result DATA High Byte Low Byte 1st Data Address SegAdr: 0000 Ofst : 1301 Ofst : 1300 2nd data Address SegAdr: 0000 Ofst : 1303 Ofst : 1302 Result Carry High Byte Low Byte Address SegAdr: 0000 Ofst : 1305 Ofst : 1304 Subtraction of two 16-bit numbers ** NOTE: For writing an ALP to subtract two 16-bit numbers. Programming logic is exactly similar to the one for adding as given above. For subtracting use SUB AX, BX, the hex code for this is 2AC3. Replace line number 7 as: 7. 1000: 020A 2A C3 SUB AX, BX ;result AX = AX – BX Experiment-1 Viva Question: Q.1 Why two address Segment Address and Offset is used) Answer: Memory of 8086 microprocessor is divided into different segment. Each segment has its base address and the all address within that segment are the offsets. The segment address and the offset address combined together are used to provide 20-bit physical address Q.2 What is the purpose of CLC mnemonic code Answer: CLC stands for clear the carry flag. If for some reason the carry flag was previously set, this action will reset the carry flag to zero. Q.3 What is the use of BX register in this experiment Answer: When two numbers are added, carry may generate whose status is saved in flag register. A register BX is used to keep the count of the carry. If the carry get generated program jums to a location 0214 to and the register content is incremented. The carry (Content of BL) is then saved in memory pointed by SI register. Q.4 What is the SI register used in this program Answer: SI register is used as a source pointer register. It contains the address of the source data i.e. 0000:1300. The microprocessor reads the data pointed by the SI register content (Address) Q.5 What is the purpose of the instruction MOV AX, [SI]? Answer: [SI] means the content at the memory location whose address is given in register SI. So, MOV AX, [SI] will transfer content of memory location given in SI into AX register Share on Facebook Share Send email Mail Print Print