8086 program To find 1’s complement of a number.




ØØ       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
·            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 : 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>