New Microsoft Word Document
New Microsoft Word Document
s Z X AC X P X CY
B=20H MOV A,B
FLAGS??
20H =00100000
78=011110000
9F=10011111
[B][[HL]]
Mov M,B
[C]
MVI
LXI
LDA
STA
LDAX
STAX
LHLD
SHLD
XCHG
MVI B,20H
MVI C,60H
LXI B,2060H
A=F2H
0000H
2050H F8H
STA 2050H
LDA STA
LDAX STAX
LDAX RP
EG: LDAX B LDA 2050H
LDAX D
LDAX H
[B]=20H
[C]=50H
[2050H]=9FH
LDAX B
[H]=20H
[L]=50H
[2050H]=9FH
LDAX HXXX MOV A,M
[A]=A2H
[B]=20H
[C]=50H
[2050H]=9FH
STAX B
[2050H]=A2H
MOV B,D
MOV D,H
MOV H,B
XCHG
HW: [email protected]
ASSUME [B]=20H, [C]=30H, [H]=40H, [L]=50H
EXCHANGE THE CONTENT OF B WITH H AND C WITH L
I. USING XCHG
II. WITHOUT USING XCHG
I sol
XCHG ; HL==DE EXCHANGE
MOV D,B
MOV E,C
XCHG
MOV B,D
MOV C,E
LDA 2050H
0000H
2050H A2H
2051H C5H
FFFFH
0000H
2050H A2H
2051H C5H
FFFFH
L=52H
H=9CH
SHLD 2050H
2050= 52H
2051= 9CH
H= 9CH
L= 52H
MOV MVI LXI LDA STA LDAX STAX XCHG LHLD SHLD
ADD B
INR B
INR A
B=FFH
INR B
B=00H
00
01
10
11
00
1. ADD
SYNTAX
ADD REG
ADD MEM
EG: ADD B [A]+[B]=[A]
ADD C [A]+[C]=[A]
ADD M [A]+[[HL]]=[A]
## [B]=59H
[A]=47H
ADD B [A]=?
[F] =?
59H=01011001
47H=01000111
=A0H
10100000
S Z X AC X P X CY
1 0 1 1 0
MVI A,76H
LXI H,2050H ;MVI H,20H
;MVI L,50H
ADD M
HLT
76H= 01110110
A2H= 10100010
100011000
[A]=18H
S Z X AC X P X CY
0 0 0 1 1
ADD ADI ADC ACI
SUB SUI SBB SBI
MVI B,20H
ADI
SYNTAX ADI 8_BIT_DATA
EG: ADI 20H [A]=[A]+20H
ADC
SYNTAX: ADC REG
ADC MEM
EG: ADC D ; [A]=[A]+[D]+CY
ADC M ; [A]=[A]+[[HL]]+CY
###
[BC]=2498H
[DE]=54A1H ADD BC AND DE AND STORE RESULT IN BC.
[BC]=[BC]+[DE]
MOV A,C ; [A]=98H
ADD E ; [A]=[A]+[E]
MOV C,A ;[C]=SUM
MOV A,B
ADC D
MOV B,A
HLT 1
2498H 0 0 1 0 0 1 0 0 1 0 0 1 1 0 0 0
54A1 0 1 0 1 0 1 0 0 1 0 1 0 0 0 0 1
H
ADC 0 1 1 1 1 0 0 1 0 0 1 1 1 0 0 1
ADD 0 1 1 1 1 0 0 0
[BC]=7939H
ASSUME [BC]=81A2. ADD 67C2H WITH BC AND STORE THE RESULT IN BC ITSELF.
MOV A,C
ADI C2H
MOV C,A
MOV A,B
ACI 67H
MOV B,A
HLT
SUI
Syntax: SUI 8_bit_data
Eg: SUI A3H [A]<-[A]-A3H
SBB
SYNTAX: SBB REG
SBB MEM
EG: SBB D ;[A]<-[A]-[D]-CY ===[A]-{[D]+CY}
SBB M ;[A]
45
26
19
0R 4-2-1 OR 4-(2+1) or (4-1)-2
ASSUME REGISTER PAIR BC CONTAINS 3737H AND ANOTHER REG PAIR DE CONTAINS 3F40H.
SUBSTRACT THE CONTENTS OF DE FROM BC AND STORE THE RESULT IN BC REGISTER ITSELF.
[BC]=3737H
[DE]=3F40H
[BC][BC]-[DE]
Calculation:
[BC]=3737H = 0011 0111 0011 0111
[DE]=3F40H = 0011 1111 0100 0000
[BC] =?
[F] =?
0 0 1 1 0 1 1 1
0 1 0 0 0 0 0 0
1 0 1 1 1 1 1 1
+ 1
1 1 0 0 0 0 0 0
1 1 1 1 0 1 1 1
[A]=F7H
S Z X AC X P X CY
1 0 0 0 1
[C]=F7H
[A] 0 0 1 1 0 1 1 1
[D] 0 0 1 1 1 1 1 1
CY + 1
[D]+CY 0 1 0 0 0 0 0 0
1S COM 1 0 1 1 1 1 1 1
+ 1
2S COM 1 1 0 0 0 0 0 0
[A]-{[D] 1 1 1 1 0 1 1 1
+CY}
[A]=F7H
S Z X AC X P X CY
1 0 0 0 1
[B]=F7H
[BC]=F7F7H
SBI
SYNTAX: SBI 8_BIT_DATA
EG: SBI A7H ; [A][A]-A7H-CY OR [A][A]-{A7H+CY}
INR
SYNTAX: INR REG
INR MEM
EG: INR D ;[D][D]+1
INR M ;[[HL]][[HL]]+1
INR H ;[H][H]+1
9000H 01H
9001H 50H
9002H 20H
[HL]=9001H
INR M ;????
[HL]=9001H
[9001H]=51H
DCR
Syntax: DCR Reg
DCR Mem
Eg: DCR H ; [H][H]-1
DCR L ; [L][L]-1
DCR M ; [[HL]][[HL]]-1
EG: [B]=00H
DCR B ;????
1------ 1s comp===0====1
1= 00000001
1S C= 11111110
+1= 00000001
2S C= 11111111
00H= 00000000
[B]=11111111=FFH
INR DCR
INX DCX
INX
SYNTAX
INX REG_PAIR
EG:
INX B ;[BC][BC]+1
INX D ;[DE][DE]+1
INX H ;[HL][HL]+1
EG: [HL]9FFFH . ASSUME MEMORY LOCATION CONTAINS B0H
1. INR H ; [H]=A0H [L]=FFH [[HL]]=B0H NOW HL REG POINTS A0FFH
2. INR L ; [H]= 9FH [L]=00H [[HL]]=B0H NOW HL REG POINTS 9F00H
3. INR M ; [H]=9FH [L]=FFH [[HL]]=B1H NOW HL REG POINTS 9FFFH
4. INX H ; [H]= A0H [L]= 00H [[HL]]=B0H
9FFFH=1001111111111111
1
1010000000000000 =A000H
INR M ; [H]=A0H [L]= 00H [[HL]]= B1H
ASSUME MEMORY LOCATION 3050H CONTAINS 12H 3051 CONTAINS 14H AND 3052 CONTAINS
16H. ADD THESE NUMBERS AND STORE THE RESULT IN MEMORY LOCATION 3053H.
3050H 12H
3051H 14H
3052H 16H
3053H XXH
LXI H,3050H ;LDA 3050H ;XX
MOV A,M
INX H
ADD M
INX H ; INR L XX
ADD M
INX H ; STA 3053H
MOV M,A
HLT
DAD
SYTAX: DAD REG_PAIR
EG: DAD B ; [HL][HL]+[BC]
DAD D ; [HL][HL]+[DE]
DAD H ; [HL][HL]+[HL]; ie doubles the content of HL register
Eg: [H]=25H, [L]=54H, [D]=26H, [E]=23H
DAD D ;??
HL=2554H 2 5 5 4
DE=2623H 2 6 2 3
HL=4B77H 4 B 7 7
HL=2554H 2 5 5 4
HL=2554H 2 5 5 4
HL=4AA8H 4 A A 8
09=00001001
10=00010000
NO BCD HEX
00 00000000 00000000
01 00000001 00000001
09 00001001 00001001
10 00010000 00001010 (0AH)
MVI A,01H
ADI 09H ; [A]=0AH
DAA [A]=00010000=10H
12H 0 0 0 1 0 0 1 0
39H 0 0 1 1 1 0 0 1
4BH 0 1 0 0 1 0 1 1
+ 0 0 0 0 0 1 1 0
51H 0 1 0 1 0 0 0 1
85H 1 0 0 0 0 1 0 1
68H 0 1 1 0 1 0 0 0
EDH 1 1 1 0 1 1 0 1
+ 0 1 1 0 0 1 1 0
53H 0 1 0 1 0 0 1 1
CY =1
99H 1 0 0 1 1 0 0 1
99H 1 0 0 1 1 0 0 1
32H, 0 0 1 1 0 0 1 0
cy=1
+ 0 1 1 0 0 1 1 0
98H 1 0 0 1 1 0 0 0
CY=1
ANDING= ANA ANI
ORING= ORA ORI
XORING= XRA XRI
Bitwise operation:
set individual bit, put 1 in that bit and zeroes on others and do OR operation with that pattern
(mask)
reset individual bit, put 0 in that bit and ones on others and do AND operation with that pattern
(mask)
complement individual bit, put 1 in that bit and zeroes on others and do XOR operation with
that pattern (mask)
Eg: Set bit D4 of [A]
i.e. ORI 10H ; sets bit D4 of [A]
[A]=xxH x x x x x x x X
Masking 0 0 0 1 0 0 0 0
pattern=10H
OR
[A] x x x 1 x x x X
Eg: Reset bit D5 of [A]
i.e. ANI DFH ;resets bit D5 of [A]
[A]=xxH x x x x x x x X
Masking 1 1 0 1 1 1 1 1
pattern=DFH
AND
[A] x x 0 x x x x X
Eg: Complement bit D6 of [A]
i.e. XRI 40H
[A]=xxH X X X X x X X X
Masking 0 1 0 0 0 0 0 0
pattern=40H
XOR
[A]=00H X x’ X X X X X X
ANA/XRA/ORA
SYNTAX: ANA/XRA/ORA REG
ANA/XRA/ORA MEM
EG: ANA/XRA/ORA B
ANA/XRA/ORA M
ANA B ;[A][A]AND[B]
XRA M ;[A][A]XOR[[HL]]
ORA D ;[A][A]OR[D]
[A]=54H
[D]=82H
ANA D
[A]=54H 0 1 0 1 0 1 0 0
[D]=82H 1 0 0 0 0 0 1 0
[A]=00H 0 0 0 0 0 0 0 0
ANI/XRI/ORI
ANI/XRI/ORI 8_BIT_DATA
EG ANI/XRI/ORI 30H
ANI 30H ;[A][A]AND30H
ORI 30H ;[A][A]OR30H
XRI 30H ;[A][A]XOR30H
[A]=54H
[D]=82H
XRA D
[A]=54H 0 1 0 1 0 1 0 0
[D]=82H 1 0 0 0 0 0 1 0
[A]=D6 1 1 0 1 0 1 1 0
H
[A]=54H
[D]=82H
ORA D
[A]=54H 0 1 0 1 0 1 0 0
[D]=82H 1 0 0 0 0 0 1 0
[A]=D6 1 1 0 1 0 1 1 0
H
Compare
X??Y check X-Y
CMP CPI
CMP
Syntax: CMP reg
CMP Mem
Eg: CMP D ; [A]?[D] [A]=50H [D]=40H
CMP B
CMP M
[A] [D] Z CY
50H 40H 0 0 A>D
50H 50H 1 0 A=D
40H 50H 0 1 A<D
Z CY
0 0 [A]>[D]
1 0 [A]=[D]
0 1 [A]<[D]
00010000
00000000
[A]=57H= 01010111
[B]=62H =01100010
=10011101
+1 = 1
=10011110
=01010111
=11110101
S=1
Z=0
Ac=1
P=1
Cy=1
CPI
CPI 8_bit_data
Eg: CPI 20H ; [A]??20H
ROTATE
Operand X
RLC RRC RAL RAR
RLC ( Rotate Accumulator Left Without Carry)
[A]=01010101
RLC
LEFT WITHOUT CARRY
[A]=
CY D7 D6 D5 D4 D3 D2 D1 D0
[A] X 0 1 0 1 0 1 0 1
ROTATE 0 1 0 1 0 1 0 1 0
LEFT
D7 D6 D5 D4 D3 D2 D1 D0 D7
CY=D7
D0=D7
D7=D6
D6=D5
DN+1=DN
CY D7 D6 D5 D4 D3 D2 D1 D0
[A]=A7 0 1 0 1 0 0 1 1 1
H
RLC 1 0 1 0 0 1 1 1 1
[A]=4FH D7 D6 D5 D4 D3 D2 D1 D0 D7
CY=1
CY D7 D6 D5 D4 D3 D2 D1 D0
[A]=A7H 0 1 0 1 0 0 1 1 1
RRC 1 1 1 0 1 0 0 1 1
[A]=D3 D0 D0 D7 D6 D5 D4 D3 D2 D1
H
CY=1
CY=D0
D7=D0
D0=D1
D1=D2
DN=DN+1
CY D7 D6 D5 D4 D3 D2 D1 D0
[A]=A7 0 1 0 1 0 0 1 1 1
H
RAL 1 0 1 0 0 1 1 1 0
[A]=4EH D7 D6 D5 D4 D3 D2 D1 D0 CY
CY=1
CY D7 D6 D5 D4 D3 D2 D1 D0
[A]=A7H 1 1 0 1 0 0 1 1 1
RAR 1 1 1 0 1 0 0 1 1
[A]=D3 D0 CY D7 D6 D5 D4 D3 D2 D1
H
CY=1
[A]=89H=10001001
CMA
[A]=01110110=76H
UNCONDITIONAL JUMP:
JMP
SYNTAX: JMP 16_BIT_ADDRESS
EG: JMP 2000H
CONDITIONAL JUMP:
INT A=6;
INT B=7;
INT ADD(A,B);
INT ADD(C,D)
E=C+D;
LXI SP,9000H
8FFCH
8FFDH
8FFEH 08H
8FFFH 10H
9000H
9001H
9002H
9003H
PC=PCH PCL
PCL=08H
PCH=10H
[PC]=1008H
CALL 2000H
[SP] [SP]-1
[[SP]][PCH]
[SP] [SP]-1
[[SP]][PCL]
[PC]=2000H
RET
[PCL][[SP]]
[SP][SP]+1
[PCH][[SP]]
[SP][SP]+1
[PC]=MAIN_PROG_ADD
CALL 0000H
0R
RST 0
PUSH
Syntax: PUSH Reg_Pair
Eg: PUSH B ; [BC]STACK
PUSH D ; [DE]STACK
PUSH H ; [HL]STACK
PUSH PSW ; [AF]STACK ;PROGRAM/PROCESSOR STATUS WORD
LXI SP,A000H LXI SP,9000H LXI SP,2099H ;[BC]=3257H
CALL 9000H PUSH B ;PSW PUSH B
[SP][SP]-1 [SP][SP]-1
[[SP]][PCH] [[SP]][B] ;[A] [[SP]]32H
[SP][SP]-1 [SP][SP]-1
[[SP]][PCL] [[SP]][C] ;[F] [sp]=8ffe [[SP]]57H
PUSH PSW; F= 10101010
[[SP]]=XXXXXXXX
POP
Syntax: POP Reg_Pair
Eg: POP B ; [BC]STACK
POP D ; [DE]STACK
POP H ; [HL]STACK
POP PSW ; [AF]STACK ;PROGRAM/PROCESSOR STATUS WORD
LXI SP,9000H LXI SP,9000H LXI SP,2099H ;[BC]=3257H
RET POP B ;PSW POP B
[PCL][[SP]] [C][[SP]]
[SP][SP]+1 [SP][SP]+1 ;[F] [[SP]]32H
[PCH][[SP]] [B][[SP]]
[SP][SP]+1 [SP][SP]+1 ;[A] [[SP]]57H
PUSH PSW; F= 10101010
[[SP]]=XXXXXXXX
PCHL
LXI H,2000H ;[HL]=2000H
PCHL ;[PC]=2000H
XTHL
DATA TRANSFER
IN
Syntax: IN 8_bit_port_address ;range: 00HFFH
Eg: 6000H IN 20H ;[A]<--[20H]
6000h Opcode of IN
6001h 20h
Input port F2H contains data CEH. Transfer the content of that port to the accumulator.
IN F2H
OUT
Syntax: OUT 8_bit_port_add
Eg: OUT 20H ;[20H][A]
## Alarm clock is connected to the output port 00H. Alarm clock starts when input to it is F8H.
WAP to start this alarm clock.
Alarm clock
FFH
MVI A,F8H
OUT 00H
[D]XX
[E]xx
[D]+[E]
SUM > FFH=====DISPLAY 01H AT PORT FEH----------1
SUM<=FFH=====DISPLAY SUM AT PORT FEH--------2
SUM==A A???FFH
CPI FFH
CY/Z===???
SUM>FFH====CY=0,Z=0-----1 JC/JNC JZ/JNZ
SUM=FFH===CY=0,Z=1-----2
SUM<FFH===CY=1,Z=0-----2
JNC LABEL1 JC COND2
JZ COND2
SUM==A A???FFH
SUM>FFH====CY=1 = MVI A,01H OUT FEH
SUM<=FFH======CY=0 OUT FEH
LXI D,ABCDH
MOV A,D
ADD E ;[A]SUM=ABH+CDH
JC LABEL1
JMP LABEL2
LABEL1: MVI A,01H
LABEL2: OUT FEH
HLT
OR
; SUM==A A???FFH
SUM>FFH====CY=1 = MVI A,01H OUT FEH HLT
SUM<=FFH======CY=0 OUT FEH HLT
1 byte of data
2 bytes of data
10 bytes of data
10 data
16 bit data
16 bytes data
16 16 bit data
16 bytes of data are stored in memory location starting from 9100H to 910FH. WAP to transfer
these data to another memory location starting from 9000H.
LXI H, 9100H ; sourcce memory pointer
lXI B, 9000H ; destination memory pointer
MVI D, 10H ; COUNTER REGISTER TO COUNT 16
LABEL:
MOV A, M ;[D]=23H
STAX B ;[9000H]<--23H
INX H ; HL POINTER (S0URCE) INCREMENTED BY 1
INX B ; BC POINTER (DEST) INCREMENTED BY 1
DCR D
JNZ LABEL
HLT
16 bytes of data are stored in memory location starting from 9100H to 910FH. WAP to transfer
these data to another memory location starting from 9104H.
LXI H, 9100H ; sourcce memory pointer
lXI B, 9000H ; destination memory pointer
MVI D, 10H ; COUNTER REGISTER TO COUNT 16
LABEL:
MOV A, M ;[D]=23H
STAX B ;[9000H]<--23H
INX H ; HL POINTER (S0URCE) INCREMENTED BY 1
INX B ; BC POINTER (DEST) INCREMENTED BY 1
DCR D
JNZ LABEL
Or
9100
9101
9102
9103
9104
9105
.
.
.
.
.
910F XX
.
.
.
9113H XX
D7 D6 D5 D4 D3 D2 D1 D0
x x x x x x x x
LABEL:
MOV D,B
RET
AND
ANA, ANI 01000000=40H result= or 10111111
D7 D6 D5 D4 D3 D2 D1 D0 Remarks
XX x x x x x x x x
ORI 80H 1 x x x x x x x To set a particular bit, create a mask:
10000000 That particular bit=1 and all other bits=0
and then use OR
ANI BFH x 0 x x x x x x To reset a particular bit, create a mask:
10111111 That particular bit=0 and all other bits=1
and then use AND
XRI 10H x x x x́ x x x x To complement a particular bit, create a
00010000 mask:
That particular bit=1 and all other bits=0
and then use XOR
OR
Y OR 1 result = 1 (result always SET)
Y OR 0 Result = Y (as it is)
AND
Y AND 1 result = Y (as it is)
Y AND 0 Result = 0 (Result always RESET)
XOR
Y XOR 1 result = Ý (bit complement)
Y XOR 0 result = Y (as it is)
Write a program to add 2 bytes of data at memory location starting at 9000H and 9001H and store the
result at 9002H
Write a program to add 10 bytes of data at memory location starting at 9000H and 9001H and store
the result at 9002H
NOTE: CARRY HAS NOT BEEN CONSIDERED
LXI H,9000H ; MEMORY POINTER
MVI D,09H ; COUNTER
MOV A,M ; FIRST DATA TO ACCUMULATOR
LABEL:
INX H
ADD M
DCR D
JNZ LABEL
HLT
Orr
LXI H,9000H ; MEMORY POINTER
MVI D,0AH ; COUNTER
MVI A,00H
LABEL:
ADD M
INX H
DCR D
JNZ LABEL
HLT
Io/M’ RD’ WR’ What happens??
0 0 0 invalid
0 0 1 Memr’
0 1 0 MEMW’
0 1 1 Neither read nor write
1 0 0 invalid
1 0 1 IOR’
1 1 0 IOW’
1 1 1 Neither read nor write