Ask Homework Help/Study Tips Expert

Fundamental of Microprocessor

Lab 2: Data Movement and Arithmetic Operation

Data Movement Instructions
These instructions are used to move data from one place to another. These places can be registers, memory, or even inside peripheral devices. Some examples are:

MOV AX, 13
MOV BX, AX

Arithmetic Instructions

Arithmetic instructions take two operands: a destination and a source. The destination must be a register or a memory location. The source may be either a memory location, a register, or a constant value. Note that at least one of the two must be a register, because operations may not use a memory location as both a source and a destination. Some examples are:

            ADD  src, dest      ADD   ax, cx                                                                                      

            SUB  dest, src      SUB   ax, bx                                                                                     

            MUL   arg             MUL   cx

Procedure

Complete the following tasks.

1. Launch the EMU8086.

2. Use the data movement and arithmetic operations from the last lab to complete the following program.

a. Convert 50 °F to degree °C, using following formula:
°C = (°F - 32) x 5/9

b. Convert 98 °C to °F, using following formula:
°F = °C x 9/5 + 32

2. After the program execute without any error, check the status and content of the registers after each single step execution.

ORG 0100H
 
MOV     AL,F        ; Load given F into AL
MOV     BL,20H      ; Load 32 (20h) into BL
SUB     AL,BL       ; Subtract 32 from F
MOV     BL,05H      ; Move 5 into BL
 
MUL     BL          ; Multiply AL by BL (5)
MOV     BL,09H      ; Move 9 into BL
DIV     BL          ; Divide AL by BL
RET     
 
F DB 50

ORG 0100H

MOV     AL,C         ; Load given C into AL
MOV     BL, 09H      ; Load 9 into BL
MUL     BL           ; Multiply BL with AL ( 9 x 5)
MOV     BL,20H       ; Load 32 (20h) into BL
ADD     AL,BL        ; add BL with AL
MOV     BL, 05H      ; Load 5 into BL
DIV     BL           ; Divide AL by BL ((Cx9)+ 32)/5
RET
 
C DB 98

Analysis

Q1. Can you use 32d (decimal) instead of 20h (hex) in the program? Try it !

Q2. What if you have to do a lot of conversion, is there any better way or faster way of doing it?

Lab 3: Subroutine and Stack Operation

Subroutine

A subroutine is a set of code that can be branched to and returned from such a way that the code is as if it were inserted at the point from which it is branched to.

The branch to a subroutine is referred to as CALL and the corresponding branch back is known as RETURN
Subroutine provide the primary means of breaking the code in a program to modules

Stack

- It is a section of memory sets aside for storing return addresses.
- It is also used to save the contents of registers for the calling program while a procedure
executes
- Another use of stack is to hold data or addresses that will be acted upon by a procedure.
- PUSH and POP are 2 instructions that can operate on stack

Procedure

Complete the following tasks.

1. Launch the EMU8086.
2. We will be writing a program to calculate the sum of all resistance in a series and parallel circuit.
3. Copy and paste the code into EMU 8086 and run the program in single step mode
4. Make sure you open the "stack" window (should be on the bottom of emulator windows).
5. After each single step execution, notice the content of AX, BX, CX, DX, IP, Stack

Instructions used in this program: write the syntax for each of these instruction

MOV -       POP -
ADD -       DIV -
PUSH -
MUL -

org 100h
  Start:      mov     dx, r5                  ;r5 = dl
add     dx, r6                  ;r5+r6 = dl 
push    dx                      ;save value of dx in stack
mov     cx, r4                  ;r4 = dl
push    cx 
add     cx, dx                  ;r4 + (r5+r6)
 
call PARALLEL  
 
PARALLEL    PROC   
 
movbx,cx                   ;mov cx (r4) + (r5+r6) into bx
pop     cx                      ;pop old cx (r4) back to cx
pop     dx                      ;pop (r5+r6) back to dx
mov     ax, cx                  ;mov old cx(r4) to ax
mul     dx                      ;multiply ax with dx (r4 * 
                                      ;(r5+r6)
divbx                      ;final division [(r4 * 
                                            ;(r5+r6)]/[(r4 + (r5+r6)]
            ENDP
r4  DW  100d
r5  DW  500d
r6  DW  600d

Analysis

Q1.What happens to the value in IP when you execute the program?

Q2.Why did IP increase by 5 bytes (0100 to 0104 and 0105 to 0108) for the first 2 lines ofprogram, but only 1 byte for the 3rd line of program (push dx → 0108 to 0109)?

Q3.What happens to the value in the stack after each push operation?

Q4.When you use POP instruction, which value come out in what order?

Q5.Can you just POP the value into any of the register?

Q6.Why do you want to use subroutine in your program?

Lab 6: Flags and Control flow

Assembly program will execute the code linearly down the memory address until it encounter program control flow instruction (JMP, JNZ, JG .....). We can use these program control flow instructions to manipulate our program to branch out to different sections based on the condition of the flags that has been set by previous arithmetic or logical operations.

Sample control flow structure for simple timer program

1024_Figure1.jpg

Procedure

Complete the following tasks.

1. Launch the EMU8086.

2. Copy and Paste below code into EMU8086 code windows

3. Single step execution with the flags windows open

4. Note value of AX,BX,CX after each execution

5. Look up each of the control instruction on EMU8086 tutorial and write down the condition of the branch. Compare those condition to the value of the flags when the jump happen.

org0100h

START: mov cl, 03h

LOOP_JNZ: dec cl
jnz LOOP_JNZ


movbl, 04h
mov al, 04h
LOOP_JZ: dec al
decbl
xorbl, al
jz LOOP_JZ


movbl, 02h
mov al, 06h
LOOP_JG: dec al
cmp al, bl
jg LOOP_JG


movbl, 06h
mov al, 00h
LOOP_JL: inc al
cmp al, bl
jl LOOP_JL

ret

Analysis

Q1.Can you write a program that use all of the branch conditions from EMU8086 tutorial and study how they work?

Lab 7: Flags and Control Flow

Pairs of ONEs
Given abinary number 11001011. Write a program that count how many pairs (consecutive) of 1 are in this binary string. For example, 11111111 has 7 total pair of 1, and 01101111 has 4 total pair of 1.

HINT: Use combination of knowledge from last 2 previous labs about flags, program flow instruction and binary shift operation to help you with designing this program.
SHL →
JZ →
  JNC →
  JNS →
  JS →
Procedure

Complete the following tasks.

1. Launch the EMU8086.
2. Copy and Paste below code into EMU8086 code windows
3. Single step execution with the flags windows open
4. Note value of AX and flags after each execution, and which operation cause value
of AL to behave the way it did?
5. What happens to the value of DX (more specifically DL) after each jump?

org0100h

 

         MOV ax,x    ; Move binary string into AX

START:   SHL ax,1    ; Shift content of AX to the left on

                                ; position

JZ  END                 ; The end of the string jump to END

JC  CALL PAIR_ONE   ; If the Carry flag is 1, then call

                                ; PAIR_ONE subroutine

         JNC START              ; If the Carry flag is 0, then start

                                ; the program again

ADD_ONE: INC dx                 ; INC DX after both condition are met

JMP START            ; Back to start and do it again                  

END:     NOP                    ; This is the end of the main program                  

ret

 

PAIR_ONE  PROC       ; Subroutine for comparison

                                ; after first stage (CF=1) is

                                ; met.

JS   CALL add_one          ; If sign flag is a 1, then both

                                ; condition are met. Jump to

                                ; ADD_ONE:

JNS   START          ; If sign flag is a 0, then back

                                ; to START to do it all over

                                ; again

RET

ENDP

 

x DW 0FFE6h                             ; Define string of 16 bits

                                       ; binary number to be checked

Analysis

Q1.Is there any other alternate way (flags) we can write this program?

Q2.Can you write a program that will give out the number of pair of 0's in a 16 bit string?

Lab 8: BCD to Binary

BCD:Short for Binary Coded Decimal, BCD is also known as packet decimal and is numbers 0 through 9 converted to four-digit binary. Below is a list of the decimal numbers 0 through 9 and the binary conversion.

Decimal to BCD conversion table:

Decimal

BCD

0

0000

1

0001

2

0010

3

0011

4

0100

5

0101

6

0110

7

0111

8

1000

9

1001

 

Using this conversion, the number 25, for example, would have a BCD number of 0010 0101 or 00100101. However, in binary, 25 is represented as 11001.

Covert following decimal numbers to BCD

24 →       1298 →
125 →       7 →
365 →     534 →

Convert following hex to binary

9 →         290A →
1E →       DDC →
FFF →      ABC →

Did you notice the pattern? Decimal is closely related to BCD (very easy to convert between the two) and the same can be said for Hexadecimal and Binary.

Binary to BCD Shift and Add-3 Algorithm

1. Shift the binary number left one bit.
2. If 8 shifts have taken place, the BCD number is in the Hundreds, Tens, and Units column.
3. If the binary value in any of the BCD columns is 5 or greater, add 3 to that value in that BCD column.
4. Go to 1.

CONVERT: 0Eh to BCD

Operation

Tens

Units

Binary

HEX

 

 

 

Start

 

 

1 1 1 0

Shift 1

 

1

1 1 0

Shift 2

 

11

10

Shift 3

 

111

0

Add 3

 

1 0 1 0

0

Shift 4

1

0 1 0 0

 

BCD

1

4

 

Procedure

Complete the following tasks.

1. Launch the EMU8086.
2. Look up and research usage of "ROL" instruction
3. Copy and Paste below code into EMU8086 code windows
4. Single step execution with the flags windows open
5. The code is for BCD to Binary converter
6. Follow the single step and watch the value of the registers after each operation

org0100h

BCDBIN:         xorax,ax       ; clear ax by xor it w/ itself

mov dx, BCD

movch, 4       ; counter is 4 digit

X10:            shl ax, 1       ; 10x routine by using shl

movbx, ax

mov cl, 2

shl ax, cl

addax,bx

ADDDIGIT:       mov cl, 4       ; specify how many bits to shift

rol dx, cl      ; roll bit left by "cl" bit = 4 bits

movbx,dx

andbx, 000fh   ; mask off our shifted DX

addax,bx

decch

jnz x10

ret

BCD dw 6789h

Analysis

Q1.Can you come up with the algorithm use for BCD to Binary converter after watching the program run?

Q2.Can you write a program to convert Binary to BCD using the shift and add 3 algorithm?

Q3.What did "ROL" do to our program when it got executed?

Lab 9: Arithmetic Operation (revisit)

2431_Figure.jpg

Procedure

Write programs to do following arithmetic operation in EMU 8086 and execute them using single step mode.

AL = 12h
BL = 13h

  1) AL + BL
  2) BL - AL
  3) AL * BL
  4) AL / BL

AX = 0123h
BX = 2000h
DX = 0FF3h

   1) AX + DX
   2) AX - BX
   3) AX * DX
   4) AX / DX
   5) Negate BX
   6) Compare AX and DX

Analysis

Q1. What are the main differences between first set of operation and second set of operation?

Q2. Did you notice what happens to the remainder in the division operation?

Q3. What is the syntax for multiplication and division?
Are they different from addition/subtraction? How?

Q4. What happens to the flags when you do subtraction in the second set?

Q5. What happens to the (all) flags when you do NEG operation?

Q6. What happens to the (all) flags when you do CMP operation?

Lab 10: Connect to Outside World Applications

Input and Output (I/O) in 8086 Assembly Language

Each microprocessor provides instructions for I/O with the devices that are attached to it, in this lab we will just talk about OUT instruction.

OUT → Output from AL or AX to port.

First operand is a port number. If required to access port number over 255 - DX register should be used.
Example:

MOV AX, 0FFFh   ; turn on all the light (or turn all binary to 1)
OUT 4, AX           ; output content of AX to port 4

EMU8086 provide us with the virtual LED (output display). We can use this simple LED virtual output to test how to write a simple program that send output to the outside world.

Procedure

1. Open EMU8086

2. Copy and paste the following code into the code editor part of EMU8086

3. Single step execute the code and watch the register and flags

4. Keep LED display windows where you can see how the display changes

#start=led_display.exe#

#make_bin#

name "led"

          mov ax, 1234

          out 199, ax

 

          mov ax, -5678

          out 199, ax

; loop to write

; values to port up to specify

; number (in this case it is 0010h):

          mov ax, 0

x1:

          out 199, ax 

          inc ax

          cmp ax, 0FFFEh

          jmp x1

ret

Analysis

Q1. What do you have to change if we want to count all the way up to 255(decimal)?

Q2. Can you think of any practical purpose for program like this in our real life applications?

Lab 11: Connect to Outside World Applications (Continued)

Input and Output (I/O) in 8086 Assembly Language

Each microprocessor provides instructions for I/O with the devices that are attached to it, in this lab we will just talk about OUT instruction.

OUT → Output from AL or AX to port.

First operand is a port number. If required to access port number over 255 - DX register should be use.
Example:

MOV AX, 0FFFh ; turn on all the light (or turn all binary to 1)
OUT 4, AX         ; output content of AX to port 4

This short program for emu8086 shows how to keep constant temperature using heater and thermometer (between 60° to 80°). It is assumed that air temperature is lower 60°.

Procedure

1. Open EMU8086
2. Copy and paste the following code into the code editor part of EMU8086
3. Execute the code (not in single step mode) and watch the running code display
4. Keep thermometer display where you can see.

#start=thermometer.exe#

; temperature rises fast, thus emulator should be set to run at the maximum speed.

; if closed, the thermometer window can be re-opened from emulator's "virtual devices" menu.

#make_bin#

name "thermo"

; set data segment to code segment:

        mov ax, cs

        mov ds, ax

start:

         inal, 125

         cmp al, 60

         jl  low

         cmp al, 80

         jle  ok

         jg   high

low:

         mov al, 1

         out 127, al   ; turn heater "on".

         jmp ok

high:

          mov al, 0

          out 127, al   ; turn heater "off".

ok:

        jmp start       ; endless loop

Analysis

Q1.How did this program monitor the temperature?

Q2.What port number is used to control the heater?

Homework Help/Study Tips, Others

  • Category:- Homework Help/Study Tips
  • Reference No.:- M92300881
  • Price:- $170

Guranteed 48 Hours Delivery, In Price:- $170

Have any Question?


Related Questions in Homework Help/Study Tips

Review the website airmail service from the smithsonian

Review the website Airmail Service from the Smithsonian National Postal Museum that is dedicated to the history of the U.S. Air Mail Service. Go to the Airmail in America link and explore the additional tabs along the le ...

Read the article frank whittle and the race for the jet

Read the article Frank Whittle and the Race for the Jet from "Historynet" describing the historical influences of Sir Frank Whittle and his early work contributions to jet engine technologies. Prepare a presentation high ...

Overviewnow that we have had an introduction to the context

Overview Now that we have had an introduction to the context of Jesus' life and an overview of the Biblical gospels, we are now ready to take a look at the earliest gospel written about Jesus - the Gospel of Mark. In thi ...

Fitness projectstudents will design and implement a six

Fitness Project Students will design and implement a six week long fitness program for a family member, friend or co-worker. The fitness program will be based on concepts discussed in class. Students will provide justifi ...

Read grand canyon collision - the greatest commercial air

Read Grand Canyon Collision - The greatest commercial air tragedy of its day! from doney, which details the circumstances surrounding one of the most prolific aircraft accidents of all time-the June 1956 mid-air collisio ...

Qestion anti-trustprior to completing the assignment

Question: Anti-Trust Prior to completing the assignment, review Chapter 4 of your course text. You are a manager with 5 years of experience and need to write a report for senior management on how your firm can avoid the ...

Question how has the patient and affordable care act of

Question: How has the Patient and Affordable Care Act of 2010 (the "Health Care Reform Act") reshaped financial arrangements between hospitals, physicians, and other providers with Medicare making a single payment for al ...

Plate tectonicsthe learning objectives for chapter 2 and

Plate Tectonics The Learning Objectives for Chapter 2 and this web quest is to learn about and become familiar with: Plate Boundary Types Plate Boundary Interactions Plate Tectonic Map of the World Past Plate Movement an ...

Question critical case for billing amp codingcomplete the

Question: Critical Case for Billing & Coding Complete the Critical Case for Billing & Coding simulation within the LearnScape platform. You will need to create a single Microsoft Word file and save it to your computer. A ...

Review the cba provided in the resources section between

Review the CBA provided in the resources section between the Trustees of Columbia University and Local 2110 International Union of Technical, Office, and Professional Workers. Describe how this is similar to a "contract" ...

  • 4,153,160 Questions Asked
  • 13,132 Experts
  • 2,558,936 Questions Answered

Ask Experts for help!!

Looking for Assignment Help?

Start excelling in your Courses, Get help with Assignment

Write us your full requirement for evaluation and you will receive response within 20 minutes turnaround time.

Ask Now Help with Problems, Get a Best Answer

Why might a bank avoid the use of interest rate swaps even

Why might a bank avoid the use of interest rate swaps, even when the institution is exposed to significant interest rate

Describe the difference between zero coupon bonds and

Describe the difference between zero coupon bonds and coupon bonds. Under what conditions will a coupon bond sell at a p

Compute the present value of an annuity of 880 per year

Compute the present value of an annuity of $ 880 per year for 16 years, given a discount rate of 6 percent per annum. As

Compute the present value of an 1150 payment made in ten

Compute the present value of an $1,150 payment made in ten years when the discount rate is 12 percent. (Do not round int

Compute the present value of an annuity of 699 per year

Compute the present value of an annuity of $ 699 per year for 19 years, given a discount rate of 6 percent per annum. As