Assembly Programming: How to Calculate 3a-4c Using MUL Instruction

AI Thread Summary
The discussion centers around troubleshooting an assembly program designed to calculate the expression 3a - 4c using user inputs for variables a, b, and c. Key issues identified include incorrect register usage and data placement within the code. Suggestions for improvement include changing the register assignments to ensure proper storage of multiplication results, as the multiplication operation outputs a 32-bit value in DX:AX, which can lead to unexpected results if not handled correctly. Additionally, it is recommended to organize the code and data segments properly, placing data after the code to avoid conflicts. The conversation emphasizes the importance of understanding operand behavior in assembly language to achieve the desired calculations effectively.
risen375
Messages
1
Reaction score
0
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
 
Technology news on Phys.org
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.
 
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:
Dear Peeps I have posted a few questions about programing on this sectio of the PF forum. I want to ask you veterans how you folks learn program in assembly and about computer architecture for the x86 family. In addition to finish learning C, I am also reading the book From bits to Gates to C and Beyond. In the book, it uses the mini LC3 assembly language. I also have books on assembly programming and computer architecture. The few famous ones i have are Computer Organization and...
I have a quick questions. I am going through a book on C programming on my own. Afterwards, I plan to go through something call data structures and algorithms on my own also in C. I also need to learn C++, Matlab and for personal interest Haskell. For the two topic of data structures and algorithms, I understand there are standard ones across all programming languages. After learning it through C, what would be the biggest issue when trying to implement the same data...
Back
Top