Advertisement
Guest User

APL Lab2

a guest
Apr 4th, 2020
149
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
  1. Microsoft (R) Macro Assembler Version 6.14.8444         04/04/20 16:51:01
  2. E:\VSProj3\JASol\JADll\mojadll.asm               Page 1 - 1
  3.  
  4.  
  5.                          ; - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
  6.                          .386
  7.                          .MODEL FLAT, STDCALL
  8.                      OPTION CASEMAP:NONE
  9.                          .NOLIST
  10.                          .LIST
  11.  00000000                    .data
  12.  00000000 41 47 49 4B 53 5A 4A           DataString DB 'AGIKSZJ', 0FFH                           ; string definition
  13.             FF
  14.  00000000                    .code
  15.  00000000                DllEntry PROC hInstDLL:HINSTANCE, reason:DWORD, reserved1:DWORD
  16.  00000003   2   B8 00000001          MOV EAX, TRUE
  17.                          RET
  18.  0000000C                    DllEntry ENDP
  19.                          ; * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
  20.                          ; * Procedure FindChar_1 search for character 'J' in string 'DataString' *
  21.                          ; * *
  22.                          ; * Direct index addressing *
  23.                          ; * Input parameters: *
  24.                          ; * AH - character to find 'J' *
  25.                          ; * Output: *
  26.                          ; * EAX - BOOL TRUE Found, FALSE not found *
  27.                          ; * *
  28.                          ; * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
  29.  0000000C                    FindChar_1 PROC
  30.  0000000C   2   BE 00000000 R            MOV ESI, OFFSET DataString                              ; load offset of variable 'DataString' into reg. ESI
  31.  00000011   2   B4 4A                MOV AH, 'J'                                             ; load the code of character 'J' into reg. AH
  32.  00000013                Check_End:
  33.  00000013   5   80 3E FF             CMP BYTE PTR [ESI], 0FFH                                ; is it the end of a string (special character FF)?
  34.  00000016 7m,3  74 09                JE Not_Find                                             ; found end character (guard)
  35.  00000018   6   3A 26                CMP AH, [ESI]                                           ; compare a char. with 1 char of string 'DataString'
  36.  0000001A 7m,3  74 0B                JE Done                                                 ; character found!
  37.  0000001C   2   83 C6 01             ADD ESI, 1                                              ; increment an offset
  38.  0000001F   7m  EB F2                JMP Check_End                                           ; search loop
  39.  00000021                Not_Find:
  40.  00000021   2   B8 00000000          MOV EAX, 0                                              ; character not found
  41.  00000026  10m  C3               RET                                                     ; return from procedure
  42.  00000027                Done:
  43.  00000027   2   B8 00000001          MOV EAX, 1                                              ; character found
  44.  0000002C  10m  C3               RET                                                     ; return form procedure
  45.  0000002D                    FindChar_1 ENDP                                         ; end of FindChar_1
  46.                          ; * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
  47.                          ; * Procedure FindChar_2 searching character 'J' in string 'LocalString' *
  48.                          ; * *
  49.                          ; * Direct index addressing *
  50.                          ; * Input parameters: *
  51.                          ; * AH - character to find 'J' *
  52.                          ; * Output: *
  53.                          ; * EAX - BOOL TRUE Found, FALSE not found *
  54.                          ; * *
  55.                          ; * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
  56.  0000002D C3 47 49 4B 53 5A 4A           LocalString DB 0C3H, 'GIKSZJ', 0FFH                     ; string definition
  57.             FF
  58.  00000035                    FindChar_2 PROC
  59.  00000035   2   BE 0000002D R            MOV ESI, OFFSET LocalString                             ; load offset of variable 'LocalString' into reg ESI
  60.  0000003A   2   B4 4A                MOV AH, 'J'                                             ; load letter 'J' code into reg. AH
  61.  0000003C                Check_End:
  62.  0000003C   5   80 3E FF             CMP BYTE PTR [ESI], 0FFH                                ; is it the end of a string (special character FF)?
  63.  0000003F 7m,3  74 09                JE Not_Find                                             ; found end character (guard)
  64.  00000041   6   3A 26                CMP AH, [ESI]                                           ; compare a char with 1 char of string 'LocalString'
  65.  00000043 7m,3  74 0B                JE Done                                                 ; character found!
  66.  00000045   2   83 C6 01             ADD ESI, 1                                              ; increment an offset
  67.  00000048   7m  EB F2                JMP Check_End                                           ; search loop
  68.  0000004A                Not_Find:
  69.  0000004A   2   B8 00000000          MOV EAX, 0                                              ; character not found
  70.  0000004F  10m  C3               RET                                                     ; return from procedure
  71.  00000050                Done:
  72.  00000050   2   B8 00000001          MOV EAX, 1                                              ; character found
  73.  00000055  10m  C3               RET                                                     ; return form procedure
  74.  00000056                    FindChar_2 ENDP                                         ; end of FindChar_1
  75.                          ; * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
  76.                          ; * Procedure FindChar_3 searching character 'J' in string 'AppString' *
  77.                          ; * *
  78.                          ; * Direct index addressing *
  79.                          ; * Input parameters: *
  80.                          ; * AH - character to find 'J' *
  81.                          ; * Regs:ESI – address offset of variable 'AppString' *
  82.                          ; * Output: *
  83.                          ; * EAX - BOOL TRUE Found, FALSE not found *
  84.                          ; * *
  85.                          ; * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
  86.  00000056                FindChar_3 PROC AppString: DWORD
  87.  00000059   4   8B 75 08             MOV ESI, AppString                                      ; load offset of variable 'AppString' into reg. ESI
  88.  0000005C   2   B4 4A                MOV AH, 'J'                                             ; load the code of character 'J' into reg. AH
  89.  0000005E                Check_End:
  90.  0000005E   5   80 3E FF             CMP BYTE PTR [ESI], 0FFH                                ; is it the end of a string (special character FF)?
  91.  00000061 7m,3  74 09                JE Not_Find                                             ; found end character (guard)
  92.  00000063   6   3A 26                CMP AH, [ESI]                                           ; compare a char. with 1 char of string 'DataString'
  93.  00000065 7m,3  74 0E                JE Done                                                 ; character found!
  94.  00000067   2   83 C6 01             ADD ESI, 1                                              ; increment an offset
  95.  0000006A   7m  EB F2                JMP Check_End                                           ; search loop
  96.  0000006C                Not_Find:
  97.  0000006C   2   B8 00000000          MOV EAX, 0                                              ; character not found
  98.                          RET                                                     ; return from procedure
  99.  00000075                Done:
  100.  00000075   2   B8 00000001          MOV EAX, 1
  101.                          RET                                                     ; character found
  102.  0000007E                    FindChar_3 ENDP                                         ; end of FindChar_3
  103.                          ; * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
  104.                          ; * Procedure FindChar_4 searching character 'J' in string 'DataString' *
  105.                          ; * *
  106.                          ; * Direct index addressing *
  107.                          ; * Input parameters: *
  108.                          ; * AH - character to find 'J' *
  109.                          ; * ESI – address offset of variable ' DataString' *
  110.                          ; * Output: *
  111.                          ; * EAX - BOOL TRUE Found, FALSE not found *
  112.                          ; * *
  113.                          ; * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
  114.  0000007E                    FindChar_4 PROC NEAR                                    ; procedure FindChar_4 declaration
  115.  0000007E   2   BE 00000000          MOV ESI, 0                                              ; load offset of variable 'DataString' into reg. ESI
  116.  00000083   2   B4 4A                MOV AH, 'J'                                             ; load the code of character 'J' into reg. AH
  117.  00000085                Check_End:
  118.  00000085   5   80 BE 00000000 R         CMP DataString[ESI], 0FFH                               ; is it the end of a string (special character FF)?
  119.             FF
  120.  0000008C 7m,3  74 0E                JE Not_Find                                             ; found end character (guard)
  121.  0000008E   6   3A A6 00000000 R         CMP AH, BYTE PTR DataString[ESI]                        ;compare a char with 1char of string 'DataString'
  122.  00000094 7m,3  74 0C                JE Done                                                 ; character found!
  123.  00000096   2   66| 83 C6 01             ADD SI, 1                                               ; increment an offset
  124.  0000009A   7m  EB E9                JMP Check_End                                           ; search loop
  125.  0000009C                Not_Find:
  126.  0000009C   2   B8 00000000          MOV EAX, 0                                              ; character not found
  127.  000000A1  10m  C3               RET                                                     ; return from procedure
  128.  000000A2                Done:
  129.  000000A2   2   B8 00000001          MOV EAX, 1                                              ; character found
  130.  000000A7  10m  C3               RET                                                     ; return form procedure
  131.  000000A8                    FindChar_4 ENDP                                         ; end of FindChar_4
  132.                          ; * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
  133.                          ; * Procedure FindChar_5 searching character 'J' in string 'DataString' *
  134.                          ; * *
  135.                          ; * Base + displacement addressing *
  136.                          ; * Input parameters: *
  137.                          ; * EBX – address offset of variable ' DataString' *
  138.                          ; * Output: *
  139.                          ; * EAX - BOOL TRUE Found, FALSE not found *
  140.                          ; * *
  141.                          ; * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
  142.  000000A8                    FindChar_5 PROC NEAR
  143.  000000A8   2   BB 00000000 R            MOV EBX, OFFSET DataString                              ; load offset of variable 'DataString' into reg. EBX
  144.  000000AD   5   80 3B 4A             CMP BYTE PTR [EBX + 0], 'J'                             ; compare a char. with 1 char of string 'DataString'
  145.  000000B0 7m,3  74 2A                JE Got_It                                               ; character found!
  146.  000000B2   5   80 7B 01 4A          CMP BYTE PTR [EBX + 1], 'J'                             ; compare a char. with 1 char of string 'DataString'
  147.  000000B6 7m,3  74 24                JE Got_It                                               ; character found!
  148.  000000B8   5   80 7B 02 4A          CMP BYTE PTR [EBX + 2], 'J'                             ; compare a char. with 1 char of string 'DataString'
  149.  000000BC 7m,3  74 1E                JE Got_It                                               ; character found!
  150.  000000BE   5   80 7B 03 4A          CMP BYTE PTR [EBX + 3], 'J'                             ; compare a char. with 1 char of string 'DataString'
  151.  000000C2 7m,3  74 18                JE Got_It                                               ; character found!
  152.  000000C4   5   80 7B 04 4A          CMP BYTE PTR [EBX + 4], 'J'                             ; compare a char. with 1 char of string 'DataString'
  153.  000000C8 7m,3  74 12                JE Got_It                                               ; character found!
  154.  000000CA   5   80 7B 05 4A          CMP BYTE PTR [EBX + 5], 'J'                             ; compare a char. with 1 char of string 'DataString'
  155.  000000CE 7m,3  74 0C                JE Got_It
  156.  000000D0   5   80 7B 06 4A          CMP BYTE PTR [EBX + 6], 'J'                             ; compare a char. with 1 char of string 'DataString'
  157.  000000D4 7m,3  74 06                JE Got_It                                               ; character found!
  158.  000000D6                Not_Find:
  159.  000000D6   2   B8 00000000          MOV EAX, 0                                              ; character not found
  160.  000000DB  10m  C3               RET                                                     ; return from procedure
  161.  000000DC                Got_It:
  162.  000000DC   2   B8 00000001          MOV EAX, 1                                              ; character found
  163.  000000E1  10m  C3               RET                                                     ; return form procedure
  164.  000000E2                    FindChar_5 ENDP                                         ; end of FindChar_5
  165.                          ; * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
  166.                          ; * Procedure FindChar_6 searching character 'J' in string 'DataString' *
  167.                          ; * *
  168.                          ; * Base index addressing [EBX + ESI] *
  169.                          ; * Input parameters: *
  170.                          ; * Reg: EBX – address offset of variable 'DataString' *
  171.                          ; * ESI – index of element *
  172.                          ; * AH - character to find 'J' *
  173.                          ; * Output: *
  174.                          ; * EAX - BOOL TRUE Found, FALSE not found *
  175.                          ; * *
  176.                          ; * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
  177.  000000E2                    FindChar_6 PROC NEAR
  178.  000000E2   2   BB 00000000 R            MOV EBX, OFFSET DataString                              ; load offset of variable 'DataString' into reg. EBX
  179.  000000E7   2   33 F6                XOR ESI, ESI                                            ; zero index in string 'DataString'
  180.  000000E9   2   B4 4A                MOV AH, 'J'                                             ; load the code of character 'J' into reg. AH
  181.  000000EB                Check_End:
  182.  000000EB   5   80 3C 1E FF          CMP BYTE PTR [EBX + ESI], 0FFH                          ; is it the end of a string (special character FF)?
  183.  000000EF 7m,3  74 08                JE Not_Find                                             ; found end character (guard)
  184.  000000F1   6   3A 24 1E             CMP AH, BYTE PTR [EBX + ESI]                            ; compare a char. with 1 char of string 'DataString'
  185.  000000F4 7m,3  74 09                JE Done                                                 ; character found!
  186.  000000F6   2   46               INC ESI                                                 ; increment an offset
  187.  000000F7   7m  EB F2                JMP Check_End                                           ; search loop
  188.  000000F9                Not_Find:
  189.  000000F9   2   B8 00000000          MOV EAX, 0                                              ; character not found
  190.  000000FE  10m  C3               RET                                                     ; return from procedure
  191.  000000FF                Done:
  192.  000000FF   2   B8 00000001          MOV EAX, 1                                              ; character found
  193.  00000104  10m  C3               RET                                                     ; return form procedure
  194.  00000105                    FindChar_6 ENDP                                         ; end of FindChar_6
  195.                          ; * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
  196.                          ; * Procedure ReadTime_1 measuring the duration of the procedure FindChar_1 *
  197.                          ; * *
  198.                          ; * The processor clock cycle counter is used for the measurement *
  199.                          ; * Input parameters: *
  200.                          ; * Output: *
  201.                          ; * EAX – time in CPU clock ticks *
  202.                          ; * *
  203.                          ; * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
  204.                          .586
  205.  00000105                    ReadTime_1 PROC NEAR
  206.  00000105  14   0F A2                CPUID                                                   ; intentionally no comments
  207.  00000107   6   0F 31                RDTSC                                                   ; read of time stamp counter
  208.  00000109   1   8B C8                MOV ECX, EAX
  209.  0000010B   1   E8 FFFFFEFC          CALL FindChar_1                                         ; call to tested function
  210.  00000110   6   0F 31                RDTSC
  211.  00000112   1   2B C1                SUB EAX, ECX
  212.  00000114   2   C3               RET                                                     ; return form procedure
  213.  00000115                    ReadTime_1 ENDP
  214.                          ; * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
  215.                        
  216.  00000115                    My_FindChar PROC NEAR
  217.  00000115   1   BB 00000000 R            MOV EBX, OFFSET DataString                              ; load offset of variable 'DataString' into reg. EBX
  218.  0000011A   2   80 3B 4A             CMP BYTE PTR [EBX], 'J'                             ; compare a char. with 1 char of string 'DataString'
  219.  0000011D   1   74 2A                JE Got_It
  220.  0000011F   1   43               INC EBX                                               ; character found!
  221.  00000120   2   80 3B 4A             CMP BYTE PTR [EBX], 'J'                             ; compare a char. with 1 char of string 'DataString'
  222.  00000123   1   74 24                JE Got_It  
  223.  00000125   1   43               INC EBX                                             ; character found!
  224.  00000126   2   80 3B 4A             CMP BYTE PTR [EBX], 'J'                             ; compare a char. with 1 char of string 'DataString'
  225.  00000129   1   74 1E                JE Got_It        
  226.  0000012B   1   43               INC EBX                                      ; character found!
  227.  0000012C   2   80 3B 4A             CMP BYTE PTR [EBX], 'J'                             ; compare a char. with 1 char of string 'DataString'
  228.  0000012F   1   74 18                JE Got_It
  229.  00000131   1   43               INC EBX                                              ; character found!
  230.  00000132   2   80 3B 4A             CMP BYTE PTR [EBX], 'J'                             ; compare a char. with 1 char of string 'DataString'
  231.  00000135   1   74 12                JE Got_It    
  232.  00000137   1   43               INC EBX                                          ; character found!
  233.  00000138   2   80 3B 4A             CMP BYTE PTR [EBX], 'J'                             ; compare a char. with 1 char of string 'DataString'
  234.  0000013B   1   74 0C                JE Got_It
  235.  0000013D   1   43               INC EBX
  236.  0000013E   2   80 3B 4A             CMP BYTE PTR [EBX], 'J'                             ; compare a char. with 1 char of string 'DataString'
  237.  00000141   1   74 06                JE Got_It                                               ; character found!
  238.  00000143                Not_Find:
  239.  00000143   1   B8 00000000          MOV EAX, 0                                              ; character not found
  240.  00000148   2   C3               RET                                                     ; return from procedure
  241.  00000149                Got_It:
  242.  00000149   1   B8 00000001          MOV EAX, 1                                              ; character found
  243.  0000014E   2   C3               RET                                                     ; return form procedure
  244.  0000014F                    My_FindChar ENDP
  245.  
  246.                       END DllEntry
  247.                          
  248. Microsoft (R) Macro Assembler Version 6.14.8444            04/04/20 16:51:01
  249. E:\VSProj3\JASol\JADll\mojadll.asm               Symbols 2 - 1
  250.  
  251.  
  252.  
  253.  
  254. Segments and Groups:
  255.  
  256.                 N a m e                 Size     Length   Align   Combine Class
  257.  
  258. FLAT . . . . . . . . . . . . . . . . .  GROUP
  259. _DATA  . . . . . . . . . . . . . . . .  32 Bit   00000008 DWord   Public  'DATA'   
  260. _TEXT  . . . . . . . . . . . . . . . .  32 Bit   0000014F DWord   Public  'CODE'   
  261.  
  262.  
  263. Procedures,  parameters and locals:
  264.  
  265.                 N a m e                 Type     Value    Attr
  266.  
  267. DllEntry . . . . . . . . . . . . . . .  P Near   00000000 _TEXT Length= 0000000C Public STDCALL
  268. FindChar_1 . . . . . . . . . . . . . .  P Near   0000000C _TEXT Length= 00000021 Public STDCALL
  269. FindChar_2 . . . . . . . . . . . . . .  P Near   00000035 _TEXT Length= 00000021 Public STDCALL
  270. FindChar_3 . . . . . . . . . . . . . .  P Near   00000056 _TEXT Length= 00000028 Public STDCALL
  271. FindChar_4 . . . . . . . . . . . . . .  P Near   0000007E _TEXT Length= 0000002A Public STDCALL
  272. FindChar_5 . . . . . . . . . . . . . .  P Near   000000A8 _TEXT Length= 0000003A Public STDCALL
  273. FindChar_6 . . . . . . . . . . . . . .  P Near   000000E2 _TEXT Length= 00000023 Public STDCALL
  274. My_FindChar  . . . . . . . . . . . . .  P Near   00000115 _TEXT Length= 0000003A Public STDCALL
  275. ReadTime_1 . . . . . . . . . . . . . .  P Near   00000105 _TEXT Length= 00000010 Public STDCALL
  276.  
  277.  
  278. Symbols:
  279.  
  280.                 N a m e                 Type     Value    Attr
  281.  
  282. @CodeSize  . . . . . . . . . . . . . .  Number   00000000h  
  283. @DataSize  . . . . . . . . . . . . . .  Number   00000000h  
  284. @Interface . . . . . . . . . . . . . .  Number   00000003h  
  285. @Model . . . . . . . . . . . . . . . .  Number   00000007h  
  286. @code  . . . . . . . . . . . . . . . .  Text     _TEXT
  287. @data  . . . . . . . . . . . . . . . .  Text     FLAT
  288. @fardata?  . . . . . . . . . . . . . .  Text     FLAT
  289. @fardata . . . . . . . . . . . . . . .  Text     FLAT
  290. @stack . . . . . . . . . . . . . . . .  Text     FLAT
  291.  
  292.        0 Warnings
  293.        0 Errors
  294.  
  295. # By Szymon Pluta
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement