Advertisement
Old_But_Gold

Зачет КПО

Jun 5th, 2023 (edited)
680
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 16.94 KB | None | 0 0
  1. Задачи по КПО
  2. 1)Дан массив целых знаковых чисел и целое знаковое число, посчитать кол-во элементов массива больше чем число.
  3.  
  4. Arr dw 5, 1, 2, 3, 4, 5
  5. Chislo dw 3
  6.  
  7. Push Arr
  8. Push [Chislo]
  9.  
  10. Call Procedure
  11.  
  12. Procedure:
  13. Push bp
  14. mov bp, sp
  15. Push bx
  16. mov bx, [bp + 6]
  17. Xor ax, ax
  18. mov cx, [bx]
  19. mov dx, [bp + 4]
  20.  
  21. @@:
  22. add bx, 2
  23. cmp word[bx], dx
  24. jle Skip
  25. inc ax
  26.  
  27. Skip:
  28. Loop @B
  29.  
  30. Pop bx bp
  31. Ret 4
  32.  
  33.  
  34.  
  35. 2)Дан массив, найти кол-во элементов, у которых старшие 2 бита единицы
  36.  
  37. Arr dw 4, 1, 2, 3, 4
  38.  
  39. Push Arr
  40.  
  41. Call Procedure
  42.  
  43. Procedure:
  44. Push bp
  45. mov bp, sp
  46. Push bx
  47. mov bx, [bp + 4]
  48. mov cx, word [bx]
  49. Xor ax, ax
  50. Push si
  51.  
  52. @@:
  53.  
  54. add bx, 2
  55. Xor dx, dx
  56. mov si, word [bx]
  57. Shl si, 1
  58. Adc dx, 0
  59. Shl si, 1
  60. Adc dx, 0
  61. Cmp dx, 2
  62. jne Skip
  63. inc ax
  64. Skip:
  65. Loop @B
  66.  
  67. Pop si
  68. Pop bx
  69. Pop bp
  70. Ret 2
  71.  
  72. //Для знаковых
  73. jne = jump not equal
  74. je = jump equal
  75. jle = jump less equal
  76. jge = jump greater equal
  77. //Для беззнаковых
  78. jb = jump below
  79. ja = jump above
  80.  
  81. 3) Сумма элементов массива
  82.  
  83. Arr dw 5, 1, 2, 3, 4, 5
  84.  
  85. Push Arr
  86. Call Procedure
  87.  
  88. Procedure:
  89. Push bp
  90. mov bp, sp
  91. Push bx
  92. mov bx, [bp + 4]
  93. mov cx, word[bx]
  94. Xor ax, ax
  95.  
  96. @@:
  97.  
  98. add bx, 2
  99. add ax, word[bx]
  100. Loop @B
  101.  
  102. Pop bx
  103. Pop bp
  104. Ret 2
  105.  
  106.  
  107.  
  108.  
  109. 4)Минимальный элемент массива
  110.  
  111. Arr 5, 1, 2, 3, 4, 5
  112.  
  113. Push Arr
  114. Call Procedure
  115.  
  116. Procedure:
  117. Push bp
  118. mov bp, sp
  119. Push bx
  120. mov bx, [bp + 4]
  121. mov cx, Word[bx]
  122. add bx, 2
  123. mov ax, Word[bx]
  124. dec cx
  125.  
  126. @@:
  127. add bx, 2
  128. cmp word[bx], ax
  129. jge Skip
  130. mov ax, word[bx]
  131.  
  132. Skip:
  133. Loop @B
  134.  
  135. Pop bx
  136. Pop bp
  137. Ret 2
  138.  
  139. 5)Инвертировать число типа 11010 -> 01011
  140.  
  141. Num dw 10
  142.  
  143. push [Num]
  144. call Procedure
  145.  
  146. Procedure:
  147. push bp
  148. mov bp, sp
  149. mov dx, [bp + 4]
  150. xor ax, ax
  151. @@:
  152. shl ax, 0
  153. shr dx, 1
  154. adc ax, 0
  155. test dx, dx
  156. jnz @B
  157.  
  158. pop bp
  159. ret 2
  160.  
  161. 6)Даны 2 массива, поменять местами элементы каждого индекса
  162.  
  163. xchg Word[bx], Word[si]
  164. mov Word[bx], Word[si]
  165. cmp, test…
  166. //Два операнда в памяти быть не могут с данными инструкциями.
  167.  
  168. Arr1 dw 5, 1, 2, 3, 4, 5
  169.  
  170. Arr2 dw 5, 3, 4, 5, 6, 7
  171.  
  172. Push Arr1
  173. Push Arr2
  174.  
  175. Call Procedure
  176.  
  177. Procedure:
  178. Push bp
  179. mov bp, sp
  180. Push bx
  181. mov bx, [bp + 4]
  182. Push si
  183. mov si, [bp + 6]
  184. mov cx, Word[si] (или же Word[bx])
  185.  
  186. @@:
  187. add bx, 2
  188. add si, 2
  189.  
  190. mov ax, Word[bx]
  191. xchg ax, Word[si]
  192. mov Word[bx], ax
  193.  
  194. Loop @B
  195.  
  196. Pop si bx bp
  197. Ret 4
  198.  
  199. 7) Дан массив и число N, нужно заполнить массив числами N-1, N-2, N-3 и т.д.
  200.  
  201. Arr dw 5, 5 dup ?
  202.  
  203. Chislo dw 6
  204.  
  205. Push Arr
  206. Push [Chislo]
  207.  
  208. Call Procedure
  209.  
  210. Procedure:
  211. Push bp
  212. mov bp, sp
  213. Push bx
  214. mov bx, [bp + 6]
  215. Xor ax, ax
  216. mov cx, [bx]
  217. mov dx, [bp + 4]
  218.  
  219. @@:
  220. add bx, 2
  221. dec dx
  222. mov word[bx], dx
  223. Loop @B
  224.  
  225. Pop bx bp
  226. Ret 4
  227.  
  228. 8)Дан массив знаковых чисел и знаковое число X, найти количество чисел, которые нацело делятся на Х
  229.  
  230. Arr dw 5, 1, 2, 3, 4, 5
  231. Chislo dw 2
  232.  
  233. Push Arr
  234. Push [Chislo]
  235.  
  236. Call Procedure
  237.  
  238. Procedure:
  239. Push bp
  240. mov bp, sp
  241. Push bx
  242. mov bx, [bp + 6]
  243. Push si
  244. Xor si, si
  245. mov cx, word[bx]
  246.  
  247. @@:
  248. add bx, 2
  249. mov ax, word[bx]
  250. div [bp + 4]
  251. test dx, dx
  252. jnz Skip
  253. inc si
  254. Skip:
  255. Loop @B
  256.  
  257. mov ax, si
  258. Pop si bx bp
  259. Ret 4
  260.  
  261. 9)Дано число X, надо написать, сколько 1 в двоичном представлении этого числа
  262.  
  263. Chislo dw 6
  264.  
  265. Push [Chislo]
  266.  
  267. Call Procedure
  268.  
  269. Procedure:
  270. Push bp
  271. mov bp, sp
  272. mov dx, [bp + 4]
  273. Xor ax, ax
  274.  
  275. @@:
  276. CF = 1 или 0 бит после сдвига или переполнения
  277. Shr dx, 1
  278. CF = сдвинутым битом, 0 или 1
  279. Adc ax, 0
  280. ax = ax + 0 + CF(0/1)
  281. test dx, dx
  282. jnz @B
  283.  
  284. Pop bp
  285. Ret 2
  286.  
  287. ax, dx, cx, sp - не работает с адресами (sp впринципе трогать хуйня идея)
  288. bx, di, si, bp - работает с адресами. Надо сохранять при запуске процедуры
  289.  
  290. 10) Даны 2 С-строки, проверить, равны ли они. 1-True/ 0- False
  291.  
  292. Pascal db 5, ‘Meow!’
  293. C-String db ‘Meow!’, 0
  294.  
  295. Str1 db ‘Meow’, 0
  296. Str2 db ‘Gaf’, 0
  297.  
  298. Push Str1
  299. Push Str2
  300.  
  301. Call Procedure
  302.  
  303. Procedure:
  304. push bp
  305. mov bp, sp
  306. push di
  307. mov di, [bp + 6]
  308. push si
  309. mov si, [bp + 4]
  310. xor ax, ax
  311.  
  312. Start:
  313. cmp Byte[di], 0
  314. je @Maybe
  315. cmp Byte[si], 0
  316. je @End
  317. movzx dx, Byte[di]
  318. cmp dx, Byte[si]
  319. jne @End
  320. inc si
  321. inc di
  322. jmp Start
  323. @Maybe:
  324. cmp Byte[si], 0
  325. jne @End
  326. inc ax
  327.  
  328. @End:
  329. Pop si di bp
  330. Ret 4
  331.  
  332. 11) Развернуть массив на 26 элементов ( число походу рандомное по условию будет)
  333.  
  334. Arr dw 26, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26
  335.  
  336. Push Arr
  337.  
  338. Call Procedure
  339.  
  340. Procedure:
  341. Push bp
  342. mov bp, sp
  343. Push bx
  344. mov bx, [bp + 4]
  345. mov cx, 13
  346. Push si
  347. mov si, bx
  348. add si, 54
  349.  
  350. @@:
  351. add bx, 2
  352. sub si, 2
  353. mov ax, word[si]
  354. xchg word[bx], ax
  355. mov word[si], ax
  356. Loop @B
  357.  
  358. Pop si bx bp
  359. Ret 2
  360. 12)Дана С-строка, состоящая из букв латинского алфавита и пробелов, найти в ней кол-во слов (может быть несколько пробелов в конце, в начале и между словами)
  361.  
  362.  
  363. Str db ‘Meow’, 0
  364.  
  365. Push Str
  366.  
  367. Call Procedure
  368. Procedure:
  369. Push bp
  370. mov bp, sp
  371. Xor ax, ax
  372. Push bx
  373. mov bx, [bp + 4]
  374. @@:
  375. cmp Byte[bx], 0
  376. je End
  377. cmp Byte[bx], ‘ ‘
  378. jne Skip
  379. inc bx
  380. jmp @B
  381.  
  382. Skip:
  383. inc ax
  384.  
  385. @Start:
  386. inc bx
  387. cmp Byte[bx], 0
  388. je End
  389. cmp Byte[bx], ‘ ‘
  390. je @B
  391. jmp @Start
  392.  
  393. End:
  394. Pop bx bp
  395. Ret 2
  396. 13) Дана С-строка, определить, является ли строка записью десятичного числа (пробелы в начале и в конце допускаются) Результат 1-True/0-False
  397.  
  398. Str db ‘ 123 ’, 0
  399.  
  400. Push Str
  401.  
  402. Call Procedure
  403. Procedure:
  404. Push bp
  405. mov bp, sp
  406. Xor ax, ax
  407. Push bx
  408. mov bx, [bp + 4]
  409. @@:
  410. cmp Byte[bx], 0
  411. je End
  412. cmp Byte[bx], ‘ ‘
  413. jne @Start
  414. inc bx
  415. jmp @B
  416.  
  417. @Start:
  418. inc bx
  419. cmp Byte[bx], 0
  420. je @Inc
  421. cmp Byte[bx], ‘ ‘
  422. je @CheckLast
  423. cmp Byte[bx], ‘0‘
  424. jb End
  425. cmp Byte[bx], ‘9’
  426. ja End
  427. jmp @Start
  428.  
  429.  
  430.  
  431. @CheckLast:
  432. inc bx
  433. cmp Byte[bx], 0
  434. je @Inc
  435. cmp Byte[bx], ‘ ‘
  436. jne End
  437. inc bx
  438. jmp @CheckLast
  439.  
  440. @Inc
  441. inc ax
  442.  
  443. End:
  444. Pop bx bp
  445. Ret 2
  446.  
  447. 14)Заменить первые N элементов на последовательность: -1,0,1,-1,0,1 (у меня подозрение, что могут меняться последовательности, снизу приведен код для 1,-1,0, но его изменить можно под условие, просто переставив строки)
  448.  
  449. Arr dw 6, 1, 2, 3, 4, 5, 6
  450. elem dw 4
  451.  
  452. Push Arr
  453. Push [elem]
  454.  
  455. Call Procedure
  456.  
  457. Procedure:
  458. Push bp
  459. mov bp, sp
  460. Push bx
  461. mov bx, [bp + 6]
  462. mov cx, [bp + 4]
  463. @@:
  464. add bx, 2
  465. mov Word[bx], -1
  466. dec cx
  467. test cx, cx
  468. je End
  469. add bx, 2
  470. mov Word[bx], 0
  471. dec cx
  472. test cx, cx
  473. je End
  474. add bx, 2
  475. mov Word[bx], 1
  476. dec cx
  477. test cx, cx
  478. je End
  479. jmp @B
  480.  
  481. End:
  482. Pop bx bp
  483. Ret 4
  484.  
  485.  
  486. 15)Дана строка S, содержащая латинские буквы, пробел и знаки препинания, а именно: , : ;
  487. Найти число знаков препинания, после которых нет пробела
  488.  
  489. Str db ‘Meow :::’, 0
  490.  
  491. Push Str
  492. Call Procedure
  493.  
  494. Procedure:
  495. push bp
  496. mov bp, sp
  497. push si
  498. mov si, [bp + 4]
  499. xor ax, ax
  500. @@:
  501. cmp Byte[si], 0
  502. je @End
  503. cmp Byte[si], ‘,’
  504. jne @F
  505. jmp @StartCheck
  506. @@:
  507. cmp Byte[si], ‘:’
  508. jne @F
  509. jmp @StartCheck
  510. @@:
  511. cmp Byte[si], ‘;’
  512. jne @Skip
  513. @StartCheck:
  514. cmp Byte[si + 1], ‘ ‘
  515. je @Skip
  516. inc ax
  517. @Skip:
  518. jmp @B
  519.  
  520. Pop si bp
  521. Ret 2
  522.  
  523. 16)Дан массив A[32] беззнаковых чисел и число Х, посчитать кол-во элементов массива меньших чем Х
  524.  
  525. Arr dw 32, 1, 2, 3, 4, 5 …
  526. Chislo dw 5
  527.  
  528. Push Arr
  529. Push [Chislo]
  530. Call Procedure
  531.  
  532. Procedure:
  533. Push bp
  534. mov bp, sp
  535. Push bx
  536. mov bx, [bp + 6]
  537. Xor ax, ax
  538. mov cx, Word[bx]
  539. mov dx, [bp + 4]
  540.  
  541. @@:
  542. add bx, 2
  543. cmp word[bx], dx
  544. jge Skip
  545. inc ax
  546.  
  547. Skip:
  548. Loop @B
  549.  
  550. Pop bx bp
  551. Ret 4
  552.  
  553. 17)Дана С-строка и символ, найти первое вхождение символа в строку (индексация с 1), если символ не найден, то вернуть 0
  554.  
  555. movzx dx, Byte[bx]
  556. dh dl
  557. movsx dx, Byte[bx]
  558. dh dl
  559. 200 до 255 = 1xxxxxxxb
  560. dh = 11111111
  561. dx = 111111111xxxxxxxb
  562. 100 до 255 = 0xxxxxxxb
  563. dh = 00000000b
  564. dx = 000000000xxxxxxxb
  565.  
  566. Str db ‘Meow’, 0
  567. Simbol db ‘M’
  568.  
  569. Push Str
  570. Push Simbol
  571.  
  572. Call Procedure
  573. Procedure:
  574. Push bp
  575. mov bp, sp
  576. Xor ax, ax
  577. Push bx
  578. mov bx, [bp + 4]
  579. movzx dx, [bx]
  580. mov bx, [bp + 6]
  581. @@:
  582. cmp Byte[bx], 0
  583. je End
  584. cmp Byte[bx], dx
  585. je Calculate
  586. inc bx
  587. jmp @B
  588.  
  589. Calculate:
  590. sub bx, [bp + 6]
  591. inc bx
  592. mov ax, bx
  593.  
  594. End:
  595. Pop bx bp
  596. Ret 4
  597.  
  598.  
  599. 18) Дано целое десятичное число Х = 564, найти десятичную сумму цифр этого числа
  600.  
  601. Chislo dw 564
  602.  
  603. Push [Chislo]
  604. Call Procedure
  605.  
  606. Procedure:
  607. Push bp
  608. mov bp, sp
  609. mov ax, [bp + 4]
  610. Xor cx, cx
  611. @@:
  612. mov dx, 10
  613. div dx
  614. add cx, dx
  615. test ax, ax
  616. jnz @B
  617. //В cx результат
  618.  
  619. Pop bp
  620. ret 2
  621.  
  622. 19)Дан массив на 25 беззнаковых элементов (индексация с 0) и беззнаковое число N <= 25. Найти кол-во элементов в массиве, чей индекс строго меньше N и старший бит равен 1
  623.  
  624. Arr dw 5, 1, 2, 3, 4, 5
  625. Chislo dw 3
  626.  
  627. Push Arr
  628. Push [Chislo]
  629.  
  630. Call Procedure
  631.  
  632. Procedure:
  633. Push bp
  634. mov bp, sp
  635. Push bx
  636. mov bx, [bp + 6]
  637. mov dx, [bp + 4]
  638. xor ax, ax
  639.  
  640. @@:
  641. add bx, 2
  642. cmp ax, dx
  643. jge @End
  644. Test Word[bx], Word[bx]
  645. Jns @Skip
  646. inc ax
  647. @Skip:
  648.  
  649. Loop @B
  650.  
  651. @End:
  652.  
  653. Pop bx bp
  654. Ret 4
  655.  
  656. 20)Дано целое знаковое число N. Сформировать массив A[48]. Cледующим образов: A[0] = N, A[1]= N-1, A[2] = N-2 и т.д.
  657.  
  658. Arr dw 48, 48 dup ?
  659. Chislo dw 56
  660.  
  661. Push Arr
  662. Push [Chislo]
  663. Call Procedure
  664.  
  665. Procedure:
  666. Push bp
  667. mov bp, sp
  668. Push bx
  669. mov bx, [bp + 6] ; Адрес на массив
  670. mov dx, [bp + 4] ; Само число N
  671. mov cx, Word[bx] ; Счетчик из Адреса bx
  672. @@:
  673. add bx, 2 ; Переход к 1 элементу
  674. mov word[bx], dx
  675. dec dx
  676. Loop @B
  677.  
  678. Pop bx bp
  679. Ret 4
  680.  
  681. 21)Дана С-строка из пробелов и букв. Все первые строчные буквы после пробелов заменить на заглавные
  682.  
  683. Str db ‘me ow!’, 0
  684.  
  685. Push Str
  686. Call Procedure
  687. Procedure:
  688. Push bp
  689. mov bp, sp
  690. Push bx
  691. mov bx, [bp + 4]
  692. @Start:
  693. cmp Byte[bx], 0
  694. je @End
  695. cmp Byte[bx], ‘ ‘
  696. jne @F
  697. inc bx
  698. jmp @Start
  699. @@:
  700. cmp Byte[bx], ‘a’
  701. jb @NextIteration
  702. cmp Byte[bx], ‘z’
  703. ja @NextIteration
  704. sub Byte[bx], ‘a’ - ‘A’
  705.  
  706. @NextIteration:
  707. inc bx
  708. cmp Byte[bx], 0
  709. je @End
  710. cmp Byte[bx], ‘ ‘
  711. je @Start
  712. jmp @NextIteration
  713. @End:
  714. Pop bx bp
  715. Ret 2
  716. 22)Дан массив целых знаковых чисел и целое знаковое число, посчитать кол-во элементов массива меньше чем число.
  717.  
  718. Arr dw 5, 1, 2, 3, 4, 5
  719. Numb dw 3
  720.  
  721. Push Arr
  722. Push [Numb]
  723. Call Procedure
  724.  
  725. Procedure:
  726. Push bp
  727. mov bp, sp
  728. Push bx
  729. mov bx, [bp + 6]
  730. mov dx, [bp + 4]
  731. mov cx, Word[bx]
  732. xor ax, ax
  733.  
  734. @@:
  735. add bx, 2
  736. cmp Word[bx], dx
  737. jge @Skip
  738. inc ax
  739. @Skip:
  740. Loop @B
  741.  
  742. @End:
  743. pop bx bp
  744. ret 4
  745.  
  746. 23)Дан массив беззнаковых чисел А[44], посчитать сумму четных элементов
  747.  
  748. Arr dw 44, 1, 2, 3, 4, 5…
  749. Push Arr
  750. Call Procedure
  751. Procedure:
  752. push bp
  753. mov bp, sp
  754. push bx
  755. mov bx, [bp + 4]
  756. xor ax, ax
  757. mov cx, Word[bx]
  758.  
  759. @@:
  760. add bx, 2
  761. test Word[bx], 1
  762. jnz @Skip
  763. inc ax
  764. @Skip:
  765. Loop @B
  766.  
  767. pop bx bp
  768. ret 2
  769.  
  770. 24)Дана С-строка. Найти её длину
  771.  
  772. str db ‘meow’, 0
  773.  
  774. push str
  775. call Procedure
  776.  
  777. Procedure:
  778. push bp
  779. mov bp, sp
  780. push bx
  781. mov bx, [bp + 4]
  782. xor cx, cx
  783. @@:
  784. cmp Byte[bx], 0
  785. je @End
  786. inc cx
  787. jmp @B
  788. @End:
  789. pop bx bp
  790. ret 2
  791.  
  792. 25)Заменить все строчные буквы на заглавные. Pascal строка
  793.  
  794. Str db 6, ‘string’
  795.  
  796. Push Str
  797. Call Procedure
  798.  
  799. Procedure:
  800. Push bp
  801. mov bp, sp
  802. Push bx
  803. mov bx, [bp + 4]
  804. movzx cx, byte[bx]
  805.  
  806. @@:
  807. inc bx
  808. cmp Byte[bx], ‘a’
  809. jb @Skip
  810. cmp Byte[bx], ‘z’
  811. ja @Skip
  812. sub Byte[bx], ‘a’ - ‘A’
  813.  
  814. @Skip:
  815. Loop @F
  816.  
  817. Pop bx bp
  818. Ret 2
  819.  
  820.  
  821.  
  822.  
  823.  
  824.  
  825. 26)Найти количество элементов в массиве меньше/больше данного.
  826.  
  827. Arr dw 5, 1, 2, 3, 4, 5
  828. Chislo dw 3
  829.  
  830. Push Arr
  831. Push [Chislo]
  832.  
  833. Call Procedure
  834.  
  835. Procedure:
  836. Push bp
  837. mov bp, sp
  838. Push bx
  839. mov bx, [bp + 6]
  840. Xor ax, ax
  841. mov cx, Word[bx]
  842. mov dx, [bp + 4]
  843.  
  844. @@:
  845. add bx, 2
  846. cmp word[bx], dx
  847. je Skip
  848. inc ax
  849.  
  850. Skip:
  851. Loop @B
  852.  
  853. Pop bx bp
  854. Ret 4
  855.  
  856. 27)Инвертировать 3-ий бит во всех элементах массива.
  857.  
  858. Arr dw 5, 1, 2, 3, 4, 5
  859.  
  860. Push Arr
  861.  
  862. Call Procedure
  863.  
  864. Procedure:
  865. Push bp
  866. mov bp, sp
  867. Push bx
  868. mov bx, [bp + 4]
  869. mov cx, Word[bx]
  870.  
  871. @@:
  872. add bx, 2
  873. xor Word[bx], 8 ; 8 = 1000b
  874. Loop @B
  875.  
  876. Pop bx bp
  877. Ret 2
  878.  
  879. 28)Найти сумму элементов в массиве, меньших данного и кратных 4
  880.  
  881. Arr dw 5, 1, 2, 3, 4, 5
  882. Chislo dw 4
  883.  
  884. Push Arr
  885. Push [Chislo]
  886. Call Procedure
  887.  
  888. Procedure:
  889. Push bp
  890. mov bp, sp
  891. Push bx
  892. mov bx, [bp + 6]
  893. mov dx, [bp + 4]
  894. mov cx, word[bx]
  895. xor ax, ax
  896.  
  897. @@:
  898. add bx, 2
  899. cmp word[bx], dx
  900. jnl @Skip
  901. test Word[bx], 3 ;11b
  902. jnz @Skip
  903. add ax, word[bx]
  904.  
  905. @Skip:
  906. Loop @B
  907.  
  908. 29)Дан массив и число. Все элементы массива, меньшие данного, увеличить на их индекс
  909.  
  910. Arr dw 5, 1, 2, 3, 4, 5
  911. Chislo dw 3
  912.  
  913. Push Arr
  914. Push [Chislo]
  915.  
  916. Call Procedure
  917.  
  918. Procedure:
  919. Push bp
  920. mov bp, sp
  921. Push bx
  922. mov bx, [bp + 6]
  923. mov cx, [bx]
  924. mov dx, [bp + 4]
  925. xor ax, ax
  926. @@:
  927. add bx, 2
  928. cmp word[bx], dx
  929. jge @Skip
  930. add word[bx], ax
  931.  
  932. @Skip:
  933. inc ax
  934. Loop @B
  935.  
  936. Pop bx bp
  937. Ret 4
  938.  
  939. 30)Шифрование Цезаря. Дана строка, состоящая из букв латинского алфавита и пробелов. Буквы заменить, прибавляя к коду символа 3. Т.е. ‘a’ на ‘d’
  940.  
  941. Str db ‘meow’, 0
  942.  
  943. Push Str
  944.  
  945. Call Procedure
  946.  
  947. Procedure:
  948. Push bp
  949. mov bp, sp
  950. Push bx
  951. mov bx, [bp + 4]
  952.  
  953. @@:
  954. cmp byte[bx], ‘a’
  955. jb @Skip
  956. cmp byte[bx], ‘z’
  957. ja @Skip
  958. add byte[bx], 3
  959. cmp Byte[bx], ‘z’
  960. jna @Skip
  961. sub Byte[bx], ‘z’
  962. add Byte[bx], ‘a’
  963. @Skip:
  964. inc bx
  965. cmp byte[bx], 0
  966. je @End
  967.  
  968. @End:
  969. Pop bx, bp
  970. Ret 2
  971.  
  972.  
  973. 31)Дан массив и число N. Заменить первые N элементов на 1,-1,1,-1 и т.д.
  974.  
  975. Arr dw 6, 1, 2, 3, 4, 5, 6
  976. elem dw 5
  977.  
  978. Push Arr
  979. Push [elem]
  980.  
  981. Call Procedure
  982.  
  983. Procedure:
  984. Push bp
  985. mov bp, sp
  986. Push bx
  987. mov bx, [bp + 6]
  988. mov cx, [bp + 4]
  989. @@:
  990. add bx, 2
  991. mov Word[bx], 1
  992. dec cx
  993. test cx, cx
  994. jz End
  995. add bx, 2
  996. mov Word[bx], -1
  997. Loop @B (В 14 задаче было без Loop)
  998.  
  999. End:
  1000. Pop bx bp
  1001. Ret 4
  1002.  
  1003.  
  1004.  
  1005. 32) Найти количество элементов массива А, в старшем бите которых 1
  1006.  
  1007. Arr dw 4, 1, 2, 3, 4
  1008.  
  1009. Push Arr
  1010.  
  1011. Call Procedure
  1012. Procedure:
  1013. Push bp
  1014. mov bp, sp
  1015. Push bx
  1016. mov bx, [bp + 4]
  1017. mov cx, word[bx]
  1018. Xor ax, ax
  1019.  
  1020. @@:
  1021. add bx, 2
  1022. mov dx, word[bx]
  1023. shl dx, 1
  1024. adc ax, 0
  1025.  
  1026. @Skip:
  1027. Loop @B
  1028.  
  1029. Pop bx bp
  1030. Ret 2
  1031.  
  1032. 33) Даны массивы A[50] и В[50], элементы которых целые знаковые числа. Записать в А[i] исходное значение A[i] + В[i], а в В[i] записать исходные A[i] - В[i]
  1033.  
  1034. Arr1 dw 50, 1, 2, 3, 4…
  1035. Arr2 dw 50, 1, 2, 3, 4…
  1036.  
  1037. Push Arr1
  1038. Push Arr2
  1039.  
  1040. Call Procedure
  1041.  
  1042. Procedure:
  1043. Push bp
  1044. mov bp, sp
  1045. Push bx
  1046. mov bx, [bp + 4] ;B Arr
  1047. Push si
  1048. mov si, [bp + 6] ; A Arr
  1049.  
  1050. @@:
  1051. add bx, 2
  1052. add si, 2
  1053. mov ax, Word[si] ; A[i]
  1054. add ax, Word[bx] ; A[i] + B[i]
  1055. mov Word[si], ax
  1056. sub ax, Word[bx] ; A[I]
  1057. sub ax, Word[bx] ; A[i] - B[I]
  1058. mov Word[bx], ax
  1059. Loop @B
  1060.  
  1061. Pop si bx bp
  1062. Ret 4
  1063.  
  1064.  
  1065.  
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement