s1ay3r44

Untitled

May 1st, 2016
172
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
  1. INCLUDE Irvine32.inc
  2. .data
  3.     var1 DWORD ?
  4.     var2 DWORD ?
  5.  
  6.     input_prompt BYTE "Please input two integers: ", 0
  7.     result_str1 BYTE "Var1 is greater than var2", 0
  8.     result_str2 BYTE "Var2 is greater than var1", 0
  9.  
  10.     result_str3 BYTE "Var1 is greater than 10", 0
  11.     result_str4 BYTE "Var1 is less than 10", 0
  12.  
  13.  
  14.  
  15. .code
  16.  
  17. 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'
  18.     LOCAL string_count:DWORD                        ; Creates a local variable 'string_count' on the stack
  19.     MOV string_count, 0
  20.     MOV EDX, string
  21.     MOV BL, [EDX]
  22.     .WHILE BL != 0                                  ; Iterate until we hit null terminator
  23.         INC string_count
  24.         INC EDX
  25.         MOV BL, [EDX]
  26.     .ENDW
  27.  
  28.     MOV EAX, string_count                           ; Return value placed in EAX
  29.     RET
  30. lengthOfString ENDP
  31.  
  32. main PROC
  33.     MOV EDX, OFFSET input_prompt
  34.     CALL WriteString
  35.     CALL Crlf
  36.  
  37.  
  38.     CALL ReadInt
  39.     MOV var1, EAX
  40.     CALL ReadInt
  41.     MOV var2, EAX
  42.  
  43.     MOV EAX, var1
  44.     MOV EBX, var2
  45.  
  46.     .IF EAX > EBX
  47.         MOV EDX, OFFSET result_str1
  48.     .ELSE
  49.         MOV EDX, OFFSET result_str2
  50.     .ENDIF
  51.  
  52.     CALL WriteString
  53.     CALL Crlf
  54.  
  55.     .IF var1 > 10
  56.         MOV EDX, OFFSET result_str3
  57.     .ELSE
  58.         MOV EDX, OFFSET result_str4
  59.     .ENDIF
  60.  
  61.     CALL WriteString
  62.     CALL Crlf
  63.  
  64.     ;.IF var1 > var2    ; ERROR! Cannot compare two memory locations
  65.  
  66.     ;.ELSE
  67.  
  68.     ;.ENDIF
  69.  
  70.     INVOKE lengthOfString, ADDR input_prompt    ; Calls the lengthOfString procedure and passes the address of input_prompt
  71.     CALL WriteDec
  72.     CALL Crlf
  73.  
  74.     CALL WaitMsg
  75.     INVOKE ExitProcess, 0
  76. main ENDP
  77.  
  78. end main
Advertisement
Add Comment
Please, Sign In to add comment