Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- INCLUDE Irvine32.inc
- .data
- var1 DWORD ?
- var2 DWORD ?
- input_prompt BYTE "Please input two integers: ", 0
- result_str1 BYTE "Var1 is greater than var2", 0
- result_str2 BYTE "Var2 is greater than var1", 0
- result_str3 BYTE "Var1 is greater than 10", 0
- result_str4 BYTE "Var1 is less than 10", 0
- .code
- lengthOfString PROC USES EDX EBX, string:DWORD ; Specifies EDX and EBX as modified registers. INVOKE will save these values on the stack. Also creates a parameter referred to as 'string'
- LOCAL string_count:DWORD ; Creates a local variable 'string_count' on the stack
- MOV string_count, 0
- MOV EDX, string
- MOV BL, [EDX]
- .WHILE BL != 0 ; Iterate until we hit null terminator
- INC string_count
- INC EDX
- MOV BL, [EDX]
- .ENDW
- MOV EAX, string_count ; Return value placed in EAX
- RET
- lengthOfString ENDP
- main PROC
- MOV EDX, OFFSET input_prompt
- CALL WriteString
- CALL Crlf
- CALL ReadInt
- MOV var1, EAX
- CALL ReadInt
- MOV var2, EAX
- MOV EAX, var1
- MOV EBX, var2
- .IF EAX > EBX
- MOV EDX, OFFSET result_str1
- .ELSE
- MOV EDX, OFFSET result_str2
- .ENDIF
- CALL WriteString
- CALL Crlf
- .IF var1 > 10
- MOV EDX, OFFSET result_str3
- .ELSE
- MOV EDX, OFFSET result_str4
- .ENDIF
- CALL WriteString
- CALL Crlf
- ;.IF var1 > var2 ; ERROR! Cannot compare two memory locations
- ;.ELSE
- ;.ENDIF
- INVOKE lengthOfString, ADDR input_prompt ; Calls the lengthOfString procedure and passes the address of input_prompt
- CALL WriteDec
- CALL Crlf
- CALL WaitMsg
- INVOKE ExitProcess, 0
- main ENDP
- end main
Advertisement
Add Comment
Please, Sign In to add comment