Successfully reported this slideshow.
We use your LinkedIn profile and activity data to personalize ads and to show you more relevant ads. You can change your ad preferences anytime.

Multiplication & division instructions microprocessor 8086

8,759 views

Published on

this Presentation is prepared to demonstrate Multiplication and Division Instruction In microprocessor 8086

Published in: Engineering
  • Be the first to comment

Multiplication & division instructions microprocessor 8086

  1. 1. TOPIC: MULTIPLICATI ON AND DIVISION Group member: M Hamza Nasir (12063122-067) M Usaman Ali (12063122-086) Syed Farhan Abbas (12063122-009) M Faran Ali (12063122-055) Ateeb Saeed (12063122-094) University Of Gujrat
  2. 2. Multiplication MUL(unsinged ) IMUL(singed)
  3. 3. MUL INSTRUCTION (UNSIGNED MULTIPLY) Multiplies an 8-, 16-, or 32-bit operand by either AL, AX Syntax:MUL AL R/M8 Syntax: MUL AX R/M16
  4. 4. MUL INSTRUCTION Note that the product is stored in a register (or group of registers) twice the size of the operands. The operand can be a register or a memory operand
  5. 5. MUL INSTRUCTION
  6. 6. MUL EXAMPLES Mov al, 5h Mov bl, 10h Mul bl ; AX = 0050h, CF = 0  No overflow - the Carry flag is 0 because the upper half of AX is zero
  7. 7. IMUL INSTRUCTION (SIGNED MULTIPLY) same syntax uses the same operands as the MUL instruction  preserves the sign of the product Opcode=IMUL
  8. 8. IMUL INSTRUCTION Suppose AX contains 1 and BX contains FFFFh Mov AX, 1h Mov BX, FFFFh IMUL BX ; Decimal product=-1, Hex Product =FFFFFFFFh DX = FFFFh, AX=FFFFh CF/OF=0 DX is a sign extension of AX for this CF/OF=0
  9. 9. IMUL INSTRUCTION IMUL sets the Carry and Overflow flags if the high-order product is not a sign extension of the low-order product Mov al, 48 Mov bl, 4 Imul bl ;AX = 00C0h, OF = 1 AH is not a sign extension of AL, so the Overflow flag is set
  10. 10. IMUL INSTRUCTION Suppose AX contains FFFFh and BX contains FFFFh Mov AX, FFFFH Mov BX, FFFFh IMUL BX Decimal product=1 Hex Product = 00000001 h DX = 0000h, AX=0001h CF/OF=0 DX is a sign extension of AX for this CF/OF=0
  11. 11. IMUL INSTRUCTION Suppose AX contains 0FFFh.and BX contains 0FFFh Mov AX, 0FFFH Mov BX, 0FFFh IMUL BX Decimal product=16769025 Hex Product = 00FFE001 h DX = 00FFh, AX=E001h CF/OF=0 DX is a not sign extension of AX for this CF/OF=1
  12. 12. IMUL INSTRUCTION Suppose AL contains 80h.and BL contains FFh Mov AL, 80H Mov BL, FFh IMUL BL Decimal product=128, Hex Product = 0080 h AH = 00h, AL=80h CF/OF=01 DX is a not sign extension of AX for this CF/OF=1
  13. 13. APPLICATION OF MUL AND IMUL Translate the high level language assignment statement A=5×A-12×B Let A and B be word variables, and suppose there is no overflow. Use IMUL for multiplication
  14. 14. SOLUTION: Mov AX,5 ;AX=5 IMUL A ;AX=5*A MOV A,AX ;A=5*A MOV AX,12 ;AX=12 IMUL B ;AX=12*B SUB A,AX ;5*A-12*B
  15. 15. DIVIDE DIV(unsinged) IDIV(singed)
  16. 16. DIVIDE AND IDIVIDE When division is performed we obtain two results The quotient and The remainder. Similarly like Multiplication there are separate instructions for unsigned and signed division
  17. 17. CONT.. Syntax: DIV divisor IDIV divisor Byte Form: The divisor is eight bit register or memory byte The 16 – bit dividend is assumed to be in AX. After division 8-bit quotient is in AL and 8-bit remainder in AH.
  18. 18. CONT.. Word Form: The divisor is a 16-bit register or memory word The 32-bit dividend is assumed to be in DX:AX After division, the 16-bit quotient is in AX and 16- bit remainder is in DX Effect on flags: All status flags are undefined
  19. 19. CONT.. Divide Overflow: It is possible that the quotient s too big to fit in the specified destination(AL or AX). This Happens Because the divisor is much smaller than the dividend. When this Happens the program terminates and system displays message “divide overflow”
  20. 20. CONT.. Examples: EXAMPLE 9.8: Suppose DX contains 0000h , AX contains 0005h, and BX contains 0002h. EXAMPLE 9.9: Suppose DX contains 0000h , AX contains 0005h and BX contains FFFEh. EXAmple 9.10: Suppose AX contains 00FBh and BL contains FFh.
  21. 21. DECIMAL INPUT AND OUTPUT Computer represent every thing in binary But it is convenient for user to represent input and output in decimal If we input 21543 character string then it must to converted internally Conversely on output the binary contents of R/M must be converted to decimal equivalent before being printed
  22. 22. DECIMAL INPUT Convert a string of ASCII digits to the binary representation of decimal equivalent For input we repeatedly multiply AX by 10 Algorithm (First version): Total=0 Read an ASCII REPEAT convert character to number Total=total*10+value Read a character Until character is carriage return
  23. 23. CONT.. Example: input of 123 Total =0 Read ‘1’ Convert ‘1’ to 1 Total=10*0 +1=1 Read ‘2’ Convert ‘2’ to 2 Total=10*1 +2=12 Read ‘3’ Convert ‘3’ to 3 Total=10*12 +3=123
  24. 24. CONT.. Range: -32768 to 32767 Optional sign followed by string of digits & carriage return Outside ‘0’ to ‘9’ jumps to new line and ask for input again
  25. 25. CONT.. Algorithm(second version): total=0 Negative=false Read a character Case character of • ‘-’: negative=true read a character • ‘+’: read a character End_case Repeat If character is not between ‘0’ to ‘9’ Then Go to beginning
  26. 26. CONT.. Else Convert character to binary value Total=10*total+value End_if Read a character Until character is carriage return If negative =true Then total=-total
  27. 27. CONT.. Program(source code): INDEC PROC ;READ NUMBER IN RANGE -32768 TO 32767 PUSH BX PUSH CX PUSH DX @BEGIN: ;total =0 XOR BX,BX ;BX hold total ;negative =false
  28. 28. CONT.. XOR CX,CX ;CX hold sign ;read char MOV AH,1 INT 21H ;case char of CMP AL,'-' ;minus sign JE @MINUS ;yes,set sign CMP AL,'+' ;plus sign JE @PLUS ;yes,get another char
  29. 29. CONT.. JMP @REPEAT2 ;start processing char @MINUS: MOV CX,1 @PLUS: INT 21H ;end case @REPEAT2: ;if char. is between '0' and '9' CMP AL,'0' ;char >='0'? JNGE @NOT_DIGIT ;illegal char.
  30. 30. CONT.. CMP AL,'9' ;char<='9' ? JNLE @NOT_DIGIT ;then convert char to digit AND AX,000FH PUSH AX ;save number ;total =total *10 +digit MOV AX,10 MUL BX POP BX ;retrieve number ADD BX,AX ;total =total *10 +digit
  31. 31. CONT.. ;read char MOV AH,1 INT 21H CMP AL,0DH ;CR JNE @REPEAT2 ;no keep going ;until CR MOV AX,BX ;store number in AX ;if negative OR CX,CX ;negative
  32. 32. CONT.. Jz @EXIT ;no,exit ;then NEG AX ;yes,negate ;end if @EXIT: ;retrieve registers POP DX POP CX POP BX RET
  33. 33. CONT.. ;here if illegal char entered @NOT_DIGIT: MOV AH,2 MOV DL,0DH INT 21H MOV DL,0AH INT 21H JMP @BEGIN INDEC ENDP
  34. 34. CONT.. Output:
  35. 35. INPUT OVERFLOW AX:FFFFh In decimal:65535 Range:-32768 to 32767 Anything out of range called input overflow For example: Input:32769 Total=327690
  36. 36. CONT.. Algorithm: total=0 Negative=false Read a character Case character of • ‘-’: negative=true read a character • ‘+’: read a character
  37. 37. CONT.. End_case Repeat If character is not between ‘0’ to ‘9’ Then Go to beginning Else Convert character to binary value Total=10*total
  38. 38. CONT.. If overflow Then go to beginning Else Total =total*10 +value If overflow Then go to beginning
  39. 39. CONT.. End_if End_if End_if Read a character Until character is carriage return If negative =true Then total=-total
  40. 40. CONT.. Code: ;total =total *10 +digit MOV AX,10 MUL BX CMP DX,0 JNE @NOT_DIGIT POP BX ADD BX,AX JC @NOT_DIGIT
  41. 41. CONT.. Output:
  42. 42. Decimal Output Algorithm for Decimal Output: If AX < 0 /*AX holds output value */ THEN Print a minus sign Replace AX by its twos complement End_IF Get the digits in AX’s decimal representation Convert these digits into characters and print them
  43. 43. CONT.. To see what line 6 entitles, suppose the contents of AX, expressed in decimal is 24168. To get the digits in decimal representation , we can proceed as follows, Divide 24618 by 10, Quotient= 2461, remainder=8 Divide 2461 by 10, Quotient= 246, remainder=1 Divide 246 by 10 , Quotient=24, remainder=6 Divide 24 by 10, Quotient=2, remainder=4 Divide 2 by 10, Quotient=0, remainder=2
  44. 44. CONT.. LINE 6: Cout =0 /*will count decimal digit */ REPEAT divide quotient by 10 Push remainder on the stack Count= count +1 UNTILL Quotient=0
  45. 45. CONT.. LINE 7: FOR count times DO Pop a digit from the stack Convert it to a character Output the character END_FOR
  46. 46. CONT.. Program Listing PMG9_1.ASM .MODEL SMALL .STACK 100H .CODE OUTDEC PROC ;prints AX as a signed decimal integer ;input: AX ;output: none PUSH AX ;save registers PUSH BX PUSH CX PUSH DX
  47. 47. CONT.. ;if AX < 0 OR AX,AX ;AX < 0? JGE @END_IF1 ;NO >0 ;then PUSH AX ; save number MOV DL,’-’ ;get ‘-’ MOV AH,2 ;print character function INT 21H ;print ‘-’ POP AX ;get Ax back NEG AX ;AX= -AX @END_IF1:
  48. 48. CONT.. ;get decimal digits XOR CX,CX ;CX counts digits MOV BX,10D ;BX has divisor @REPEAT1: XOR DX,DX ;prepare high word of dividend DIV BX ;AX=quotient, DX=remainder PUSH DX ;save remainder on stack INC CX ;count = count +1 ;until OR AX,AX ;quotient = 0? JNE @REPEAT ;no, keep going
  49. 49. CONT.. ;convert digits to character and print MOV AH,2 ;print character function ;for count time do @PRINT_LOOP POP DX ;digit in DL OR DL,30H ;convert to character INT 21H ;print digit ;end_for POP DX ; restore registers POP CX POP BX POP AX OUTDEC ENDP

×