Professional Documents
Culture Documents
Interfacing techniques
Lecture # 05 1
IN and OUT
• IN & OUT instructions perform I/O operations.
• Contents of AL, AX, or EAX are transferred only
between I/O device and microprocessor.
• an IN instruction transfers data from an external
I/O device into AL, AX, or EAX
• an OUT transfers data from AL, AX, or EAX to an
external I/O device
• Only the 80386 and above contain EAX
2
• Often, instructions are stored in ROM.
• a fixed-port instruction stored in ROM has its port
number permanently fixed because of the nature
of read-only memory
• A fixed-port address stored in RAM can be modified,
but such a modification does not conform to good
programming practices.
• The port address appears on the address bus during
an I/O operation.
3
• Two forms of I/O device (port) addressing:
• Fixed-port addressing allows data transfer between AL,
AX, or EAX using an 8-bit I/O port address.
• port number follows the instruction’s opcode
• IN instruction syntax:
IN AL,port address; AL or AX can be
used only.
• Variable-port addressing allows data transfers between
AL, AX, or EAX and a 16-bit port address.
• IN AL,DX; only DX can be used here
• the I/O port number is stored in register DX,
which can be changed (varied) during the execution of
a program. 4
Arithmetic and Logic
Instructions
• Most arithmetic instructions affect the FLAGS register.
• Carry Flag (C)
• Zero Flag (Z)
• Sign Flag (S)
• Overflow Flag (O)
• Parity Flag (P)
• Interrupt enable Flag (I)
• Direction Flag (D)
• Auxiliary Flag (A)
5
1st group: ADD, SUB,CMP, AND, TEST, OR, XOR
6
ADD, SUB,CMP, AND, TEST, OR, XOR (cont)
7
ADD, SUB,CMP, AND, TEST, OR, XOR (cont)
8
More About AND, OR, XOR
• AND operator gives 1 only if both operands are 1.
• OR operator gives 1 if at least one operand is 1.
• XOR operator gives 1 only if the operands are different.
9
2nd Group: MUL, IMUL, DIV,
IDIV
• These types of operands are supported:
• REG
• Memory
• REG: AX, BX, CX, DX, AH, AL, BL, BH, CH, CL, DH, DL, DI, SI, BP, SP.
• memory: [BX], [BX+SI+7], variable, etc.
• MUL and IMUL instructions affect these flags only:
• C, O
• When result is over operand size these flags are set to 1, when
result fits in operand size these flags are set to 0.
10
MUL and IMUL
• MUL - Unsigned multiply
• When operand is a byte: AX = AL * operand.
• When operand is a word: (DX AX) = AX * operand.
• IMUL - Signed multiply
• When operand is a byte: AX = AL * operand.
• When operand is a word: (DX AX) = AX * operand.
11
DIV and IDIV
• DIV - Unsigned divide
• When operand is a byte:
• AL = AX / operand and AH = remainder (modulus).
• When operand is a word:
• AX = (DX AX) / operand and DX = remainder (modulus)
• IDIV - Signed divide
• When operand is a byte:
• AL = AX / operand and AH = remainder (modulus)
• When operand is a word:
• AX = (DX AX) / operand and DX = remainder (modulus)
12
3rd Group: INC, DEC, NOT, NEG
• These types of operands are supported:
• REG
• Memory
• REG: AX, BX, CX, DX, AH, AL, BL, BH, CH, CL, DH, DL, DI, SI, BP, SP.
• memory: [BX], [BX+SI+7], variable, etc.
13
INC and DEC
• INC: Increments the operand by 1.
• DEC: Decrements the operand by 1.
• INC, DEC instructions affect these flags only:
• Z, S, O, P, A
14
NOT and NEG
• NOT - Reverse each bit of operand.
• NEG - Make operand negative (two's complement). Actually it
reverses each bit of operand and then adds 1 to it. For
example 5 will become -5, and -2 will become 2
• NOT instruction does not affect any flags.
• NEG instruction affects these flags only:
• C, Z, S, O, P, A
15
Assignment
• Write a code in assembly language of 8086 to generate a table
of 4 and save a the values in some memory location.
16