Dismiss Notice
Join Physics Forums Today!
The friendliest, high quality science and math community on the planet! Everyone who loves science is here!

Assembly Programming help

  1. Jul 15, 2012 #1
    Im having trouble with this program. It is suppose to calculate 3

    call getPos ;AX = a (user input)
    M1 dw ?
    mov M1, AX ;M1 = a
    call crlf
    call getPos ;AX = b (user input)
    M2 dw ?
    mov M2, AX ;M2 = b
    call crlf
    call getPos ;AX = c (user input)
    M3 dw ?
    mov M3, AX ;M3 = c
    call crlf
    mov BX, 2 ;BX = 2
    mov CX, 3 ;CX = 3
    mov DX, 4 ;DX = 4
    mov AX, M1 ;AX = a
    mul CX ;AX= 3*a
    mov SI, AX ;SI = 3a
    mov AX, M3 ;AX = M3
    mul DX ;AX = 4*c
    mov DI, AX ;DI = 4c
    sub SI, DI ;3a-4c
    mov AX, SI ;AX = 3a-4c
    call putPos ;the sum (being in AX) is displayed
    mov ah, 04c
    int 021
    include ioSubs.inc
  2. jcsd
  3. Jul 15, 2012 #2


    User Avatar
    Science Advisor

    Hey risen375 and welcome to the forums.

    Try changing MOV SI,AX to MOV SI,CX. Also try changing MOV DI,AX to MOD DI,DX.

    If I recall correctly, the first operand is the register where something is actually stored to not the second one.
  4. Jul 16, 2012 #3


    User Avatar
    Homework Helper

    You should not put data in the middle of your program. If you're going to have code and data in the same segment, the data usually goes after the code. Another problem with your program is that the result of a multiply ends up in DX:AX as a 32 bit values, which is probably setting DX to zero every time you do a MUL. Your code could look like this.

    call getpos ; get a
    mov m1,ax
    mov ax,3 ; ax=3a
    mul m1
    mov ah, 04ch ;exit program
    int 21h

    m1 dw ? ;program data
    m2 dw ?
    m3 dw ?
    Last edited: Jul 16, 2012
Share this great discussion with others via Reddit, Google+, Twitter, or Facebook