8086 program To find 1’s complement of a number.
11:23
ØØ Explanation :
· 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
|
ØØ 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 : Refer flowchart 1.
ØØ Program :
.model small
Flowchart 1
.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: