Gistrec

asm lab 2

Oct 31st, 2018
352
0
Never
1
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C 1.84 KB | None | 0 0
  1. /**
  2.  * Программа находит минимальный и максимальный символ в строке
  3.  * Минимальный и максимальный символ хранятся в глобальных переменных _MIN и _MAX
  4.  * Строка передается как параметр в функцию
  5.  */
  6.  
  7. /******** MAIN.CPP ********/
  8. # include "stdlib.h"
  9.  
  10. // Объявляем функцию, с двумя параметрами - указатель на строку и кол-во символов
  11. extern "C" void __fastcall FUNC(int string_ptr, int count);
  12.  
  13. // Глобальные переменные
  14. extern "C" int MIN = 2147483647;
  15. extern "C" int MAX = 0;
  16.  
  17. int main() {
  18.     char str[] = { "asdasdad" }; // Строка
  19.  
  20.     int string_ptr = (int)&str;
  21.     FUNC(string_ptr, 8);
  22.  
  23.     printf("MIN = %d  MAX = %d\n", MIN, MAX);
  24.     return 0;
  25. }
  26.  
  27. /******** FUNT.ASM ********/
  28. .386
  29. .MODEL FLAT;
  30.  
  31. ; Глобальные переменны
  32. EXTERN _MIN: DWORD
  33. EXTERN _MAX: DWORD
  34.  
  35. .CODE
  36.  
  37. ; FASTCALL
  38. ; В ECX адрес строки
  39. ; В EDX кол-во символов
  40. @FUNC@8 PROC
  41.  
  42. mov     ESI, ECX
  43.  
  44. @ReadNextSymbol:
  45. XOR EBX, EBX
  46.  
  47. MOV     BL, [ESI]  ; Перемещаем символ в строке в регистр BL
  48. INC     ESI        ;
  49.  
  50. CMP     EBX, _MAX  ;
  51. JL      @IfNot     ; Сверяем символ с максимальным
  52. MOV     _MAX, EBX  ; Если он меньше - то НЕ изменяем максимальный символ
  53. @IfNot:            ;
  54.  
  55. CMP     EBX, _MIN  ;
  56. JG      @IfNot2    ; Сверяем символ с минимальным
  57. MOV     _MIN, EBX  ; Если он меньше - то НЕ изменяем минимальный символ
  58. @IfNot2:           ;
  59.  
  60. DEC EDX
  61. CMP EDX, 0
  62. JG @ReadNextSymbol ;
  63.  
  64.  
  65. RET
  66. @FUNC@8 ENDP
  67. END
Advertisement
Comments
  • User was banned
Add Comment
Please, Sign In to add comment