Advertisement
Atick_Faisal

ASSEBLY CODE TO ADD TWO ANY DIGIT DECIMAL

Apr 7th, 2018
94
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
  1. ;------------ASSEMBLY CODE TO ADD TWO ANY DIGIT DECIMAL---------------
  2. .MODEL SMALL
  3. .STACK 100H
  4. .DATA
  5.     PROMPT_1 DB "ENTER THE BIGGER NUMBER : $"
  6.     PROMPT_2 DB 0AH, 0DH, "ENTER THE SMALLER NUMBER : $"
  7.     RES DB 0AH, 0DH, "RESULT = $"
  8.     ;-----------------ARRAY FOR 1ST NUMBER---------------
  9.     A DB 100 DUP(?)
  10.     ;-----------------ARRAY FOR 2ND NUMBER---------------
  11.     B DB 100 DUP(?)
  12.     ;-----------------RESULT ARRAY-----------------------
  13.     S DB 100 DUP(?)
  14. .CODE
  15. MAIN PROC
  16.     ;------------LOAD DATA--------------
  17.     MOV AX, @DATA
  18.     MOV DS, AX
  19.     ;-------SHOW FIRST MESSAGE----------
  20.     MOV AH, 9
  21.     LEA DX, PROMPT_1
  22.     INT 21H
  23.     ;----------TAKE INPUT---------------
  24.     MOV AH, 1
  25.     MOV DI, 0
  26.     ;------------INPUT LOOP-------------
  27. FIRST_NUMBER_INPUT:
  28.     INT 21H  
  29.     ;-----------CHECK IF ENTER IS PRESSED----------
  30.     CMP AL, 0DH  
  31.     ;----------IF SO JUMP TO NEXT NUMBER-----------
  32.     JE NEXT_PROMPT
  33.     ;----------ELSE CONVERT TO DECIMAL-------------
  34.     SUB AL, 30H
  35.     ;----------STORE IN ARRAY------------
  36.     MOV A[DI], AL
  37.     INC DI
  38.     JMP FIRST_NUMBER_INPUT
  39. NEXT_PROMPT:
  40.     ;----------MOVE ARRAY SIZE TO BX---------------
  41.     MOV BX, DI
  42.     MOV AH, 9
  43.     LEA DX, PROMPT_2
  44.     INT 21H
  45.     ;-------------TAKE INPUT-------------
  46.     MOV AH, 1
  47.     MOV DI, 0
  48. SECOND_NUMBER_INPUT:
  49.     INT 21H
  50.     ;------CHECK IF ENTER IS PRESSED---------------
  51.     CMP AL, 0DH
  52.     ;----------IF SO JUMP TO NEXT PROMPT-----------
  53.     JE NEXT_SECTION
  54.     ;----------ELSE CONVERT TO DECIMAL-------------
  55.     SUB AL, 30H
  56.     ;----------STORE IN ARRAY-------------
  57.     MOV B[DI], AL
  58.     INC DI
  59.     JMP SECOND_NUMBER_INPUT
  60. NEXT_SECTION:  
  61.     MOV CX, DI
  62. RESULT_MESSAGE:
  63.     MOV AH, 9
  64.     LEA DX, RES
  65.     INT 21H
  66.     ;-----------------ADDITION------------
  67.     ;----------INITIALIZE REGISTERS-------
  68.     MOV DI, 0
  69.     MOV AH, 0
  70.     MOV AL, 0
  71.     MOV DX, 0
  72. ADD_LOOP:
  73.     ;---------CLEAR AX REGISTER-----------
  74.     MOV AX, 0
  75.     ;---------PASS ARRAY INDEX OF FIRST NUMBER TO DI------
  76.     MOV DI, BX
  77.     ADD AL, A[DI-1]
  78.     MOV DI, CX
  79.     ;---------ADD ARRAYS ELEMENT BY ELEMENT---------------
  80.     ADD AL, B[DI-1]
  81.     MOV BH, 10
  82.     DIV BH
  83.     MOV BH, 0
  84.     MOV DI, DX
  85.     ;-------------ADD CARRY BITS TO NEXT DIGIT------------
  86.     ADD S[DI], AH
  87.     ADD S[DI+1], AL
  88.     INC DX
  89.     DEC CL
  90.     DEC BL
  91.     CMP BL, 0
  92.     JNE ADD_LOOP
  93.     ;-------------DISPLAY RESULT--------------
  94.     MOV AH, 2
  95.     MOV DI, DX
  96. SHOW_RESULT:
  97.     ;---------SHOW RESULT ELEMENT BY ELEMENT--------------
  98.     MOV DL, S[DI-1]
  99.     ;--------------CONVERT TO ASCII-----------
  100.     ADD DL, 30H
  101.     INT 21H
  102.     DEC DI
  103.     CMP DI, 0
  104.     JNE SHOW_RESULT
  105.                
  106.     MAIN ENDP
  107. END MAIN
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement