Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- Microsoft (R) Macro Assembler Version 6.14.8444 04/04/20 16:51:01
- E:\VSProj3\JASol\JADll\mojadll.asm Page 1 - 1
- ; - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
- .386
- .MODEL FLAT, STDCALL
- OPTION CASEMAP:NONE
- .NOLIST
- .LIST
- 00000000 .data
- 00000000 41 47 49 4B 53 5A 4A DataString DB 'AGIKSZJ', 0FFH ; string definition
- FF
- 00000000 .code
- 00000000 DllEntry PROC hInstDLL:HINSTANCE, reason:DWORD, reserved1:DWORD
- 00000003 2 B8 00000001 MOV EAX, TRUE
- RET
- 0000000C DllEntry ENDP
- ; * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
- ; * Procedure FindChar_1 search for character 'J' in string 'DataString' *
- ; * *
- ; * Direct index addressing *
- ; * Input parameters: *
- ; * AH - character to find 'J' *
- ; * Output: *
- ; * EAX - BOOL TRUE Found, FALSE not found *
- ; * *
- ; * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
- 0000000C FindChar_1 PROC
- 0000000C 2 BE 00000000 R MOV ESI, OFFSET DataString ; load offset of variable 'DataString' into reg. ESI
- 00000011 2 B4 4A MOV AH, 'J' ; load the code of character 'J' into reg. AH
- 00000013 Check_End:
- 00000013 5 80 3E FF CMP BYTE PTR [ESI], 0FFH ; is it the end of a string (special character FF)?
- 00000016 7m,3 74 09 JE Not_Find ; found end character (guard)
- 00000018 6 3A 26 CMP AH, [ESI] ; compare a char. with 1 char of string 'DataString'
- 0000001A 7m,3 74 0B JE Done ; character found!
- 0000001C 2 83 C6 01 ADD ESI, 1 ; increment an offset
- 0000001F 7m EB F2 JMP Check_End ; search loop
- 00000021 Not_Find:
- 00000021 2 B8 00000000 MOV EAX, 0 ; character not found
- 00000026 10m C3 RET ; return from procedure
- 00000027 Done:
- 00000027 2 B8 00000001 MOV EAX, 1 ; character found
- 0000002C 10m C3 RET ; return form procedure
- 0000002D FindChar_1 ENDP ; end of FindChar_1
- ; * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
- ; * Procedure FindChar_2 searching character 'J' in string 'LocalString' *
- ; * *
- ; * Direct index addressing *
- ; * Input parameters: *
- ; * AH - character to find 'J' *
- ; * Output: *
- ; * EAX - BOOL TRUE Found, FALSE not found *
- ; * *
- ; * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
- 0000002D C3 47 49 4B 53 5A 4A LocalString DB 0C3H, 'GIKSZJ', 0FFH ; string definition
- FF
- 00000035 FindChar_2 PROC
- 00000035 2 BE 0000002D R MOV ESI, OFFSET LocalString ; load offset of variable 'LocalString' into reg ESI
- 0000003A 2 B4 4A MOV AH, 'J' ; load letter 'J' code into reg. AH
- 0000003C Check_End:
- 0000003C 5 80 3E FF CMP BYTE PTR [ESI], 0FFH ; is it the end of a string (special character FF)?
- 0000003F 7m,3 74 09 JE Not_Find ; found end character (guard)
- 00000041 6 3A 26 CMP AH, [ESI] ; compare a char with 1 char of string 'LocalString'
- 00000043 7m,3 74 0B JE Done ; character found!
- 00000045 2 83 C6 01 ADD ESI, 1 ; increment an offset
- 00000048 7m EB F2 JMP Check_End ; search loop
- 0000004A Not_Find:
- 0000004A 2 B8 00000000 MOV EAX, 0 ; character not found
- 0000004F 10m C3 RET ; return from procedure
- 00000050 Done:
- 00000050 2 B8 00000001 MOV EAX, 1 ; character found
- 00000055 10m C3 RET ; return form procedure
- 00000056 FindChar_2 ENDP ; end of FindChar_1
- ; * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
- ; * Procedure FindChar_3 searching character 'J' in string 'AppString' *
- ; * *
- ; * Direct index addressing *
- ; * Input parameters: *
- ; * AH - character to find 'J' *
- ; * Regs:ESI – address offset of variable 'AppString' *
- ; * Output: *
- ; * EAX - BOOL TRUE Found, FALSE not found *
- ; * *
- ; * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
- 00000056 FindChar_3 PROC AppString: DWORD
- 00000059 4 8B 75 08 MOV ESI, AppString ; load offset of variable 'AppString' into reg. ESI
- 0000005C 2 B4 4A MOV AH, 'J' ; load the code of character 'J' into reg. AH
- 0000005E Check_End:
- 0000005E 5 80 3E FF CMP BYTE PTR [ESI], 0FFH ; is it the end of a string (special character FF)?
- 00000061 7m,3 74 09 JE Not_Find ; found end character (guard)
- 00000063 6 3A 26 CMP AH, [ESI] ; compare a char. with 1 char of string 'DataString'
- 00000065 7m,3 74 0E JE Done ; character found!
- 00000067 2 83 C6 01 ADD ESI, 1 ; increment an offset
- 0000006A 7m EB F2 JMP Check_End ; search loop
- 0000006C Not_Find:
- 0000006C 2 B8 00000000 MOV EAX, 0 ; character not found
- RET ; return from procedure
- 00000075 Done:
- 00000075 2 B8 00000001 MOV EAX, 1
- RET ; character found
- 0000007E FindChar_3 ENDP ; end of FindChar_3
- ; * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
- ; * Procedure FindChar_4 searching character 'J' in string 'DataString' *
- ; * *
- ; * Direct index addressing *
- ; * Input parameters: *
- ; * AH - character to find 'J' *
- ; * ESI – address offset of variable ' DataString' *
- ; * Output: *
- ; * EAX - BOOL TRUE Found, FALSE not found *
- ; * *
- ; * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
- 0000007E FindChar_4 PROC NEAR ; procedure FindChar_4 declaration
- 0000007E 2 BE 00000000 MOV ESI, 0 ; load offset of variable 'DataString' into reg. ESI
- 00000083 2 B4 4A MOV AH, 'J' ; load the code of character 'J' into reg. AH
- 00000085 Check_End:
- 00000085 5 80 BE 00000000 R CMP DataString[ESI], 0FFH ; is it the end of a string (special character FF)?
- FF
- 0000008C 7m,3 74 0E JE Not_Find ; found end character (guard)
- 0000008E 6 3A A6 00000000 R CMP AH, BYTE PTR DataString[ESI] ;compare a char with 1char of string 'DataString'
- 00000094 7m,3 74 0C JE Done ; character found!
- 00000096 2 66| 83 C6 01 ADD SI, 1 ; increment an offset
- 0000009A 7m EB E9 JMP Check_End ; search loop
- 0000009C Not_Find:
- 0000009C 2 B8 00000000 MOV EAX, 0 ; character not found
- 000000A1 10m C3 RET ; return from procedure
- 000000A2 Done:
- 000000A2 2 B8 00000001 MOV EAX, 1 ; character found
- 000000A7 10m C3 RET ; return form procedure
- 000000A8 FindChar_4 ENDP ; end of FindChar_4
- ; * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
- ; * Procedure FindChar_5 searching character 'J' in string 'DataString' *
- ; * *
- ; * Base + displacement addressing *
- ; * Input parameters: *
- ; * EBX – address offset of variable ' DataString' *
- ; * Output: *
- ; * EAX - BOOL TRUE Found, FALSE not found *
- ; * *
- ; * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
- 000000A8 FindChar_5 PROC NEAR
- 000000A8 2 BB 00000000 R MOV EBX, OFFSET DataString ; load offset of variable 'DataString' into reg. EBX
- 000000AD 5 80 3B 4A CMP BYTE PTR [EBX + 0], 'J' ; compare a char. with 1 char of string 'DataString'
- 000000B0 7m,3 74 2A JE Got_It ; character found!
- 000000B2 5 80 7B 01 4A CMP BYTE PTR [EBX + 1], 'J' ; compare a char. with 1 char of string 'DataString'
- 000000B6 7m,3 74 24 JE Got_It ; character found!
- 000000B8 5 80 7B 02 4A CMP BYTE PTR [EBX + 2], 'J' ; compare a char. with 1 char of string 'DataString'
- 000000BC 7m,3 74 1E JE Got_It ; character found!
- 000000BE 5 80 7B 03 4A CMP BYTE PTR [EBX + 3], 'J' ; compare a char. with 1 char of string 'DataString'
- 000000C2 7m,3 74 18 JE Got_It ; character found!
- 000000C4 5 80 7B 04 4A CMP BYTE PTR [EBX + 4], 'J' ; compare a char. with 1 char of string 'DataString'
- 000000C8 7m,3 74 12 JE Got_It ; character found!
- 000000CA 5 80 7B 05 4A CMP BYTE PTR [EBX + 5], 'J' ; compare a char. with 1 char of string 'DataString'
- 000000CE 7m,3 74 0C JE Got_It
- 000000D0 5 80 7B 06 4A CMP BYTE PTR [EBX + 6], 'J' ; compare a char. with 1 char of string 'DataString'
- 000000D4 7m,3 74 06 JE Got_It ; character found!
- 000000D6 Not_Find:
- 000000D6 2 B8 00000000 MOV EAX, 0 ; character not found
- 000000DB 10m C3 RET ; return from procedure
- 000000DC Got_It:
- 000000DC 2 B8 00000001 MOV EAX, 1 ; character found
- 000000E1 10m C3 RET ; return form procedure
- 000000E2 FindChar_5 ENDP ; end of FindChar_5
- ; * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
- ; * Procedure FindChar_6 searching character 'J' in string 'DataString' *
- ; * *
- ; * Base index addressing [EBX + ESI] *
- ; * Input parameters: *
- ; * Reg: EBX – address offset of variable 'DataString' *
- ; * ESI – index of element *
- ; * AH - character to find 'J' *
- ; * Output: *
- ; * EAX - BOOL TRUE Found, FALSE not found *
- ; * *
- ; * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
- 000000E2 FindChar_6 PROC NEAR
- 000000E2 2 BB 00000000 R MOV EBX, OFFSET DataString ; load offset of variable 'DataString' into reg. EBX
- 000000E7 2 33 F6 XOR ESI, ESI ; zero index in string 'DataString'
- 000000E9 2 B4 4A MOV AH, 'J' ; load the code of character 'J' into reg. AH
- 000000EB Check_End:
- 000000EB 5 80 3C 1E FF CMP BYTE PTR [EBX + ESI], 0FFH ; is it the end of a string (special character FF)?
- 000000EF 7m,3 74 08 JE Not_Find ; found end character (guard)
- 000000F1 6 3A 24 1E CMP AH, BYTE PTR [EBX + ESI] ; compare a char. with 1 char of string 'DataString'
- 000000F4 7m,3 74 09 JE Done ; character found!
- 000000F6 2 46 INC ESI ; increment an offset
- 000000F7 7m EB F2 JMP Check_End ; search loop
- 000000F9 Not_Find:
- 000000F9 2 B8 00000000 MOV EAX, 0 ; character not found
- 000000FE 10m C3 RET ; return from procedure
- 000000FF Done:
- 000000FF 2 B8 00000001 MOV EAX, 1 ; character found
- 00000104 10m C3 RET ; return form procedure
- 00000105 FindChar_6 ENDP ; end of FindChar_6
- ; * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
- ; * Procedure ReadTime_1 measuring the duration of the procedure FindChar_1 *
- ; * *
- ; * The processor clock cycle counter is used for the measurement *
- ; * Input parameters: *
- ; * Output: *
- ; * EAX – time in CPU clock ticks *
- ; * *
- ; * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
- .586
- 00000105 ReadTime_1 PROC NEAR
- 00000105 14 0F A2 CPUID ; intentionally no comments
- 00000107 6 0F 31 RDTSC ; read of time stamp counter
- 00000109 1 8B C8 MOV ECX, EAX
- 0000010B 1 E8 FFFFFEFC CALL FindChar_1 ; call to tested function
- 00000110 6 0F 31 RDTSC
- 00000112 1 2B C1 SUB EAX, ECX
- 00000114 2 C3 RET ; return form procedure
- 00000115 ReadTime_1 ENDP
- ; * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
- 00000115 My_FindChar PROC NEAR
- 00000115 1 BB 00000000 R MOV EBX, OFFSET DataString ; load offset of variable 'DataString' into reg. EBX
- 0000011A 2 80 3B 4A CMP BYTE PTR [EBX], 'J' ; compare a char. with 1 char of string 'DataString'
- 0000011D 1 74 2A JE Got_It
- 0000011F 1 43 INC EBX ; character found!
- 00000120 2 80 3B 4A CMP BYTE PTR [EBX], 'J' ; compare a char. with 1 char of string 'DataString'
- 00000123 1 74 24 JE Got_It
- 00000125 1 43 INC EBX ; character found!
- 00000126 2 80 3B 4A CMP BYTE PTR [EBX], 'J' ; compare a char. with 1 char of string 'DataString'
- 00000129 1 74 1E JE Got_It
- 0000012B 1 43 INC EBX ; character found!
- 0000012C 2 80 3B 4A CMP BYTE PTR [EBX], 'J' ; compare a char. with 1 char of string 'DataString'
- 0000012F 1 74 18 JE Got_It
- 00000131 1 43 INC EBX ; character found!
- 00000132 2 80 3B 4A CMP BYTE PTR [EBX], 'J' ; compare a char. with 1 char of string 'DataString'
- 00000135 1 74 12 JE Got_It
- 00000137 1 43 INC EBX ; character found!
- 00000138 2 80 3B 4A CMP BYTE PTR [EBX], 'J' ; compare a char. with 1 char of string 'DataString'
- 0000013B 1 74 0C JE Got_It
- 0000013D 1 43 INC EBX
- 0000013E 2 80 3B 4A CMP BYTE PTR [EBX], 'J' ; compare a char. with 1 char of string 'DataString'
- 00000141 1 74 06 JE Got_It ; character found!
- 00000143 Not_Find:
- 00000143 1 B8 00000000 MOV EAX, 0 ; character not found
- 00000148 2 C3 RET ; return from procedure
- 00000149 Got_It:
- 00000149 1 B8 00000001 MOV EAX, 1 ; character found
- 0000014E 2 C3 RET ; return form procedure
- 0000014F My_FindChar ENDP
- END DllEntry
- Microsoft (R) Macro Assembler Version 6.14.8444 04/04/20 16:51:01
- E:\VSProj3\JASol\JADll\mojadll.asm Symbols 2 - 1
- Segments and Groups:
- N a m e Size Length Align Combine Class
- FLAT . . . . . . . . . . . . . . . . . GROUP
- _DATA . . . . . . . . . . . . . . . . 32 Bit 00000008 DWord Public 'DATA'
- _TEXT . . . . . . . . . . . . . . . . 32 Bit 0000014F DWord Public 'CODE'
- Procedures, parameters and locals:
- N a m e Type Value Attr
- DllEntry . . . . . . . . . . . . . . . P Near 00000000 _TEXT Length= 0000000C Public STDCALL
- FindChar_1 . . . . . . . . . . . . . . P Near 0000000C _TEXT Length= 00000021 Public STDCALL
- FindChar_2 . . . . . . . . . . . . . . P Near 00000035 _TEXT Length= 00000021 Public STDCALL
- FindChar_3 . . . . . . . . . . . . . . P Near 00000056 _TEXT Length= 00000028 Public STDCALL
- FindChar_4 . . . . . . . . . . . . . . P Near 0000007E _TEXT Length= 0000002A Public STDCALL
- FindChar_5 . . . . . . . . . . . . . . P Near 000000A8 _TEXT Length= 0000003A Public STDCALL
- FindChar_6 . . . . . . . . . . . . . . P Near 000000E2 _TEXT Length= 00000023 Public STDCALL
- My_FindChar . . . . . . . . . . . . . P Near 00000115 _TEXT Length= 0000003A Public STDCALL
- ReadTime_1 . . . . . . . . . . . . . . P Near 00000105 _TEXT Length= 00000010 Public STDCALL
- Symbols:
- N a m e Type Value Attr
- @CodeSize . . . . . . . . . . . . . . Number 00000000h
- @DataSize . . . . . . . . . . . . . . Number 00000000h
- @Interface . . . . . . . . . . . . . . Number 00000003h
- @Model . . . . . . . . . . . . . . . . Number 00000007h
- @code . . . . . . . . . . . . . . . . Text _TEXT
- @data . . . . . . . . . . . . . . . . Text FLAT
- @fardata? . . . . . . . . . . . . . . Text FLAT
- @fardata . . . . . . . . . . . . . . . Text FLAT
- @stack . . . . . . . . . . . . . . . . Text FLAT
- 0 Warnings
- 0 Errors
- # By Szymon Pluta
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement