Home arrow 8086 Assembly Programs arrow Add n BCD numbers Friday, 05 December 2008
Home
- - - - - - -
Contact me!
My Blog!
- - - - - - -
- - - - - - -
8086 Assembly Programs
Graphics
Java Servlets
Prolog
VHDL
- - - - - - -
Ubuntu Linux
- - - - - - -
Links
Statistics
Visitors: 43315

   
Add n BCD numbers
Written by Rohit   
Monday, 10 April 2006
  1. .model small
  2. .stack 100
  3. .data
  4.     current db 0h
  5.     count db 0h
  6.     sum db 0,0
  7.     strtmsg db "How many numbers to add (02-99)?", 13, 10, "$"
  8.     msg1 db 13, 10, "Enter the number (", "$"
  9.     msg2 db ") $", 13, 10
  10.     ansis db "The sum of the numbers is $"
  11. .code
  12. main proc far
  13.     mov ax, @data
  14.     mov ds, ax
  15.     mov dx, offset strtmsg
  16.     mov ah, 09h
  17.     int 21h
  18.     call get2dignum
  19.     inc al
  20.     mov count, al
  21.     mov current, al
  22.     dec current
  23.     cmp al, 02h
  24.     jae lop
  25.     jmp ext
  26. lop:    mov dx, offset msg1 ;Prompt to enter the number
  27.     mov ah, 09h
  28.     int 21h
  29.     mov al, count
  30.     sub al, current
  31.     das
  32.     mov dl, al
  33.     mov ch, dl
  34.     and dl, 0f0h
  35.     mov cl, 04h
  36.     rol dl, cl
  37.     or dl, 30h
  38.     mov ah, 02h
  39.     int 21h
  40.     mov dl, ch
  41.     and dl, 0fh
  42.     or dl, 30h
  43.     mov ah, 02h
  44.     int 21h
  45.     mov dx, offset msg2
  46.     mov ah, 09h
  47.     int 21h
  48.     mov al, current
  49.     sub al, 01h
  50.     das
  51.     mov current, al
  52.     call get2dignum
  53. ;Add the number
  54.     add al, sum+1
  55.     daa
  56.     mov sum+1, al
  57.     jnc nocarry
  58.     inc sum
  59. nocarry:cmp current, 00h
  60.     jne lop
  61.     mov dl, 13
  62.     mov ah, 02h
  63.     int 21h
  64.     mov dl, 10
  65.     mov ah, 02h
  66.     int 21h
  67.     mov dx, offset ansis
  68.     mov ah, 09h
  69.     int 21h
  70. mov dl, sum
  71.     mov ch, dl
  72.     and dl, 0f0h
  73.     mov cl, 04h
  74.     rol dl, cl
  75.     or dl, 30h
  76.     mov ah, 02h
  77.     int 21h
  78.     mov dl, ch
  79.     and dl, 0fh
  80.     or dl, 30h
  81.     mov ah, 02h
  82.     int 21h
  83. mov dl, sum+1
  84.     mov ch, dl
  85.     and dl, 0f0h
  86.     mov cl, 04h
  87.     rol dl, cl
  88.     or dl, 30h
  89.     mov ah, 02h
  90.     int 21h
  91.     mov dl, ch
  92.     and dl, 0fh
  93.     or dl, 30h
  94.     mov ah, 02h
  95.     int 21h
  96. ext:    mov dl, 13
  97.     mov ah, 02h
  98.     int 21h
  99.     mov dl, 10
  100.     mov ah, 02h
  101.     int 21h
  102.     mov ah, 04ch
  103.     int 21h
  104. main endp
  105.  
  106. get2dignum proc near
  107.     push dx
  108.     mov ah, 01h
  109.     int 21h
  110.     mov bl, al
  111.     and bl, 0fh
  112.     mov ah, 01h
  113.     int 21h
  114.     mov cl, 04h
  115.     rol bl, cl
  116.     and al, 0fh
  117.     add bl, al
  118.     mov al, bl
  119.     mov ah, 00h
  120.     pop dx
  121.     ret
  122. get2dignum endp
  123.  
  124. end main
  125.  
 
Next >

 

Creative Commons License
This work is licensed under a Creative Commons Attribution-ShareAlike 2.5 License.