8086 Program to find 1's compliment
·
We have a number. Let the number be loaded in
the register AX. Now, we have to find 1’s complement of this number. One’s
complement of a number means to invert each bit of a number. NEG instruction in
8086 allows us, to find 2’s complement of a number, subtracting 1 from 2’s
complement gives the 1’s complement of the number.
eg.
: AX = 1234 H.
|
|
0001
|
0010
|
0011
|
0100
|
= 1234 H
|
NEG AX
|
|
1110
|
1101
|
1100
|
1100
|
= EDCC
|
SUB AX, 1
|
–
|
|
|
|
1
|
|
|
|
1110
|
1101
|
1100
|
1011
|
= EDCB
|
·
i.e. 1’s complement of 1234 H = EDCB.
Algorithm :
Step I : Initialize the data memory.
Step II : Load the number in AX.
Step III : Find 2’s complement of number.
Step IV : 1’s comp = 2’s comp – 1.
Step V : Display the result.
Step VI : Stop.
Flowchart :
Program :
.model small
.data
a dw 1234H
.code
mov ax,
@data ; Initialize data section
mov ds,
ax
mov ax,
a ; Load number1 in ax
neg ax ; find 2's compement. Result in
ax
sub ax,
1 ; 1's complement=2's comp-1
mov ch,
04h ; Count of digits to be
displayed
mov cl,
04h ; Count to roll by 4 bits
mov bx,
ax ; Result in reg bx
l2: rol bx,
cl ; roll bl so that msb comes
to lsb
mov dl,
bl ; load dl with data to be
displayed
and dl,
0fH ; get only lsb
cmp dl,
09 ; check if digit is 0-9 or
letter A-F
jbe l4
add dl, 07 ;
if letter add 37H else only add 30H
l4: add dl, 30H
mov ah, 02 ;
Function 2 under INT 21H (Display character)
int 21H
dec ch ;
Decrement Count
jnz l2
mov ah, 4cH ;
Terminate Program
int 21H
end
Result :
C:\programs>tasm
1'scomp.asm
Turbo
Assembler Version 3.0 Copyright (c) 1988, 1991 Borland
International
Assembling
file: 1'scomp.asm
Error
messages: None
Warning
messages: None
Passes: 1
Remaining memory: 438k
C:\programs>tlink
1'scomp.obj
Turbo Link Version 3.0 Copyright (c) 1987, 1990 Borland
International
Warning: No
stack
C:\programs>1'scomp
EDCB
C:\programs>
0 comments:
Post a Comment