Summary

This document contains 10 experiments on 8086 Assembly Language Programming, covering various topics like register operations, arithmetic operations, string operations, memory access, etc.

Full Transcript

## EXPERIMENT-1 4770 ← HOOP0:0001 Write down the result stored in the affected registers and the status of affected flags after each instruction executes. | No. | Instruction | CS | AX | BX | CX | DX | Flag Register | |---|---|---|---|---|---|---|---| | 00 | | 0100 | 0000 | 00 00 | 00 00 | 00 00...

## EXPERIMENT-1 4770 ← HOOP0:0001 Write down the result stored in the affected registers and the status of affected flags after each instruction executes. | No. | Instruction | CS | AX | BX | CX | DX | Flag Register | |---|---|---|---|---|---|---|---| | 00 | | 0100 | 0000 | 00 00 | 00 00 | 00 00 | AH AL-GH BL CHICL DHDL OF SFZRAFP PRICE | | 01 | MOV AX, 2345H | 0100 | 0003 | 23 45 | 00 00 | 00 00 | 00 00 00 00 00 0 0 0 0 0 0 0 0 0 | | 02 | MOV BX, 6789H | 0100 | 0006 | 23 45 | 67 89 | 00 00 | 00 00 00 00 00 0 0 0 0 0 0 0 0 0 | | 03 | ADD AX, BX | 0100 | 0008 | 8A CE | 67 89 | 00 00 | 00 00 1 1 0 0 0 0 0 0 0 0 0 0 0 | | 04 | SUB AX, BX | 0100 | 000A | 23 45 | 67 89 | 00 00 | 00 00 1 1 0 0 0 0 0 0 0 0 0 0 0 | | 05 | MOV CL, 02H | 0100 | 000C | 23 45 | 67 89 | 00 02 | 00 00 | 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 | | 06 | MOV AL, 0AH | 0100 | 000E | 23 45 | 67 89 | 00 02 | 00 00 | 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 | | 07 | MUL CL | 0100 | 0010 | 23 OA | 67 89 | 00 02 | 00 00 | 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 | | 08 | DIV CL | 0100 | 0012 | 00 14 | 67 89 | 00 02 | 00 00 | 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 | | 09 | INC AL | 0100 | 0014 | 00 08 | 67 89 | 00 02 | 00 00 | 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 | | 10 | DEC CL | 0100 | 0016 | 00 08 | 67 89 | 00 01 | 00 00 | 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 | | 11 | MOV AL, 35H | 0100 | 0018 | 00 35 | 67 89 | 00 01 | 00 00 | 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 | | 12 | AND AL, OFH | 0100 | 001A | 00 05 | 67 89 | 00 01 | 00 00 | 0 0 0 0 1 1 0 0 0 0 0 0 0 0 0 0 0 | | 13 | OR AL, 30H | 0100 | 0010 | 00 35 | 67 89 | 00 01 | 00 00 | 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 | | 14 | XOR AL, OFFH | 0100 | 001E | 00 CA | 67 89 | 00 01 | 00 00 | 0 0 0 0 0 0 1 1 0 0 0 0 0 0 0 0 0 | | 15 | NOT AL | 0100 | 0020 | 00 35 | 67 89 | 00 01 | 00 00 | 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 | | 16 | MOV DX, 5678H | 0100 | 0023 | 00 85 | 67 89 | 00 01 | 56 78 | 0 1 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 | | 17 | MOV BX, 1234H | 0100 | 0026 | 00 35 | 12 34 | 00 01 | 56 78 | 0 1 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 | | 18 | XCHG BX, DX | 0100 | 0028 | 00 35 | 56 78 | 00 01 | 12 34 | 0 1 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 | | 19 | MOV AL, 09H | 0100 | 002A | 00 09 | 56 78 | 00 01 | 12 34 | 0 1 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 | | 20 | MOV BL, 00H | 0100 | 0020 | 00 09 | 56 78 | 00 01 | 12 34 | 0 1 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 | | 21 | STC | 0100 | 0020 | 00 09 | 56 00 | 00 01 | 12 34 | 0 1 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 | | 22 | ADC AL, BL | 0100 | 002F | 00 0A | 56 00 | 00 01 | 12 34 | 0 1 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 | | 23 | DAA | 0100 | 0030 | 00 10 | 56 00 | 00 01 | 12 34 | 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 | HAAHD0001 ## EXPERIMENT - 2 4770 ← HOOP0:0001 1. Data: - 1000: 0400H → OFFH (15×15+15 = 255) Result: - | Instruction | DS | SI | DX | |---|---|---|---| | MOV DX, 1000H | 0100 | 0000 | 1000 | | MOV DS, DX | 0100 | 0000 | 1000 | | MOV SI, 0400H | 1000 | 0400 | 1000 | | MOV [SI], OFFH | 1000 | 0400 | 1000 | | XOR DX, DX | 1000 | 0400 | 1000 | | MOV DL, [SI] | 1000 | 0400 | 1000 | | HLT | 1000 | 0400 | FF | Final Result: - 1000:0400H → 0FFH 2. Data: - 1000:0400H → 07H 1000:0402H → 04H | Instruction | DS | SI | DI | AX | 1000:0400H | 1000:0402H | |---|---|---|---|---|---|---| | MOV AX, 1000H | 0100 | 00 00 | 00 00 | 1000 | 00 | 00 | | MOV DS, AX | 1000 | 00 00 | 00 00 | 1000 | 00 | 00 | | MOV [0400H], 07H | 1000 | 00 00 | 00 00 | 1000 | 07 | 00 | | MOV [0402H], 04H | 1000 | 00 00 | 00 00 | 1000 | 07 | 04 | | MOV SI, 0400H | 1000 | 0400 | 00 00 | 1000 | 07 | 04 | | MOV DI, 0402H | 1000 | 0400 | 0402 | 1000 | 07 | 04 | | XOR AX, AX | 1000 | 0400 | 0402 | 00 00 | 07 | 04 | | XCHG AX, [SI] | 1000 | 0400 | 0402 | 00 07 | 07 | 04 | | XCHG AX, [DI] | 1000 | 0400 | 0402 | 04 07 | 07 | 04 | | XCHG AX, [SI] | 1000 | 0400 | 0402 | 07 04 | 07 | 04 | | HLT | 1000 | 0400 | 0402 | 07 | 07 | 04 | Final Result: - 1000:0400H → 04H 1000:0402H → 07H ## EXPERIMENT - 3 4770 ← HOOP0:0001 Write 8086 instructions for the following: - 1. Read the value from memory location 1000H: 0400H and store it in register DL. ``` MOV DX, 1000H ; Put address in DX MOV DS, DX ; Move it into data Segment MOV SI, 0400H ; put offset into SI MOV [SI], OFFH ; Putting a value into address. XOR DX, DX ; Clearing DX MOV DL, [SI] ; Loading value from given address into DL HLT ``` 2. Exchange the contents of memory location 1000:0400H and 1000:0402H. ``` MOV AX, 1000H ; Put address in AX MOV DS, AX ; Move it into DS MOV [0400H], 07H; Putting two random values in MOV [0402H], 04H ; In this case: 7, and 4: MOV SI, 0400H ; Loading address offsets MOV DI, 0402H ; Clear AX XOR AX, AX XCHG AX, [SI] XCHG AX, [DI] XCHG AX, [SI] HLT ``` ## EXPERIMENT - 4 4770 ← HOOP0:0010 Write an 8086 Assembly language program to transfer ten numbers from a given array to memory location starting from address 1000H:0100H ``` MOV AX, 1000H ; Load Base Address in AX MOV ES, AX XOR AX, AX MOV [0400H], 00H ; Putting ten values in another location MOV [0401H], 01H MOV [0402H], 02H MOV [0403H], 03H MOV [0404H], 04H MOV [0405H], 05H MOV [0406H], 06H MOV [0407H], 07H MOV [0408H], 08H MOV [0409H], 09H MOV SI, 0400H ; Putting Location of values into SI MOV DI, 0100H ; Putting destination in DI MOV CL, 0AH ; Setting counter to 10. Transfer: MOV AL, [SI] ; Loads values into AL MOV ES:[DI], AL ; Copies them into ES:(1000H):DI(0100H) INC SI ; Increment offsets INC DI LOOP Transfer ; Loop the Transfer until CL=0, which is ten times here. HLT ``` ## EXPERIMENT - 5 4770 ← HOOP0:0010 Write an 8086 assembly language program to obtain count of positive and negative numbers from a given series of ten numbers and store the count respectively in DL and DH. ``` MOV [0400H], 1 ; Putting values in. MOV [0401H], 2 MOV [0402H], 3 MOV [0403H], 4 MOV [0404H], -5 MOV [0405H], 6 MOV [0406H], -7 MOV [0407H], 8 MOV [0408H], -9 MOV [0409H], 10 MOV SI, 0400H ; Set SI to address of 1st value. MOV CL, 0AH ; Set counter to 10. check: JNS posint ; Move current number into AL. MOV AL, [SI] ADD AL, 00H ; Add 00H to AL. This sets SF to 1 for negative values. negint: INC DH ; Increment DH for negative values. JMP next ; Jumpo to "next", so we don't increment DL. posint: INC DL ; Increment DL for positive values. next: INC SI ; Increments SI for next value. LOOP check ; Loops "check" until CX is equal to 0. HLT ``` ## EXPERIMENT - 6 4770 ← HOOP0:0010 Write an 8086 assembly language program to find the largest number from a given series of 10 unsigned numbers stored in memory starting from address 1000:0400H. Store the result in register DL. ``` MOV AX, 1000H ; Store 1000H (base address.) in AX. MOV DS, AX ; Move address into DS. MOV [0400H], 0AH ; Entering values to be assessed. MOV [0401H], 1AH MOV [0402H], 0EH MOV [0403H], 08H MOV [0404H], 20H MOV [0405H], 03H MOV [0406H], 0A0H MOV [0407H], 15H MOV [0408H], 0BFH MOV SI, 0400H ; Moving address of first value into SI. MOV CL, 0AH ; Set counter to 10. XOR AX, AX ; Clear AX. comparison: MOV AL, [SI] ; Move value into AL. CMP DL, AL ; CMP sets CF (Carry flag) to 1 when Al is bigger. JC updateValue ; If CF = 1, jump to "updateValue". next: INC SI ; Increment SI for next value. LOOP comparison ; Loop comparison until CX = 0. HLT updateValue: MOV DL, AL ; Copy current value into DL. JMP next ; Jump to "next" for next value. ``` ## EXPERIMENT - 7 4770 ← HOOP0:0010 Write an 8086 assembly program to find the count of even and odd numbers from a given series of 10 unsigned numbers. Store the count of even numbers in DL and count of odd numbers in DH. ``` MOV [0400H], 01H ; Putting values in. MOV [0401H], 02H MOV [0402H], 00H MOV [0403H], 0AH MOV [0404H], 0BH MOV [0405H], 11H MOV [0406H], 14H MOV [0407H], 06H MOV [0408H], 0DH MOV [0409H], 1CH MOV SI, 0400H ; Set SI to location of first value. MOV CL, 0AH ; Set counter to 10. XOR AX, AX ; Clear AX and DX. XOR DX, DX check: MOV AL, [SI] ; Move current value in AL. AND AL, 01H ; AND is used for masking, as LSB will determine even or odd. JNE odd ; Jump Not Equal? as odd numbers will give 1 for previous step. even: INC DL ; Increment DL for even numbers. INC SI ; Increment SI to get next value. LOOP check ; Loop "check" for other values until CX=0. HLT odd: INC DH ; Increment DH for odd numbers. INC SI ; Increment SI for next value. LOOP check ; Loop check for other values found. HLT ``` ## EXPERIMENT - 8 4770 ← HOOP0:0010 Write an 8086 assembly language program using string instruction to copy string "Hello" from memory location 1000:0600H to 2000:0600H. ``` MOV AX, 1000H ; Move first address into AX. MOV DS, AX ; Move it into DS. MOV [0600H], "H" ; Putting string one character at a time MOV [0601H], "e" ; at source location. MOV [0602H], "l" MOV [0603H], "l" MOV [0604H], "o" MOV AX, 2000H ; Move second (destination) address into AX. MOV ES, AX ; Move it into ES. MOV SI, 0600H ; Set SI to offset to be copied from AX. MOV DI, 0600H ; Set DI to offset of destination (where in ES). MOV CL, 05H ; Set counter to 5. CLD ; Clear direction flag to ensure values copy towards higher addresses REP MOVSB ; REP with repetition that the CX = 0, copying from DS:SI to ES:DI. HLT ``` ## EXPERIMENT - 9 4770 ← HOOP0:0010 Write an 8086 assembly language program to find the smallest number from a given series of 10 unsigned numbers stored in memory starting from address 1000:0400H. Store result in DL. ``` MOV AX, 1000H ; Move base address into AX. MOV DS, AX ; Move it into DS. MOV [0400H], 05H ; Put values in. MOV [0401H], 06H MOV [0402H], 04H MOV [0403H], 17H MOV [0404H], 03H MOV [0405H], 02H MOV [0406H], 00H MOV [0407H], 0DH MOV [0408H], 01H MOV [0409H], 0LH MOV SI, 0400H ; Set SI to offset value. MOV CL, 0AH ; Setting counter to 10. XOR AX, AX ; Clearing AX & DX. XOR DX, DX MOV DL, [SI] ; Move first value into DL. We account for DL=0 at start. comparison: MOV AL, [SI] ; Move current value into AL. CMP AL, DL ; Compare AL:DL and set flag. JC updateValue ; Jump to "updateValue" if carry flag is set. next: INC SI ; Increment SI for next value. LOOP comparison ; Loop comparison until CX is 0. HLT updateValue: MOV DL, AL ; Copy value of AL into DL. JMP next ``` ## EXPERIMENT - 10 4770 ← HOOP0:0010 Write an 8086 assembly language program to find the 2's complement of number stored in memory address 1000:0400H. Store the result in register DL. ``` MOV AX, 1000H ; Move Base address in AX. MOV DS, AX ; Move it into DS. XOR AX, AX ; Clear AX. MOV [0400H], 0CH ; Move a value at given address. MOV AL, [0400H] ; Copy it into AL. NEG AL ; NEG gives 2's complement of AL. MOV DL, AL ; Move value into DL. HLT ```

Use Quizgecko on...
Browser
Browser