I'm brand new to assembly language programming, and I would like my output to have separate lines so that it is easier to read, however, I wrote my code and had it working, but was then informed that I could not in fact use the Irvine procedure to make a new line. My text book only uses the Irvine "Crlf" and the code from other people who asked similar questions on this website completely broke my program so now I'm lost.
One I attempted was:
mov ah, 0Eh ;print new line sequence
mov al, 0Dh
int 10h
mov al, 0Ah
int 10h
Anyways, here is my complete code with the Irvine function still. Can someone help me get the output I'm looking for without using the "call Crlf"? Or let me know why the code above is breaking my program? I'm sure there's something I'm missing.
INCLUDE Irvine32.inc
.data
prompt BYTE 'Enter a positive integer: ', 0
report1 BYTE 'The sum is: ', 0
report2 BYTE 'The product is: ', 0
report3 BYTE 'The power result is: ', 0
temp DWORD ? ;
.code
main PROC
; Main program control procedure.
; Calls: GetInteger, AddNumbers, MultiplyNumbers,
; WriteInt, CalculatePower
call GetInteger ;Get the first user entered integer
mov ebx, eax ;Store the value into the EBX register
call GetInteger ;Get the second user entered integer
mov temp,eax ;Copy the value into temp for holding
call AddNumbers ;Find the sum of the two integers
mov edx,OFFSET report1 ;Display sum result
call WriteString
call WriteInt
mov eax, temp ;Replace the EAX value with the second user entered integer
call MultiplyNumbers ;Find the product of the two integers
call Crlf ;New line
mov edx,OFFSET report2 ;Display the product result
call WriteString
call WriteInt
mov eax, temp ;Replace the EAX value with the second user entered integer
call CalculatePower ;Find the power result of the two integers
call Crlf ;New line
mov edx,OFFSET report3 ;Display the power result
call WriteString
call WriteInt
exit ;exit to operating system
main ENDP
;-------------------------------------------------------------
GetInteger PROC
;
; Prompts the user for two integers and stores
; them into EAX and EBX registers
; Receives: Doubleword integers
; Returns: The two integer values in the EAX and EBX registers
; Calls: WriteString, ReadInt
;----------------------------------------------------------------
mov edx,OFFSET prompt ;Prompt user for integer entry
call WriteString
call ReadInt
ret
GetInteger ENDP
;-----------------------------------------------------------------
AddNumbers PROC
;
; Calculates the sum of two 32-bit integers
; Receives: The integer values in the registers EAX and EBX
; Returns: The sum in the EAX register
; Calls: none
;------------------------------------------------------------------
add eax,ebx ;Find the sum
ret
AddNumbers ENDP
;--------------------------------------------------------------------
MultiplyNumbers PROC
;
; Calculates the product of two 32-bit integers
; Receives: The integer values in the registers EAX and EBX
; Returns: The product in the EAX register
; Calls: none
;---------------------------------------------------------------------
mul ebx ;Find the product
ret
MultiplyNumbers ENDP
;--------------------------------------------------------------------
CalculatePower PROC
;
; Calculates the result of the first 32 bit integer to the power
; of the second by using MultiplyNumbers
; Receives: The result of MultiplyNumbers
; Returns: The power result in EAX register
; Calls: MultiplyNumbers
;---------------------------------------------------------------------
mov ecx,eax ;Set the counter with the value of the second integer
sub ecx, 1 ;Subtract one so the counter calls MultiplyNumbers the correct amount
mov eax,ebx ;Copy EBX into EAX so that MultiplyNumbers finds the power result
FindPower:
call MultiplyNumbers;Find the power result
loop FindPower ;Repeat the loop till the count is 0
ret
CalculatePower ENDP
END main
CRLF is just a sequence of two bytes added to the output, the values 13 and 10.
If you made a string with those two values, perhaps prompt BYTE 'Hello!', 13, 10, 0
or just consisting of the cr/lf 13,10,0 combo, you can output it without a special procedure.