├── .gitignore
├── LICENSE
├── README.md
├── lab_01
├── docs
│ ├── statement0.pdf
│ └── statement1.pdf
└── src
│ └── MAIN.ASM
├── lab_02
├── docs
│ └── statement.pdf
└── src
│ └── MAIN.ASM
├── lab_03
├── docs
│ └── statement.pdf
└── src
│ ├── MAIN.ASM
│ └── examples
│ ├── lab3_1
│ ├── lr03_1_1.asm
│ └── lr03_1_2.asm
│ ├── lab3_2
│ ├── lr03_2_1.asm
│ └── lr03_2_2.asm
│ ├── lab3_3
│ └── lr03_3.asm
│ └── lab3_4
│ ├── lr03_4_1.asm
│ └── lr03_4_2.asm
├── lab_04
├── docs
│ └── statement.pdf
└── src
│ └── MAIN.ASM
├── lab_05
├── docs
│ └── statement.pdf
└── src
│ ├── CALC.ASM
│ ├── COMPILE.BAT
│ ├── INPUT.ASM
│ ├── MAIN.ASM
│ └── OUTPUT.ASM
├── lab_06
├── docs
│ └── statement.pdf
└── src
│ ├── COMPILE.BAT
│ └── MAIN.ASM
├── lab_07
├── docs
│ └── statement.pdf
└── src
│ ├── Makefile
│ ├── main.c
│ └── strcopy.asm
├── lab_08
├── docs
│ └── statement.pdf
└── src
│ ├── Makefile
│ └── main.c
└── lab_09
├── docs
└── statement.pdf
└── src
├── Makefile
├── app_disintel.txt
├── app_disnasm.txt
├── brut.py
└── main.c
/.gitignore:
--------------------------------------------------------------------------------
1 | # ASM files
2 | *.EXE
3 | *.OBJ
4 | *.COM
5 |
6 | # C files
7 | *.o
8 | *.exe
--------------------------------------------------------------------------------
/LICENSE:
--------------------------------------------------------------------------------
1 | GNU GENERAL PUBLIC LICENSE
2 | Version 3, 29 June 2007
3 |
4 | Copyright (C) 2007 Free Software Foundation, Inc.
5 | Everyone is permitted to copy and distribute verbatim copies
6 | of this license document, but changing it is not allowed.
7 |
8 | Preamble
9 |
10 | The GNU General Public License is a free, copyleft license for
11 | software and other kinds of works.
12 |
13 | The licenses for most software and other practical works are designed
14 | to take away your freedom to share and change the works. By contrast,
15 | the GNU General Public License is intended to guarantee your freedom to
16 | share and change all versions of a program--to make sure it remains free
17 | software for all its users. We, the Free Software Foundation, use the
18 | GNU General Public License for most of our software; it applies also to
19 | any other work released this way by its authors. You can apply it to
20 | your programs, too.
21 |
22 | When we speak of free software, we are referring to freedom, not
23 | price. Our General Public Licenses are designed to make sure that you
24 | have the freedom to distribute copies of free software (and charge for
25 | them if you wish), that you receive source code or can get it if you
26 | want it, that you can change the software or use pieces of it in new
27 | free programs, and that you know you can do these things.
28 |
29 | To protect your rights, we need to prevent others from denying you
30 | these rights or asking you to surrender the rights. Therefore, you have
31 | certain responsibilities if you distribute copies of the software, or if
32 | you modify it: responsibilities to respect the freedom of others.
33 |
34 | For example, if you distribute copies of such a program, whether
35 | gratis or for a fee, you must pass on to the recipients the same
36 | freedoms that you received. You must make sure that they, too, receive
37 | or can get the source code. And you must show them these terms so they
38 | know their rights.
39 |
40 | Developers that use the GNU GPL protect your rights with two steps:
41 | (1) assert copyright on the software, and (2) offer you this License
42 | giving you legal permission to copy, distribute and/or modify it.
43 |
44 | For the developers' and authors' protection, the GPL clearly explains
45 | that there is no warranty for this free software. For both users' and
46 | authors' sake, the GPL requires that modified versions be marked as
47 | changed, so that their problems will not be attributed erroneously to
48 | authors of previous versions.
49 |
50 | Some devices are designed to deny users access to install or run
51 | modified versions of the software inside them, although the manufacturer
52 | can do so. This is fundamentally incompatible with the aim of
53 | protecting users' freedom to change the software. The systematic
54 | pattern of such abuse occurs in the area of products for individuals to
55 | use, which is precisely where it is most unacceptable. Therefore, we
56 | have designed this version of the GPL to prohibit the practice for those
57 | products. If such problems arise substantially in other domains, we
58 | stand ready to extend this provision to those domains in future versions
59 | of the GPL, as needed to protect the freedom of users.
60 |
61 | Finally, every program is threatened constantly by software patents.
62 | States should not allow patents to restrict development and use of
63 | software on general-purpose computers, but in those that do, we wish to
64 | avoid the special danger that patents applied to a free program could
65 | make it effectively proprietary. To prevent this, the GPL assures that
66 | patents cannot be used to render the program non-free.
67 |
68 | The precise terms and conditions for copying, distribution and
69 | modification follow.
70 |
71 | TERMS AND CONDITIONS
72 |
73 | 0. Definitions.
74 |
75 | "This License" refers to version 3 of the GNU General Public License.
76 |
77 | "Copyright" also means copyright-like laws that apply to other kinds of
78 | works, such as semiconductor masks.
79 |
80 | "The Program" refers to any copyrightable work licensed under this
81 | License. Each licensee is addressed as "you". "Licensees" and
82 | "recipients" may be individuals or organizations.
83 |
84 | To "modify" a work means to copy from or adapt all or part of the work
85 | in a fashion requiring copyright permission, other than the making of an
86 | exact copy. The resulting work is called a "modified version" of the
87 | earlier work or a work "based on" the earlier work.
88 |
89 | A "covered work" means either the unmodified Program or a work based
90 | on the Program.
91 |
92 | To "propagate" a work means to do anything with it that, without
93 | permission, would make you directly or secondarily liable for
94 | infringement under applicable copyright law, except executing it on a
95 | computer or modifying a private copy. Propagation includes copying,
96 | distribution (with or without modification), making available to the
97 | public, and in some countries other activities as well.
98 |
99 | To "convey" a work means any kind of propagation that enables other
100 | parties to make or receive copies. Mere interaction with a user through
101 | a computer network, with no transfer of a copy, is not conveying.
102 |
103 | An interactive user interface displays "Appropriate Legal Notices"
104 | to the extent that it includes a convenient and prominently visible
105 | feature that (1) displays an appropriate copyright notice, and (2)
106 | tells the user that there is no warranty for the work (except to the
107 | extent that warranties are provided), that licensees may convey the
108 | work under this License, and how to view a copy of this License. If
109 | the interface presents a list of user commands or options, such as a
110 | menu, a prominent item in the list meets this criterion.
111 |
112 | 1. Source Code.
113 |
114 | The "source code" for a work means the preferred form of the work
115 | for making modifications to it. "Object code" means any non-source
116 | form of a work.
117 |
118 | A "Standard Interface" means an interface that either is an official
119 | standard defined by a recognized standards body, or, in the case of
120 | interfaces specified for a particular programming language, one that
121 | is widely used among developers working in that language.
122 |
123 | The "System Libraries" of an executable work include anything, other
124 | than the work as a whole, that (a) is included in the normal form of
125 | packaging a Major Component, but which is not part of that Major
126 | Component, and (b) serves only to enable use of the work with that
127 | Major Component, or to implement a Standard Interface for which an
128 | implementation is available to the public in source code form. A
129 | "Major Component", in this context, means a major essential component
130 | (kernel, window system, and so on) of the specific operating system
131 | (if any) on which the executable work runs, or a compiler used to
132 | produce the work, or an object code interpreter used to run it.
133 |
134 | The "Corresponding Source" for a work in object code form means all
135 | the source code needed to generate, install, and (for an executable
136 | work) run the object code and to modify the work, including scripts to
137 | control those activities. However, it does not include the work's
138 | System Libraries, or general-purpose tools or generally available free
139 | programs which are used unmodified in performing those activities but
140 | which are not part of the work. For example, Corresponding Source
141 | includes interface definition files associated with source files for
142 | the work, and the source code for shared libraries and dynamically
143 | linked subprograms that the work is specifically designed to require,
144 | such as by intimate data communication or control flow between those
145 | subprograms and other parts of the work.
146 |
147 | The Corresponding Source need not include anything that users
148 | can regenerate automatically from other parts of the Corresponding
149 | Source.
150 |
151 | The Corresponding Source for a work in source code form is that
152 | same work.
153 |
154 | 2. Basic Permissions.
155 |
156 | All rights granted under this License are granted for the term of
157 | copyright on the Program, and are irrevocable provided the stated
158 | conditions are met. This License explicitly affirms your unlimited
159 | permission to run the unmodified Program. The output from running a
160 | covered work is covered by this License only if the output, given its
161 | content, constitutes a covered work. This License acknowledges your
162 | rights of fair use or other equivalent, as provided by copyright law.
163 |
164 | You may make, run and propagate covered works that you do not
165 | convey, without conditions so long as your license otherwise remains
166 | in force. You may convey covered works to others for the sole purpose
167 | of having them make modifications exclusively for you, or provide you
168 | with facilities for running those works, provided that you comply with
169 | the terms of this License in conveying all material for which you do
170 | not control copyright. Those thus making or running the covered works
171 | for you must do so exclusively on your behalf, under your direction
172 | and control, on terms that prohibit them from making any copies of
173 | your copyrighted material outside their relationship with you.
174 |
175 | Conveying under any other circumstances is permitted solely under
176 | the conditions stated below. Sublicensing is not allowed; section 10
177 | makes it unnecessary.
178 |
179 | 3. Protecting Users' Legal Rights From Anti-Circumvention Law.
180 |
181 | No covered work shall be deemed part of an effective technological
182 | measure under any applicable law fulfilling obligations under article
183 | 11 of the WIPO copyright treaty adopted on 20 December 1996, or
184 | similar laws prohibiting or restricting circumvention of such
185 | measures.
186 |
187 | When you convey a covered work, you waive any legal power to forbid
188 | circumvention of technological measures to the extent such circumvention
189 | is effected by exercising rights under this License with respect to
190 | the covered work, and you disclaim any intention to limit operation or
191 | modification of the work as a means of enforcing, against the work's
192 | users, your or third parties' legal rights to forbid circumvention of
193 | technological measures.
194 |
195 | 4. Conveying Verbatim Copies.
196 |
197 | You may convey verbatim copies of the Program's source code as you
198 | receive it, in any medium, provided that you conspicuously and
199 | appropriately publish on each copy an appropriate copyright notice;
200 | keep intact all notices stating that this License and any
201 | non-permissive terms added in accord with section 7 apply to the code;
202 | keep intact all notices of the absence of any warranty; and give all
203 | recipients a copy of this License along with the Program.
204 |
205 | You may charge any price or no price for each copy that you convey,
206 | and you may offer support or warranty protection for a fee.
207 |
208 | 5. Conveying Modified Source Versions.
209 |
210 | You may convey a work based on the Program, or the modifications to
211 | produce it from the Program, in the form of source code under the
212 | terms of section 4, provided that you also meet all of these conditions:
213 |
214 | a) The work must carry prominent notices stating that you modified
215 | it, and giving a relevant date.
216 |
217 | b) The work must carry prominent notices stating that it is
218 | released under this License and any conditions added under section
219 | 7. This requirement modifies the requirement in section 4 to
220 | "keep intact all notices".
221 |
222 | c) You must license the entire work, as a whole, under this
223 | License to anyone who comes into possession of a copy. This
224 | License will therefore apply, along with any applicable section 7
225 | additional terms, to the whole of the work, and all its parts,
226 | regardless of how they are packaged. This License gives no
227 | permission to license the work in any other way, but it does not
228 | invalidate such permission if you have separately received it.
229 |
230 | d) If the work has interactive user interfaces, each must display
231 | Appropriate Legal Notices; however, if the Program has interactive
232 | interfaces that do not display Appropriate Legal Notices, your
233 | work need not make them do so.
234 |
235 | A compilation of a covered work with other separate and independent
236 | works, which are not by their nature extensions of the covered work,
237 | and which are not combined with it such as to form a larger program,
238 | in or on a volume of a storage or distribution medium, is called an
239 | "aggregate" if the compilation and its resulting copyright are not
240 | used to limit the access or legal rights of the compilation's users
241 | beyond what the individual works permit. Inclusion of a covered work
242 | in an aggregate does not cause this License to apply to the other
243 | parts of the aggregate.
244 |
245 | 6. Conveying Non-Source Forms.
246 |
247 | You may convey a covered work in object code form under the terms
248 | of sections 4 and 5, provided that you also convey the
249 | machine-readable Corresponding Source under the terms of this License,
250 | in one of these ways:
251 |
252 | a) Convey the object code in, or embodied in, a physical product
253 | (including a physical distribution medium), accompanied by the
254 | Corresponding Source fixed on a durable physical medium
255 | customarily used for software interchange.
256 |
257 | b) Convey the object code in, or embodied in, a physical product
258 | (including a physical distribution medium), accompanied by a
259 | written offer, valid for at least three years and valid for as
260 | long as you offer spare parts or customer support for that product
261 | model, to give anyone who possesses the object code either (1) a
262 | copy of the Corresponding Source for all the software in the
263 | product that is covered by this License, on a durable physical
264 | medium customarily used for software interchange, for a price no
265 | more than your reasonable cost of physically performing this
266 | conveying of source, or (2) access to copy the
267 | Corresponding Source from a network server at no charge.
268 |
269 | c) Convey individual copies of the object code with a copy of the
270 | written offer to provide the Corresponding Source. This
271 | alternative is allowed only occasionally and noncommercially, and
272 | only if you received the object code with such an offer, in accord
273 | with subsection 6b.
274 |
275 | d) Convey the object code by offering access from a designated
276 | place (gratis or for a charge), and offer equivalent access to the
277 | Corresponding Source in the same way through the same place at no
278 | further charge. You need not require recipients to copy the
279 | Corresponding Source along with the object code. If the place to
280 | copy the object code is a network server, the Corresponding Source
281 | may be on a different server (operated by you or a third party)
282 | that supports equivalent copying facilities, provided you maintain
283 | clear directions next to the object code saying where to find the
284 | Corresponding Source. Regardless of what server hosts the
285 | Corresponding Source, you remain obligated to ensure that it is
286 | available for as long as needed to satisfy these requirements.
287 |
288 | e) Convey the object code using peer-to-peer transmission, provided
289 | you inform other peers where the object code and Corresponding
290 | Source of the work are being offered to the general public at no
291 | charge under subsection 6d.
292 |
293 | A separable portion of the object code, whose source code is excluded
294 | from the Corresponding Source as a System Library, need not be
295 | included in conveying the object code work.
296 |
297 | A "User Product" is either (1) a "consumer product", which means any
298 | tangible personal property which is normally used for personal, family,
299 | or household purposes, or (2) anything designed or sold for incorporation
300 | into a dwelling. In determining whether a product is a consumer product,
301 | doubtful cases shall be resolved in favor of coverage. For a particular
302 | product received by a particular user, "normally used" refers to a
303 | typical or common use of that class of product, regardless of the status
304 | of the particular user or of the way in which the particular user
305 | actually uses, or expects or is expected to use, the product. A product
306 | is a consumer product regardless of whether the product has substantial
307 | commercial, industrial or non-consumer uses, unless such uses represent
308 | the only significant mode of use of the product.
309 |
310 | "Installation Information" for a User Product means any methods,
311 | procedures, authorization keys, or other information required to install
312 | and execute modified versions of a covered work in that User Product from
313 | a modified version of its Corresponding Source. The information must
314 | suffice to ensure that the continued functioning of the modified object
315 | code is in no case prevented or interfered with solely because
316 | modification has been made.
317 |
318 | If you convey an object code work under this section in, or with, or
319 | specifically for use in, a User Product, and the conveying occurs as
320 | part of a transaction in which the right of possession and use of the
321 | User Product is transferred to the recipient in perpetuity or for a
322 | fixed term (regardless of how the transaction is characterized), the
323 | Corresponding Source conveyed under this section must be accompanied
324 | by the Installation Information. But this requirement does not apply
325 | if neither you nor any third party retains the ability to install
326 | modified object code on the User Product (for example, the work has
327 | been installed in ROM).
328 |
329 | The requirement to provide Installation Information does not include a
330 | requirement to continue to provide support service, warranty, or updates
331 | for a work that has been modified or installed by the recipient, or for
332 | the User Product in which it has been modified or installed. Access to a
333 | network may be denied when the modification itself materially and
334 | adversely affects the operation of the network or violates the rules and
335 | protocols for communication across the network.
336 |
337 | Corresponding Source conveyed, and Installation Information provided,
338 | in accord with this section must be in a format that is publicly
339 | documented (and with an implementation available to the public in
340 | source code form), and must require no special password or key for
341 | unpacking, reading or copying.
342 |
343 | 7. Additional Terms.
344 |
345 | "Additional permissions" are terms that supplement the terms of this
346 | License by making exceptions from one or more of its conditions.
347 | Additional permissions that are applicable to the entire Program shall
348 | be treated as though they were included in this License, to the extent
349 | that they are valid under applicable law. If additional permissions
350 | apply only to part of the Program, that part may be used separately
351 | under those permissions, but the entire Program remains governed by
352 | this License without regard to the additional permissions.
353 |
354 | When you convey a copy of a covered work, you may at your option
355 | remove any additional permissions from that copy, or from any part of
356 | it. (Additional permissions may be written to require their own
357 | removal in certain cases when you modify the work.) You may place
358 | additional permissions on material, added by you to a covered work,
359 | for which you have or can give appropriate copyright permission.
360 |
361 | Notwithstanding any other provision of this License, for material you
362 | add to a covered work, you may (if authorized by the copyright holders of
363 | that material) supplement the terms of this License with terms:
364 |
365 | a) Disclaiming warranty or limiting liability differently from the
366 | terms of sections 15 and 16 of this License; or
367 |
368 | b) Requiring preservation of specified reasonable legal notices or
369 | author attributions in that material or in the Appropriate Legal
370 | Notices displayed by works containing it; or
371 |
372 | c) Prohibiting misrepresentation of the origin of that material, or
373 | requiring that modified versions of such material be marked in
374 | reasonable ways as different from the original version; or
375 |
376 | d) Limiting the use for publicity purposes of names of licensors or
377 | authors of the material; or
378 |
379 | e) Declining to grant rights under trademark law for use of some
380 | trade names, trademarks, or service marks; or
381 |
382 | f) Requiring indemnification of licensors and authors of that
383 | material by anyone who conveys the material (or modified versions of
384 | it) with contractual assumptions of liability to the recipient, for
385 | any liability that these contractual assumptions directly impose on
386 | those licensors and authors.
387 |
388 | All other non-permissive additional terms are considered "further
389 | restrictions" within the meaning of section 10. If the Program as you
390 | received it, or any part of it, contains a notice stating that it is
391 | governed by this License along with a term that is a further
392 | restriction, you may remove that term. If a license document contains
393 | a further restriction but permits relicensing or conveying under this
394 | License, you may add to a covered work material governed by the terms
395 | of that license document, provided that the further restriction does
396 | not survive such relicensing or conveying.
397 |
398 | If you add terms to a covered work in accord with this section, you
399 | must place, in the relevant source files, a statement of the
400 | additional terms that apply to those files, or a notice indicating
401 | where to find the applicable terms.
402 |
403 | Additional terms, permissive or non-permissive, may be stated in the
404 | form of a separately written license, or stated as exceptions;
405 | the above requirements apply either way.
406 |
407 | 8. Termination.
408 |
409 | You may not propagate or modify a covered work except as expressly
410 | provided under this License. Any attempt otherwise to propagate or
411 | modify it is void, and will automatically terminate your rights under
412 | this License (including any patent licenses granted under the third
413 | paragraph of section 11).
414 |
415 | However, if you cease all violation of this License, then your
416 | license from a particular copyright holder is reinstated (a)
417 | provisionally, unless and until the copyright holder explicitly and
418 | finally terminates your license, and (b) permanently, if the copyright
419 | holder fails to notify you of the violation by some reasonable means
420 | prior to 60 days after the cessation.
421 |
422 | Moreover, your license from a particular copyright holder is
423 | reinstated permanently if the copyright holder notifies you of the
424 | violation by some reasonable means, this is the first time you have
425 | received notice of violation of this License (for any work) from that
426 | copyright holder, and you cure the violation prior to 30 days after
427 | your receipt of the notice.
428 |
429 | Termination of your rights under this section does not terminate the
430 | licenses of parties who have received copies or rights from you under
431 | this License. If your rights have been terminated and not permanently
432 | reinstated, you do not qualify to receive new licenses for the same
433 | material under section 10.
434 |
435 | 9. Acceptance Not Required for Having Copies.
436 |
437 | You are not required to accept this License in order to receive or
438 | run a copy of the Program. Ancillary propagation of a covered work
439 | occurring solely as a consequence of using peer-to-peer transmission
440 | to receive a copy likewise does not require acceptance. However,
441 | nothing other than this License grants you permission to propagate or
442 | modify any covered work. These actions infringe copyright if you do
443 | not accept this License. Therefore, by modifying or propagating a
444 | covered work, you indicate your acceptance of this License to do so.
445 |
446 | 10. Automatic Licensing of Downstream Recipients.
447 |
448 | Each time you convey a covered work, the recipient automatically
449 | receives a license from the original licensors, to run, modify and
450 | propagate that work, subject to this License. You are not responsible
451 | for enforcing compliance by third parties with this License.
452 |
453 | An "entity transaction" is a transaction transferring control of an
454 | organization, or substantially all assets of one, or subdividing an
455 | organization, or merging organizations. If propagation of a covered
456 | work results from an entity transaction, each party to that
457 | transaction who receives a copy of the work also receives whatever
458 | licenses to the work the party's predecessor in interest had or could
459 | give under the previous paragraph, plus a right to possession of the
460 | Corresponding Source of the work from the predecessor in interest, if
461 | the predecessor has it or can get it with reasonable efforts.
462 |
463 | You may not impose any further restrictions on the exercise of the
464 | rights granted or affirmed under this License. For example, you may
465 | not impose a license fee, royalty, or other charge for exercise of
466 | rights granted under this License, and you may not initiate litigation
467 | (including a cross-claim or counterclaim in a lawsuit) alleging that
468 | any patent claim is infringed by making, using, selling, offering for
469 | sale, or importing the Program or any portion of it.
470 |
471 | 11. Patents.
472 |
473 | A "contributor" is a copyright holder who authorizes use under this
474 | License of the Program or a work on which the Program is based. The
475 | work thus licensed is called the contributor's "contributor version".
476 |
477 | A contributor's "essential patent claims" are all patent claims
478 | owned or controlled by the contributor, whether already acquired or
479 | hereafter acquired, that would be infringed by some manner, permitted
480 | by this License, of making, using, or selling its contributor version,
481 | but do not include claims that would be infringed only as a
482 | consequence of further modification of the contributor version. For
483 | purposes of this definition, "control" includes the right to grant
484 | patent sublicenses in a manner consistent with the requirements of
485 | this License.
486 |
487 | Each contributor grants you a non-exclusive, worldwide, royalty-free
488 | patent license under the contributor's essential patent claims, to
489 | make, use, sell, offer for sale, import and otherwise run, modify and
490 | propagate the contents of its contributor version.
491 |
492 | In the following three paragraphs, a "patent license" is any express
493 | agreement or commitment, however denominated, not to enforce a patent
494 | (such as an express permission to practice a patent or covenant not to
495 | sue for patent infringement). To "grant" such a patent license to a
496 | party means to make such an agreement or commitment not to enforce a
497 | patent against the party.
498 |
499 | If you convey a covered work, knowingly relying on a patent license,
500 | and the Corresponding Source of the work is not available for anyone
501 | to copy, free of charge and under the terms of this License, through a
502 | publicly available network server or other readily accessible means,
503 | then you must either (1) cause the Corresponding Source to be so
504 | available, or (2) arrange to deprive yourself of the benefit of the
505 | patent license for this particular work, or (3) arrange, in a manner
506 | consistent with the requirements of this License, to extend the patent
507 | license to downstream recipients. "Knowingly relying" means you have
508 | actual knowledge that, but for the patent license, your conveying the
509 | covered work in a country, or your recipient's use of the covered work
510 | in a country, would infringe one or more identifiable patents in that
511 | country that you have reason to believe are valid.
512 |
513 | If, pursuant to or in connection with a single transaction or
514 | arrangement, you convey, or propagate by procuring conveyance of, a
515 | covered work, and grant a patent license to some of the parties
516 | receiving the covered work authorizing them to use, propagate, modify
517 | or convey a specific copy of the covered work, then the patent license
518 | you grant is automatically extended to all recipients of the covered
519 | work and works based on it.
520 |
521 | A patent license is "discriminatory" if it does not include within
522 | the scope of its coverage, prohibits the exercise of, or is
523 | conditioned on the non-exercise of one or more of the rights that are
524 | specifically granted under this License. You may not convey a covered
525 | work if you are a party to an arrangement with a third party that is
526 | in the business of distributing software, under which you make payment
527 | to the third party based on the extent of your activity of conveying
528 | the work, and under which the third party grants, to any of the
529 | parties who would receive the covered work from you, a discriminatory
530 | patent license (a) in connection with copies of the covered work
531 | conveyed by you (or copies made from those copies), or (b) primarily
532 | for and in connection with specific products or compilations that
533 | contain the covered work, unless you entered into that arrangement,
534 | or that patent license was granted, prior to 28 March 2007.
535 |
536 | Nothing in this License shall be construed as excluding or limiting
537 | any implied license or other defenses to infringement that may
538 | otherwise be available to you under applicable patent law.
539 |
540 | 12. No Surrender of Others' Freedom.
541 |
542 | If conditions are imposed on you (whether by court order, agreement or
543 | otherwise) that contradict the conditions of this License, they do not
544 | excuse you from the conditions of this License. If you cannot convey a
545 | covered work so as to satisfy simultaneously your obligations under this
546 | License and any other pertinent obligations, then as a consequence you may
547 | not convey it at all. For example, if you agree to terms that obligate you
548 | to collect a royalty for further conveying from those to whom you convey
549 | the Program, the only way you could satisfy both those terms and this
550 | License would be to refrain entirely from conveying the Program.
551 |
552 | 13. Use with the GNU Affero General Public License.
553 |
554 | Notwithstanding any other provision of this License, you have
555 | permission to link or combine any covered work with a work licensed
556 | under version 3 of the GNU Affero General Public License into a single
557 | combined work, and to convey the resulting work. The terms of this
558 | License will continue to apply to the part which is the covered work,
559 | but the special requirements of the GNU Affero General Public License,
560 | section 13, concerning interaction through a network will apply to the
561 | combination as such.
562 |
563 | 14. Revised Versions of this License.
564 |
565 | The Free Software Foundation may publish revised and/or new versions of
566 | the GNU General Public License from time to time. Such new versions will
567 | be similar in spirit to the present version, but may differ in detail to
568 | address new problems or concerns.
569 |
570 | Each version is given a distinguishing version number. If the
571 | Program specifies that a certain numbered version of the GNU General
572 | Public License "or any later version" applies to it, you have the
573 | option of following the terms and conditions either of that numbered
574 | version or of any later version published by the Free Software
575 | Foundation. If the Program does not specify a version number of the
576 | GNU General Public License, you may choose any version ever published
577 | by the Free Software Foundation.
578 |
579 | If the Program specifies that a proxy can decide which future
580 | versions of the GNU General Public License can be used, that proxy's
581 | public statement of acceptance of a version permanently authorizes you
582 | to choose that version for the Program.
583 |
584 | Later license versions may give you additional or different
585 | permissions. However, no additional obligations are imposed on any
586 | author or copyright holder as a result of your choosing to follow a
587 | later version.
588 |
589 | 15. Disclaimer of Warranty.
590 |
591 | THERE IS NO WARRANTY FOR THE PROGRAM, TO THE EXTENT PERMITTED BY
592 | APPLICABLE LAW. EXCEPT WHEN OTHERWISE STATED IN WRITING THE COPYRIGHT
593 | HOLDERS AND/OR OTHER PARTIES PROVIDE THE PROGRAM "AS IS" WITHOUT WARRANTY
594 | OF ANY KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING, BUT NOT LIMITED TO,
595 | THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
596 | PURPOSE. THE ENTIRE RISK AS TO THE QUALITY AND PERFORMANCE OF THE PROGRAM
597 | IS WITH YOU. SHOULD THE PROGRAM PROVE DEFECTIVE, YOU ASSUME THE COST OF
598 | ALL NECESSARY SERVICING, REPAIR OR CORRECTION.
599 |
600 | 16. Limitation of Liability.
601 |
602 | IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING
603 | WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MODIFIES AND/OR CONVEYS
604 | THE PROGRAM AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES, INCLUDING ANY
605 | GENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING OUT OF THE
606 | USE OR INABILITY TO USE THE PROGRAM (INCLUDING BUT NOT LIMITED TO LOSS OF
607 | DATA OR DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY YOU OR THIRD
608 | PARTIES OR A FAILURE OF THE PROGRAM TO OPERATE WITH ANY OTHER PROGRAMS),
609 | EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE POSSIBILITY OF
610 | SUCH DAMAGES.
611 |
612 | 17. Interpretation of Sections 15 and 16.
613 |
614 | If the disclaimer of warranty and limitation of liability provided
615 | above cannot be given local legal effect according to their terms,
616 | reviewing courts shall apply local law that most closely approximates
617 | an absolute waiver of all civil liability in connection with the
618 | Program, unless a warranty or assumption of liability accompanies a
619 | copy of the Program in return for a fee.
620 |
621 | END OF TERMS AND CONDITIONS
622 |
623 | How to Apply These Terms to Your New Programs
624 |
625 | If you develop a new program, and you want it to be of the greatest
626 | possible use to the public, the best way to achieve this is to make it
627 | free software which everyone can redistribute and change under these terms.
628 |
629 | To do so, attach the following notices to the program. It is safest
630 | to attach them to the start of each source file to most effectively
631 | state the exclusion of warranty; and each file should have at least
632 | the "copyright" line and a pointer to where the full notice is found.
633 |
634 |
635 | Copyright (C)
636 |
637 | This program is free software: you can redistribute it and/or modify
638 | it under the terms of the GNU General Public License as published by
639 | the Free Software Foundation, either version 3 of the License, or
640 | (at your option) any later version.
641 |
642 | This program is distributed in the hope that it will be useful,
643 | but WITHOUT ANY WARRANTY; without even the implied warranty of
644 | MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
645 | GNU General Public License for more details.
646 |
647 | You should have received a copy of the GNU General Public License
648 | along with this program. If not, see .
649 |
650 | Also add information on how to contact you by electronic and paper mail.
651 |
652 | If the program does terminal interaction, make it output a short
653 | notice like this when it starts in an interactive mode:
654 |
655 | Copyright (C)
656 | This program comes with ABSOLUTELY NO WARRANTY; for details type `show w'.
657 | This is free software, and you are welcome to redistribute it
658 | under certain conditions; type `show c' for details.
659 |
660 | The hypothetical commands `show w' and `show c' should show the appropriate
661 | parts of the General Public License. Of course, your program's commands
662 | might be different; for a GUI interface, you would use an "about box".
663 |
664 | You should also get your employer (if you work as a programmer) or school,
665 | if any, to sign a "copyright disclaimer" for the program, if necessary.
666 | For more information on this, and how to apply and follow the GNU GPL, see
667 | .
668 |
669 | The GNU General Public License does not permit incorporating your program
670 | into proprietary programs. If your program is a subroutine library, you
671 | may consider it more useful to permit linking proprietary applications with
672 | the library. If this is what you want to do, use the GNU Lesser General
673 | Public License instead of this License. But first, please read
674 | .
675 |
--------------------------------------------------------------------------------
/README.md:
--------------------------------------------------------------------------------
1 | # Лабораторные работы по МЗЯП МГТУ им. Н. Э. Баумана, 4 семестр, ИУ7, 2020
2 | *Взял лабу?* **Поставь** звёздочку репозиторию, **извинись** перед мамой и **напиши сам**! Это **твоя** специальность!
3 |
--------------------------------------------------------------------------------
/lab_01/docs/statement0.pdf:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/hackfeed/mdpl-4th-sem-labs/461f1a32a7e00feb655c882987abe22cb4f1168c/lab_01/docs/statement0.pdf
--------------------------------------------------------------------------------
/lab_01/docs/statement1.pdf:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/hackfeed/mdpl-4th-sem-labs/461f1a32a7e00feb655c882987abe22cb4f1168c/lab_01/docs/statement1.pdf
--------------------------------------------------------------------------------
/lab_01/src/MAIN.ASM:
--------------------------------------------------------------------------------
1 | .MODEL TINY
2 | .DOSSEG
3 | .DATA
4 | MSG DB "Hello, World!", 0Dh, 0Ah, '$'
5 | .CODE
6 | .STARTUP
7 | MOV BX, 1
8 | MOV AH, 09h
9 | MOV DX, OFFSET MSG
10 | ADD BX, 10
11 | INT21h
12 | MOV AH, 4Ch
13 | INT 21h
14 | END
--------------------------------------------------------------------------------
/lab_02/docs/statement.pdf:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/hackfeed/mdpl-4th-sem-labs/461f1a32a7e00feb655c882987abe22cb4f1168c/lab_02/docs/statement.pdf
--------------------------------------------------------------------------------
/lab_02/src/MAIN.ASM:
--------------------------------------------------------------------------------
1 | StkSeg SEGMENT PARA STACK 'STACK'
2 | DB 200h DUP (?)
3 | StkSeg ENDS
4 |
5 | DataS SEGMENT WORD 'DATA'
6 | HelloMessage DB 13
7 | DB 10
8 | DB 'Hello, world !'
9 | DB '$'
10 | DataS ENDS
11 |
12 | Code SEGMENT WORD 'CODE'
13 | ASSUME CS:Code, DS:DataS
14 | DispMsg:
15 | mov AX, DataS
16 | mov DS, AX
17 |
18 | mov DX,OFFSET HelloMessage
19 |
20 | mov CX, 3
21 | Print:
22 | mov AH, 9
23 | int 21h
24 | mov AH, 7
25 | INT 21h
26 | loop Print
27 |
28 | mov AH, 4Ch
29 | int 21h
30 | Code ENDS
31 | END DispMsg
32 |
--------------------------------------------------------------------------------
/lab_03/docs/statement.pdf:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/hackfeed/mdpl-4th-sem-labs/461f1a32a7e00feb655c882987abe22cb4f1168c/lab_03/docs/statement.pdf
--------------------------------------------------------------------------------
/lab_03/src/MAIN.ASM:
--------------------------------------------------------------------------------
1 | ; Stack segment.
2 | STACKSEG SEGMENT PARA STACK 'STACK'
3 | DB 100 DUP(0)
4 | STACKSEG ENDS
5 |
6 | ; Buffer segment.
7 | DATASEG1 SEGMENT PARA 'DATA'
8 | DB 100
9 | DB 0
10 | DB 101 DUP(0)
11 | DATASEG1 ENDS
12 |
13 | ; Result data segment.
14 | DATASEG2 SEGMENT PARA 'DATA'
15 | DB 2 DUP(0)
16 | DATASEG2 ENDS
17 |
18 | ; Main code segment.
19 | CODESEG SEGMENT PARA 'CODE'
20 | ASSUME CS:CODESEG, DS:DATASEG1, ES:DATASEG2, SS:STACKSEG
21 | MAIN:
22 | ; DATASEG1 preparation.
23 | MOV AX, DATASEG1
24 | MOV DS, AX
25 |
26 | ; Echoed input.
27 | MOV AH, 0AH
28 | MOV DX, 0
29 | INT 21H
30 |
31 | ; Sum of 2nd and 5th digits from input.
32 | MOV DH, DS:3
33 | SUB DH, 48
34 | ADD DH, DS:6
35 | MOV ES:1, DH
36 |
37 | ; Output of found sum.
38 | MOV AH, 2
39 | MOV DL, 13
40 | INT 21H
41 | MOV DL, 10
42 | INT 21H
43 | MOV DL, ES:1
44 | INT 21H
45 |
46 | ; Program termination.
47 | MOV AH, 4CH
48 | INT 21H
49 | CODESEG ENDS
50 | END MAIN
51 |
--------------------------------------------------------------------------------
/lab_03/src/examples/lab3_1/lr03_1_1.asm:
--------------------------------------------------------------------------------
1 | EXTRN output_X: near
2 |
3 | STK SEGMENT PARA STACK 'STACK'
4 | db 100 dup(0)
5 | STK ENDS
6 |
7 | DSEG SEGMENT PARA PUBLIC 'DATA'
8 | X db 'R'
9 | DSEG ENDS
10 |
11 | CSEG SEGMENT PARA PUBLIC 'CODE'
12 | assume CS:CSEG, DS:DSEG, SS:STK
13 | main:
14 | mov ax, DSEG
15 | mov ds, ax
16 |
17 | call output_X
18 |
19 | mov ax, 4c00h
20 | int 21h
21 | CSEG ENDS
22 |
23 | PUBLIC X
24 |
25 | END main
--------------------------------------------------------------------------------
/lab_03/src/examples/lab3_1/lr03_1_2.asm:
--------------------------------------------------------------------------------
1 | PUBLIC output_X
2 | EXTRN X: byte
3 |
4 | DS2 SEGMENT AT 0b800h
5 | CA LABEL byte
6 | ORG 80 * 2 * 2 + 2 * 2
7 | SYMB LABEL word
8 | DS2 ENDS
9 |
10 | CSEG SEGMENT PARA PUBLIC 'CODE'
11 | assume CS:CSEG, ES:DS2
12 | output_X proc near
13 | mov ax, DS2
14 | mov es, ax
15 | mov ah, 10
16 | mov al, X
17 | mov symb, ax
18 | ret
19 | output_X endp
20 | CSEG ENDS
21 | END
--------------------------------------------------------------------------------
/lab_03/src/examples/lab3_2/lr03_2_1.asm:
--------------------------------------------------------------------------------
1 | STK SEGMENT para STACK 'STACK'
2 | db 100 dup(0)
3 | STK ENDS
4 |
5 | SD1 SEGMENT para common 'DATA'
6 | W dw 3444h
7 | SD1 ENDS
8 | END
9 |
--------------------------------------------------------------------------------
/lab_03/src/examples/lab3_2/lr03_2_2.asm:
--------------------------------------------------------------------------------
1 | SD1 SEGMENT para common 'DATA'
2 | C1 LABEL byte
3 | ORG 1h
4 | C2 LABEL byte
5 | SD1 ENDS
6 |
7 | CSEG SEGMENT para 'CODE'
8 | ASSUME CS:CSEG, DS:SD1
9 | main:
10 | mov ax, SD1
11 | mov ds, ax
12 | mov ah, 2
13 | mov dl, C1
14 | int 21h
15 | mov dl, C2
16 | int 21h
17 | mov ax, 4c00h
18 | int 21h
19 | CSEG ENDS
20 | END main
--------------------------------------------------------------------------------
/lab_03/src/examples/lab3_3/lr03_3.asm:
--------------------------------------------------------------------------------
1 | SD1 SEGMENT para public 'DATA'
2 | S1 db 'Y'
3 | db 65535 - 2 dup (0)
4 | SD1 ENDS
5 |
6 | SD2 SEGMENT para public 'DATA'
7 | S2 db 'E'
8 | db 65535 - 2 dup (0)
9 | SD2 ENDS
10 |
11 | SD3 SEGMENT para public 'DATA'
12 | S3 db 'S'
13 | db 65535 - 2 dup (0)
14 | SD3 ENDS
15 |
16 | CSEG SEGMENT para public 'CODE'
17 | assume CS:CSEG, DS:SD1
18 | output:
19 | mov ah, 2
20 | int 21h
21 | mov dl, 13
22 | int 21h
23 | mov dl, 10
24 | int 21h
25 | ret
26 | main:
27 | mov ax, SD1
28 | mov ds, ax
29 | mov dl, S1
30 | call output
31 | assume DS:SD2
32 | mov ax, SD2
33 | mov ds, ax
34 | mov dl, S2
35 | call output
36 | assume DS:SD3
37 | mov ax, SD3
38 | mov ds, ax
39 | mov dl, S3
40 | call output
41 |
42 | mov ax, 4c00h
43 | int 21h
44 | CSEG ENDS
45 | END main
--------------------------------------------------------------------------------
/lab_03/src/examples/lab3_4/lr03_4_1.asm:
--------------------------------------------------------------------------------
1 | PUBLIC X
2 | EXTRN exit: far
3 |
4 | SSTK SEGMENT para STACK 'STACK'
5 | db 100 dup(0)
6 | SSTK ENDS
7 |
8 | SD1 SEGMENT para public 'DATA'
9 | X db 'X'
10 | SD1 ENDS
11 |
12 | SC1 SEGMENT para public 'CODE'
13 | assume CS:SC1, DS:SD1
14 | main:
15 | jmp exit
16 | SC1 ENDS
17 | END main
--------------------------------------------------------------------------------
/lab_03/src/examples/lab3_4/lr03_4_2.asm:
--------------------------------------------------------------------------------
1 | EXTRN X: byte
2 | PUBLIC exit
3 |
4 | SD2 SEGMENT para 'DATA'
5 | Y db 'Y'
6 | SD2 ENDS
7 |
8 | SC2 SEGMENT para public 'CODE'
9 | assume CS:SC2, DS:SD2
10 | exit:
11 | mov ax, seg X
12 | mov es, ax
13 | mov bh, es:X
14 |
15 | mov ax, SD2
16 | mov ds, ax
17 |
18 | xchg ah, Y
19 | xchg ah, ES:X
20 | xchg ah, Y
21 |
22 | mov ah, 2
23 | mov dl, Y
24 | int 21h
25 |
26 | mov ax, 4c00h
27 | int 21h
28 | SC2 ENDS
29 | END
--------------------------------------------------------------------------------
/lab_04/docs/statement.pdf:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/hackfeed/mdpl-4th-sem-labs/461f1a32a7e00feb655c882987abe22cb4f1168c/lab_04/docs/statement.pdf
--------------------------------------------------------------------------------
/lab_04/src/MAIN.ASM:
--------------------------------------------------------------------------------
1 | ; Stack segment.
2 | STACKSEG SEGMENT PARA STACK 'STACK'
3 | DB 100 DUP(0)
4 | STACKSEG ENDS
5 |
6 | ; Matrix segment.
7 | DATASEG SEGMENT PARA 'DATA'
8 | RMSG DB 'Enter matrix rows: $'
9 | CMSG DB 'Enter matrix columns: $'
10 | MMSG DB 'Enter matrix:$'
11 | RESMSG DB 'Reversed matrix:$'
12 | DECR DW 0
13 | STEP DW 0
14 | ROWS DB ?
15 | COLS DB 0
16 | COLSDIVTWO DB ?
17 | MATRIX DB 9 * 9 DUP(?)
18 | DATASEG ENDS
19 |
20 | ; Main code segment.
21 | CODESEG SEGMENT PARA 'CODE'
22 | ASSUME CS:CODESEG, DS:DATASEG, SS:STACKSEG
23 |
24 | ; Input symbol with echo.
25 | INSYMB:
26 | MOV AH, 1
27 | INT 21H
28 | RET
29 |
30 | ; Echo symbol.
31 | OUTSYMB:
32 | MOV AH, 2
33 | INT 21H
34 | RET
35 |
36 | ; Carriage return + line feed.
37 | CRLF:
38 | MOV AH, 2
39 | MOV DL, 13
40 | INT 21H
41 | MOV DL, 10
42 | INT 21H
43 | RET
44 |
45 | ; Echo space symbol.
46 | PRINTSPACE:
47 | MOV AH, 2
48 | MOV DL, ' '
49 | INT 21H
50 | RET
51 |
52 | ; Main code segment.
53 | MAIN:
54 | ; DATASEG preparation.
55 | MOV AX, DATASEG
56 | MOV DS, AX
57 |
58 | ; Input invitation.
59 | MOV AH, 9
60 | MOV DX, OFFSET RMSG
61 | INT 21H
62 |
63 | ; Input ROWS.
64 | CALL INSYMB
65 | MOV ROWS, AL
66 | SUB ROWS, '0'
67 | CALL CRLF
68 |
69 | ; Input invitation.
70 | MOV AH, 9
71 | MOV DX, OFFSET CMSG
72 | INT 21H
73 |
74 | ; Input COLS.
75 | CALL INSYMB
76 | MOV COLS, AL
77 | SUB COLS, '0'
78 | CALL CRLF
79 |
80 | ; Input invitation.
81 | MOV AH, 9
82 | MOV DX, OFFSET MMSG
83 | INT 21H
84 | CALL CRLF
85 |
86 | ; Input matrix in matrix style.
87 | MOV BX, 0 ; Array index.
88 | MOV CL, ROWS ; Cycle index.
89 | INMAT:
90 | MOV CL, COLS ; Rewrite cycle index.
91 | INROW:
92 | CALL INSYMB ; Input symbol.
93 | MOV MATRIX[BX], AL ; Write it to Matrix.
94 | INC BX ; Increment array index.
95 | CALL PRINTSPACE ; Echo space.
96 | LOOP INROW
97 | CALL CRLF ; Start next row input from new line.
98 | MOV CL, ROWS ; Reset cycle index to rows.
99 | MOV SI, DECR ; Move decrement to register.
100 | SUB CX, SI ; Decrease cycle index.
101 | INC DECR ; Increase decrement.
102 | LOOP INMAT
103 |
104 | CALL CRLF
105 |
106 | ; Find half of columns to iterate over it.
107 | MOV AH, 0
108 | MOV AL, COLS
109 | MOV BL, 2
110 | DIV BL
111 |
112 | ; If matrix is one-columned, then make it 1.
113 | CMP AL, 0
114 | JNE CODE
115 | ADD AL, 1
116 | CODE:
117 | MOV COLSDIVTWO, AL
118 |
119 | ; Reset decrement.
120 | MOV DECR, 0
121 |
122 | ; Swap Matrix columns.
123 | ; 1 with N, 2 with N-1 and so on.
124 | MOV BX, 0 ; Array index.
125 | MOV CL, ROWS ; Cycle index.
126 | EXCHANGE:
127 | MOV CL, COLSDIVTWO ; Rewrite cycle index.
128 | MOV DI, 1 ; Prepare to find N-m index.
129 | COLEXCHANGE:
130 | MOV AL, MATRIX[BX] ; Store m element in AL.
131 | ; Start N-m index magic.
132 | MOV SI, BX
133 | MOV DL, COLS
134 | MOV DH, 0
135 | ADD SI, DX
136 | SUB SI, DI
137 | ; End N-m index magic.
138 | MOV DL, MATRIX[SI] ; Store N-m element in DL.
139 | ; Exchange m and N-m elements of row.
140 | MOV MATRIX[SI], AL
141 | MOV MATRIX[BX], DL
142 | ADD DI, 2 ; Magic continues.
143 | INC BX ; Increase array index.
144 | LOOP COLEXCHANGE
145 | ADD BL, COLSDIVTWO ; Go to next row.
146 | TEST COLS, 1 ; If columns is odd.
147 | JP EVENN ; Jump when it is even.
148 | INC BX ; Increase BX in case of odd.
149 | EVENN:
150 | MOV CL, ROWS ; Reset cycle index to rows.
151 | MOV SI, DECR ; Move decrement to register.
152 | SUB CX, SI ; Decrease cycle index.
153 | INC DECR ; Increase decrement.
154 | LOOP EXCHANGE
155 |
156 | ; Output label.
157 | MOV AH, 9
158 | MOV DX, OFFSET RESMSG
159 | INT 21H
160 | CALL CRLF
161 |
162 | ; Reset decrement.
163 | MOV DECR, 0
164 |
165 | ; Output matrix in matrix style.
166 | MOV BX, 0 ; Array index.
167 | MOV CL, ROWS ; Cycle index.
168 | OUTMAT:
169 | MOV CL, COLS ; Rewrite cycle index.
170 | OUTROW:
171 | MOV DL, MATRIX[BX] ; Get element from Matrix.
172 | CALL OUTSYMB ; Echo it.
173 | INC BX ; Increment array index.
174 | CALL PRINTSPACE ; Echo space.
175 | LOOP OUTROW
176 | CALL CRLF ; Start next row output from new line.
177 | MOV CL, ROWS ; Reset cycle index to rows.
178 | MOV SI, DECR ; Move decrement to register.
179 | SUB CX, SI ; Decrease cycle index.
180 | INC DECR ; Increase decrement.
181 | LOOP OUTMAT
182 |
183 | ; Program termination.
184 | MOV AX, 4C00H
185 | INT 21H
186 | CODESEG ENDS
187 | END MAIN
188 |
--------------------------------------------------------------------------------
/lab_05/docs/statement.pdf:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/hackfeed/mdpl-4th-sem-labs/461f1a32a7e00feb655c882987abe22cb4f1168c/lab_05/docs/statement.pdf
--------------------------------------------------------------------------------
/lab_05/src/CALC.ASM:
--------------------------------------------------------------------------------
1 | EXTRN NUMBER : WORD
2 |
3 | PUBLIC UHEX
4 | PUBLIC SBIN
5 | PUBLIC SIGN
6 |
7 | PUBLIC TOUHEX
8 |
9 | DATASEG SEGMENT PARA PUBLIC 'DATA'
10 | MASK16 DW 15
11 | MASK2 DW 1
12 | UHEX DB 4 DUP('0'), '$'
13 | SBIN DB 16 DUP('0'), '$'
14 | SIGN DB ' '
15 | DATASEG ENDS
16 |
17 | CODESEG SEGMENT PARA PUBLIC 'CODE'
18 | ASSUME CS:CODESEG, DS:DATASEG
19 |
20 | TOUHEX PROC NEAR
21 | MOV AX, NUMBER
22 | MOV BX, 3
23 | GETHEX:
24 | MOV DX, AX
25 | AND DX, MASK16
26 | CMP DL, 10
27 | JB ISDIGIT
28 | ADD DL, 7
29 | ISDIGIT:
30 | ADD DL, '0'
31 | MOV UHEX[BX], DL
32 | MOV CL, 4
33 | SAR AX, CL
34 | DEC BX
35 | CMP BX, -1
36 | JNE GETHEX
37 | RET
38 | TOUHEX ENDP
39 |
40 | TOSBIN PROC NEAR
41 | MOV CL, ' '
42 | MOV SIGN, CL
43 | MOV AX, NUMBER
44 | CMP AX, 32767
45 | JBE NOTOVERFLOW
46 | SUB AX, 1
47 | NOT AX
48 | MOV CL, '-'
49 | MOV SIGN, CL
50 | NOTOVERFLOW:
51 | MOV BX, 15
52 | GETBIN:
53 | MOV DX, AX
54 | AND DX, MASK2
55 | ADD DL, '0'
56 | MOV SBIN[BX], DL
57 | MOV CL, 1
58 | SAR AX, CL
59 | DEC BX
60 | CMP BX, -1
61 | JNE GETBIN
62 | RET
63 | TOSBIN ENDP
64 |
65 | CODESEG ENDS
66 | END
--------------------------------------------------------------------------------
/lab_05/src/COMPILE.BAT:
--------------------------------------------------------------------------------
1 | ML MAIN.ASM INPUT.ASM OUTPUT.ASM CALC.ASM
2 | DEL MAIN.OBJ
3 | DEL INPUT.OBJ
4 | DEL OUTPUT.OBJ
5 | DEL CALC.OBJ
--------------------------------------------------------------------------------
/lab_05/src/INPUT.ASM:
--------------------------------------------------------------------------------
1 | PUBLIC NUMBER
2 |
3 | PUBLIC INCMD
4 | PUBLIC INDECUNSGN
5 |
6 | DATASEG SEGMENT PARA PUBLIC 'DATA'
7 | NUMBER DW 0
8 | INMSG DB 'Enter unsigned decimal number (from 0 to 65535): $'
9 | DATASEG ENDS
10 |
11 | CODESEG SEGMENT PARA PUBLIC 'CODE'
12 | ASSUME CS:CODESEG, DS:DATASEG
13 |
14 | INCMD PROC NEAR
15 | MOV AH, 1
16 | INT 21H
17 | SUB AL, '0'
18 | MOV CL, 2
19 | MUL CL
20 | MOV SI, AX
21 | RET
22 | INCMD ENDP
23 |
24 | INDECUNSGN PROC NEAR
25 | MOV AH, 9
26 | MOV DX, OFFSET INMSG
27 | INT 21H
28 |
29 | MOV BX, 0
30 |
31 | INSYMB:
32 | MOV AH, 1
33 | INT 21H
34 | CMP AL, 13
35 | JE ENDINP
36 | MOV CL, AL
37 | MOV AX, 10
38 | MUL BX
39 | MOV BX, AX
40 | MOV CH, 0
41 | SUB CL, '0'
42 | ADD BX, CX
43 | JMP INSYMB
44 |
45 | ENDINP:
46 | MOV NUMBER, BX
47 | RET
48 | INDECUNSGN ENDP
49 |
50 | CODESEG ENDS
51 | END
--------------------------------------------------------------------------------
/lab_05/src/MAIN.ASM:
--------------------------------------------------------------------------------
1 | EXTRN INCMD: NEAR
2 | EXTRN INDECUNSGN: NEAR
3 | EXTRN OUTUHEX: NEAR
4 | EXTRN OUTSBIN: NEAR
5 |
6 | EXTRN CRLF: NEAR
7 |
8 | STACKSEG SEGMENT PARA STACK 'STACK'
9 | DB 200H DUP(0)
10 | STACKSEG ENDS
11 |
12 | DATASEG SEGMENT PARA PUBLIC 'DATA'
13 | MENU DB 'Available actions:', 13, 10, 10
14 | DB '0. Input unsigned decimal number;', 13, 10
15 | DB '1. Convert to unsigned hexadecimal;', 13, 10
16 | DB '2. Convert to signed binary;', 13, 10, 10
17 | DB '3. Exit program.', 13, 10, 10
18 | DB 'Choose action: $'
19 | ACTIONS DW INDECUNSGN, OUTUHEX, OUTSBIN, EXIT
20 | DATASEG ENDS
21 |
22 | CODESEG SEGMENT PARA PUBLIC 'CODE'
23 | ASSUME CS:CODESEG, DS:DATASEG, SS:STACKSEG
24 |
25 | OUTMENU PROC NEAR
26 | MOV AH, 9
27 | MOV DX, OFFSET MENU
28 | INT 21H
29 | RET
30 | OUTMENU ENDP
31 |
32 | EXIT PROC NEAR
33 | MOV AX, 4C00H
34 | INT 21H
35 | EXIT ENDP
36 |
37 | MAIN:
38 | MOV AX, DATASEG
39 | MOV DS, AX
40 |
41 | MAINLOOP:
42 | CALL OUTMENU
43 | CALL INCMD
44 | CALL CRLF
45 | CALL ACTIONS[SI]
46 | JMP MAINLOOP
47 |
48 | CODESEG ENDS
49 | END MAIN
50 |
--------------------------------------------------------------------------------
/lab_05/src/OUTPUT.ASM:
--------------------------------------------------------------------------------
1 | EXTRN TOUHEX : NEAR
2 | EXTRN TOSBIN : NEAR
3 | EXTRN UHEX : BYTE
4 | EXTRN SBIN : BYTE
5 | EXTRN SIGN : BYTE
6 |
7 | PUBLIC CRLF
8 | PUBLIC OUTUHEX
9 | PUBLIC OUTSBIN
10 |
11 | DATASEG SEGMENT PARA PUBLIC 'DATA'
12 | OUTUHEXMSG DB 'Unsigned hexadecimal number: $'
13 | OUTSBINMSG DB 'Signed binary number: $'
14 | DATASEG ENDS
15 |
16 | CODESEG SEGMENT PARA PUBLIC 'CODE'
17 | ASSUME CS:CODESEG
18 |
19 | CRLF PROC NEAR
20 | MOV AH, 2
21 | MOV DL, 13
22 | INT 21H
23 | MOV DL, 10
24 | INT 21H
25 | RET
26 | CRLF ENDP
27 |
28 | OUTUHEX PROC NEAR
29 | MOV AH, 9
30 | MOV DX, OFFSET OUTUHEXMSG
31 | INT 21H
32 |
33 | CALL TOUHEX
34 |
35 | MOV AH, 9
36 | MOV DX, OFFSET UHEX
37 | INT 21H
38 |
39 | CALL CRLF
40 | CALL CRLF
41 |
42 | RET
43 | OUTUHEX ENDP
44 |
45 | OUTSBIN PROC NEAR
46 | MOV AH, 9
47 | MOV DX, OFFSET OUTSBINMSG
48 | INT 21H
49 |
50 | CALL TOSBIN
51 |
52 | MOV AH, 2
53 | MOV DL, SIGN
54 | INT 21H
55 |
56 | MOV AH, 9
57 | MOV DX, OFFSET SBIN
58 | INT 21H
59 |
60 | CALL CRLF
61 | CALL CRLF
62 |
63 | RET
64 | OUTSBIN ENDP
65 |
66 | CODESEG ENDS
67 | END
--------------------------------------------------------------------------------
/lab_06/docs/statement.pdf:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/hackfeed/mdpl-4th-sem-labs/461f1a32a7e00feb655c882987abe22cb4f1168c/lab_06/docs/statement.pdf
--------------------------------------------------------------------------------
/lab_06/src/COMPILE.BAT:
--------------------------------------------------------------------------------
1 | ML MAIN.ASM
2 | DEL MAIN.OBJ
--------------------------------------------------------------------------------
/lab_06/src/MAIN.ASM:
--------------------------------------------------------------------------------
1 | .MODEL TINY
2 |
3 | CODE SEGMENT
4 | ASSUME CS:CODE, DS:CODE
5 | ORG 100H
6 |
7 | MAIN:
8 | JMP INSTALL
9 | OLD9H DD ?
10 | ISINSTALLED DW 1
11 | SUBST DB 100 DUP(?)
12 | SUBSTMSG DB 'Enter substitution assigned to F1 key: $'
13 | SUBSTLEN DW 0
14 |
15 | INSUBST PROC
16 | MOV AH, 9
17 | MOV DX, OFFSET SUBSTMSG
18 | INT 21H
19 |
20 | MOV SI, 0
21 | INSYMB:
22 | MOV AH, 1
23 | INT 21H
24 | CMP AL, 13
25 | JE ENDINP
26 | MOV SUBST[SI], AL
27 | INC SI
28 | JMP INSYMB
29 | ENDINP:
30 | DEC SI
31 | MOV SUBSTLEN, SI
32 | RET
33 | INSUBST ENDP
34 |
35 | MY9H PROC
36 | PUSH AX
37 | PUSH BX
38 | PUSH CX
39 | PUSH DX
40 |
41 | PUSH ES
42 | PUSH DS
43 |
44 | PUSHF
45 |
46 | CALL CS:OLD9H
47 |
48 | IN AL, 60H
49 | CMP AL, 3BH
50 | JNE QUIT
51 |
52 | MOV DI, 0
53 | MOV SI, CS:SUBSTLEN
54 | OUTSUBST:
55 | CMP SI, -1
56 | JE QUIT
57 | MOV AH, 5
58 | MOV CH, 0
59 | MOV CL, CS:SUBST[DI]
60 | INC DI
61 | DEC SI
62 | INT 16H
63 | CMP AL, 0
64 | JNE QUIT
65 | JMP OUTSUBST
66 |
67 | QUIT:
68 | POP DS
69 | POP ES
70 |
71 | POP DX
72 | POP CX
73 | POP BX
74 | POP AX
75 |
76 | IRET
77 | MY9H ENDP
78 |
79 | INSTALL:
80 | MOV AX, 3509H
81 | INT 21H
82 |
83 | CMP ES:ISINSTALLED, 1
84 | JE UNINSTALL
85 |
86 | CALL INSUBST
87 |
88 | MOV WORD PTR OLD9H, BX
89 | MOV WORD PTR OLD9H + 2, ES
90 |
91 | MOV AX, 2509H
92 | MOV DX, OFFSET MY9H
93 | INT 21H
94 |
95 | MOV DX, OFFSET INSTMSG
96 | MOV AH, 9
97 | INT 21H
98 |
99 | MOV DX, OFFSET INSTALL
100 | INT 27H
101 |
102 | UNINSTALL:
103 | PUSH ES
104 | PUSH DS
105 |
106 | MOV DX, WORD PTR ES:OLD9H
107 | MOV DS, WORD PTR ES:OLD9H + 2
108 | MOV AX, 2509H
109 | INT 21H
110 |
111 | POP DS
112 | POP ES
113 |
114 | MOV AH, 49H
115 | INT 21H
116 |
117 | MOV DX, OFFSET UNINSTMSG
118 | MOV AH, 9H
119 | INT 21H
120 |
121 | MOV AX, 4C00H
122 | INT 21H
123 |
124 | INSTMSG DB 'SUBSTITUTION ASSIGNED!$'
125 | UNINSTMSG DB 'SUBSTITUTION UNASSIGNED!$'
126 | CODE ENDS
127 | END MAIN
--------------------------------------------------------------------------------
/lab_07/docs/statement.pdf:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/hackfeed/mdpl-4th-sem-labs/461f1a32a7e00feb655c882987abe22cb4f1168c/lab_07/docs/statement.pdf
--------------------------------------------------------------------------------
/lab_07/src/Makefile:
--------------------------------------------------------------------------------
1 | app.exe:
2 | nasm -f elf64 strcopy.asm
3 | gcc -c main.c
4 | gcc -o $@ main.o strcopy.o
5 |
6 | run:
7 | ./app.exe
8 |
9 | clean:
10 | rm -f *.o *.exe
--------------------------------------------------------------------------------
/lab_07/src/main.c:
--------------------------------------------------------------------------------
1 | #include
2 | #include
3 |
4 | #define BUFFER 100
5 |
6 | int asmstrlen(const char *str)
7 | {
8 | int len = 0;
9 | const char *str_copy = str;
10 |
11 | __asm__(
12 | "mov $0xffffffff, %%ecx\n\t"
13 | "mov $0, %%al\n\t"
14 | "mov %1, %%rdi\n\t"
15 | "repne scasb\n\t"
16 | "mov $0xffffffff, %%eax\n\t"
17 | "dec %%eax\n\t"
18 | "sub %%ecx, %%eax\n\t"
19 | "mov %%eax, %0"
20 | : "=r"(len)
21 | : "r"(str_copy)
22 | : "%eax", "%ecx", "%rdi", "%al");
23 |
24 | return len;
25 | }
26 |
27 | void strcopy(char *dest, char *src, int len);
28 |
29 | void test_asmstrlen()
30 | {
31 | const char *test_str = "This is test string!";
32 |
33 | printf("asmstrlen result: %d\nstrlen result: %d\n", asmstrlen(test_str), strlen(test_str));
34 | }
35 |
36 | void test_asmstrcopy()
37 | {
38 | char src[] = "abcdefghijklmnopqrstuvwxyz";
39 | char dest[BUFFER] = "1234567890";
40 | int len;
41 |
42 | printf("\n");
43 | printf("--------------------\n");
44 | printf("Sources for test: src - %s\n, dest - %s\n", src, dest);
45 | len = 2;
46 | strcopy(dest, src, len);
47 | printf("Different Source and Destination. Result: %s\nSymbols copied: %d\n", dest, len);
48 | printf("--------------------\n");
49 |
50 | printf("\n");
51 | printf("--------------------\n");
52 | printf("Source for test: %s\n", src);
53 | len = 8;
54 | strcopy(src + 4, src, len);
55 | printf("Destination is Source + 4. Result: %s\nSymbols copied: %d\n", src, len);
56 | printf("--------------------\n");
57 | printf("Source for test: %s\n", src);
58 | len = 8;
59 | strcopy(src, src + 4, len);
60 | printf("Source is Destination + 4. Result: %s\nSymbols copied: %d\n", src, len);
61 | }
62 |
63 | int main()
64 | {
65 | printf("--------------------\n");
66 | test_asmstrlen();
67 | printf("--------------------\n");
68 | test_asmstrcopy();
69 | printf("--------------------\n");
70 |
71 | return 0;
72 | }
--------------------------------------------------------------------------------
/lab_07/src/strcopy.asm:
--------------------------------------------------------------------------------
1 | GLOBAL strcopy
2 | SECTION .TEXT
3 |
4 | strcopy:
5 | MOV RCX, RDX
6 | CMP RSI, RDI
7 | JG SGETDIST
8 | JMP DGETDIST
9 | SGETDIST:
10 | MOV RAX, RSI
11 | SUB RAX, RDI
12 | DGETDIST:
13 | MOV RAX, RDI
14 | SUB RAX, RSI
15 | CMP RAX, RCX
16 | JG REPMOVSB
17 | CMP RSI, RDI
18 | JG REPMOVSB
19 | JMP REVERSE
20 | REPMOVSB:
21 | REP MOVSB
22 | JMP ENDCP
23 | REVERSE:
24 | ADD RDI, RCX
25 | ADD RSI, RCX
26 | DEC RSI
27 | DEC RDI
28 | CPY:
29 | MOVSB
30 | SUB RSI, 2
31 | SUB RDI, 2
32 | LOOP CPY
33 | ENDCP:
34 | RET
--------------------------------------------------------------------------------
/lab_08/docs/statement.pdf:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/hackfeed/mdpl-4th-sem-labs/461f1a32a7e00feb655c882987abe22cb4f1168c/lab_08/docs/statement.pdf
--------------------------------------------------------------------------------
/lab_08/src/Makefile:
--------------------------------------------------------------------------------
1 | app.exe:
2 | gcc -o $@ -g main.c
3 |
4 | run:
5 | ./app.exe
6 |
7 | clean:
8 | rm -f *.o *.exe vgcore*
--------------------------------------------------------------------------------
/lab_08/src/main.c:
--------------------------------------------------------------------------------
1 | #include
2 |
3 | float calc(float a, float b, char sign)
4 | {
5 | float res;
6 |
7 | __asm__(
8 | "flds %2\n\t"
9 | "flds %1\n\t"
10 | "mov %3, %%al\n\t"
11 | "cmp $43, %%al\n\t"
12 | "je addc\n\t"
13 | "cmp $45, %%al\n\t"
14 | "je subc\n\t"
15 | "cmp $42, %%al\n\t"
16 | "je mulc\n\t"
17 | "cmp $47, %%al\n\t"
18 | "je divc\n\t"
19 | "addc:\n\t"
20 | "faddp\n\t"
21 | "jmp endc\n\t"
22 | "subc:\n\t"
23 | "fsubp\n\t"
24 | "jmp endc\n\t"
25 | "mulc:\n\t"
26 | "fmulp\n\t"
27 | "jmp endc\n\t"
28 | "divc:\n\t"
29 | "fdivp\n\t"
30 | "endc:\n\t"
31 | "fstps %0"
32 | : "=m"(res)
33 | : "m"(a), "m"(b), "m"(sign)
34 | : "%al");
35 |
36 | return res;
37 | }
38 |
39 | int main()
40 | {
41 | float a, b;
42 | char sign;
43 |
44 | printf("Input a, b, sign: ");
45 | scanf("%f %f %c", &a, &b, &sign);
46 |
47 | float res = calc(a, b, sign);
48 |
49 | printf("%f %c %f = %f\n", a, sign, b, res);
50 |
51 | return 0;
52 | }
--------------------------------------------------------------------------------
/lab_09/docs/statement.pdf:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/hackfeed/mdpl-4th-sem-labs/461f1a32a7e00feb655c882987abe22cb4f1168c/lab_09/docs/statement.pdf
--------------------------------------------------------------------------------
/lab_09/src/Makefile:
--------------------------------------------------------------------------------
1 | app.exe:
2 | gcc -o $@ main.c
3 |
4 | run:
5 | ./app.exe
6 |
7 | disnasm:
8 | objdump -d app.exe > app_disnasm.txt
9 |
10 | disintel:
11 | objdump -Mintel -d app.exe > app_disintel.txt
12 |
13 | brut:
14 | python brut.py
15 |
16 | clean:
17 | rm -f *.o *.exe *.txt
--------------------------------------------------------------------------------
/lab_09/src/app_disintel.txt:
--------------------------------------------------------------------------------
1 |
2 | app.exe: file format elf64-x86-64
3 |
4 |
5 | Disassembly of section .init:
6 |
7 | 0000000000001000 <_init>:
8 | 1000: f3 0f 1e fa endbr64
9 | 1004: 48 83 ec 08 sub rsp,0x8
10 | 1008: 48 8b 05 d9 2f 00 00 mov rax,QWORD PTR [rip+0x2fd9] # 3fe8 <__gmon_start__>
11 | 100f: 48 85 c0 test rax,rax
12 | 1012: 74 02 je 1016 <_init+0x16>
13 | 1014: ff d0 call rax
14 | 1016: 48 83 c4 08 add rsp,0x8
15 | 101a: c3 ret
16 |
17 | Disassembly of section .plt:
18 |
19 | 0000000000001020 <.plt>:
20 | 1020: ff 35 e2 2f 00 00 push QWORD PTR [rip+0x2fe2] # 4008 <_GLOBAL_OFFSET_TABLE_+0x8>
21 | 1026: ff 25 e4 2f 00 00 jmp QWORD PTR [rip+0x2fe4] # 4010 <_GLOBAL_OFFSET_TABLE_+0x10>
22 | 102c: 0f 1f 40 00 nop DWORD PTR [rax+0x0]
23 |
24 | 0000000000001030 <__stack_chk_fail@plt>:
25 | 1030: ff 25 e2 2f 00 00 jmp QWORD PTR [rip+0x2fe2] # 4018 <__stack_chk_fail@GLIBC_2.4>
26 | 1036: 68 00 00 00 00 push 0x0
27 | 103b: e9 e0 ff ff ff jmp 1020 <.plt>
28 |
29 | 0000000000001040 :
30 | 1040: ff 25 da 2f 00 00 jmp QWORD PTR [rip+0x2fda] # 4020
31 | 1046: 68 01 00 00 00 push 0x1
32 | 104b: e9 d0 ff ff ff jmp 1020 <.plt>
33 |
34 | 0000000000001050 <__isoc99_scanf@plt>:
35 | 1050: ff 25 d2 2f 00 00 jmp QWORD PTR [rip+0x2fd2] # 4028 <__isoc99_scanf@GLIBC_2.7>
36 | 1056: 68 02 00 00 00 push 0x2
37 | 105b: e9 c0 ff ff ff jmp 1020 <.plt>
38 |
39 | Disassembly of section .text:
40 |
41 | 0000000000001060 <_start>:
42 | 1060: f3 0f 1e fa endbr64
43 | 1064: 31 ed xor ebp,ebp
44 | 1066: 49 89 d1 mov r9,rdx
45 | 1069: 5e pop rsi
46 | 106a: 48 89 e2 mov rdx,rsp
47 | 106d: 48 83 e4 f0 and rsp,0xfffffffffffffff0
48 | 1071: 50 push rax
49 | 1072: 54 push rsp
50 | 1073: 4c 8d 05 96 02 00 00 lea r8,[rip+0x296] # 1310 <__libc_csu_fini>
51 | 107a: 48 8d 0d 1f 02 00 00 lea rcx,[rip+0x21f] # 12a0 <__libc_csu_init>
52 | 1081: 48 8d 3d 46 01 00 00 lea rdi,[rip+0x146] # 11ce
53 | 1088: ff 15 52 2f 00 00 call QWORD PTR [rip+0x2f52] # 3fe0 <__libc_start_main@GLIBC_2.2.5>
54 | 108e: f4 hlt
55 | 108f: 90 nop
56 |
57 | 0000000000001090 :
58 | 1090: 48 8d 3d a9 2f 00 00 lea rdi,[rip+0x2fa9] # 4040 <__TMC_END__>
59 | 1097: 48 8d 05 a2 2f 00 00 lea rax,[rip+0x2fa2] # 4040 <__TMC_END__>
60 | 109e: 48 39 f8 cmp rax,rdi
61 | 10a1: 74 15 je 10b8
62 | 10a3: 48 8b 05 2e 2f 00 00 mov rax,QWORD PTR [rip+0x2f2e] # 3fd8 <_ITM_deregisterTMCloneTable>
63 | 10aa: 48 85 c0 test rax,rax
64 | 10ad: 74 09 je 10b8
65 | 10af: ff e0 jmp rax
66 | 10b1: 0f 1f 80 00 00 00 00 nop DWORD PTR [rax+0x0]
67 | 10b8: c3 ret
68 | 10b9: 0f 1f 80 00 00 00 00 nop DWORD PTR [rax+0x0]
69 |
70 | 00000000000010c0 :
71 | 10c0: 48 8d 3d 79 2f 00 00 lea rdi,[rip+0x2f79] # 4040 <__TMC_END__>
72 | 10c7: 48 8d 35 72 2f 00 00 lea rsi,[rip+0x2f72] # 4040 <__TMC_END__>
73 | 10ce: 48 29 fe sub rsi,rdi
74 | 10d1: 48 89 f0 mov rax,rsi
75 | 10d4: 48 c1 ee 3f shr rsi,0x3f
76 | 10d8: 48 c1 f8 03 sar rax,0x3
77 | 10dc: 48 01 c6 add rsi,rax
78 | 10df: 48 d1 fe sar rsi,1
79 | 10e2: 74 14 je 10f8
80 | 10e4: 48 8b 05 05 2f 00 00 mov rax,QWORD PTR [rip+0x2f05] # 3ff0 <_ITM_registerTMCloneTable>
81 | 10eb: 48 85 c0 test rax,rax
82 | 10ee: 74 08 je 10f8
83 | 10f0: ff e0 jmp rax
84 | 10f2: 66 0f 1f 44 00 00 nop WORD PTR [rax+rax*1+0x0]
85 | 10f8: c3 ret
86 | 10f9: 0f 1f 80 00 00 00 00 nop DWORD PTR [rax+0x0]
87 |
88 | 0000000000001100 <__do_global_dtors_aux>:
89 | 1100: f3 0f 1e fa endbr64
90 | 1104: 80 3d 35 2f 00 00 00 cmp BYTE PTR [rip+0x2f35],0x0 # 4040 <__TMC_END__>
91 | 110b: 75 33 jne 1140 <__do_global_dtors_aux+0x40>
92 | 110d: 55 push rbp
93 | 110e: 48 83 3d e2 2e 00 00 cmp QWORD PTR [rip+0x2ee2],0x0 # 3ff8 <__cxa_finalize@GLIBC_2.2.5>
94 | 1115: 00
95 | 1116: 48 89 e5 mov rbp,rsp
96 | 1119: 74 0d je 1128 <__do_global_dtors_aux+0x28>
97 | 111b: 48 8b 3d 16 2f 00 00 mov rdi,QWORD PTR [rip+0x2f16] # 4038 <__dso_handle>
98 | 1122: ff 15 d0 2e 00 00 call QWORD PTR [rip+0x2ed0] # 3ff8 <__cxa_finalize@GLIBC_2.2.5>
99 | 1128: e8 63 ff ff ff call 1090
100 | 112d: c6 05 0c 2f 00 00 01 mov BYTE PTR [rip+0x2f0c],0x1 # 4040 <__TMC_END__>
101 | 1134: 5d pop rbp
102 | 1135: c3 ret
103 | 1136: 66 2e 0f 1f 84 00 00 nop WORD PTR cs:[rax+rax*1+0x0]
104 | 113d: 00 00 00
105 | 1140: c3 ret
106 | 1141: 66 66 2e 0f 1f 84 00 data16 nop WORD PTR cs:[rax+rax*1+0x0]
107 | 1148: 00 00 00 00
108 | 114c: 0f 1f 40 00 nop DWORD PTR [rax+0x0]
109 |
110 | 0000000000001150 :
111 | 1150: f3 0f 1e fa endbr64
112 | 1154: e9 67 ff ff ff jmp 10c0
113 |
114 | 0000000000001159 :
115 | 1159: 55 push rbp
116 | 115a: 48 89 e5 mov rbp,rsp
117 | 115d: 89 7d ec mov DWORD PTR [rbp-0x14],edi
118 | 1160: 89 75 e8 mov DWORD PTR [rbp-0x18],esi
119 | 1163: c7 45 f4 00 00 00 00 mov DWORD PTR [rbp-0xc],0x0
120 | 116a: c7 45 f8 00 00 00 00 mov DWORD PTR [rbp-0x8],0x0
121 | 1171: eb 1a jmp 118d
122 | 1173: 8b 45 ec mov eax,DWORD PTR [rbp-0x14]
123 | 1176: 99 cdq
124 | 1177: f7 7d e8 idiv DWORD PTR [rbp-0x18]
125 | 117a: 89 d0 mov eax,edx
126 | 117c: 01 45 f4 add DWORD PTR [rbp-0xc],eax
127 | 117f: 8b 45 ec mov eax,DWORD PTR [rbp-0x14]
128 | 1182: 99 cdq
129 | 1183: f7 7d e8 idiv DWORD PTR [rbp-0x18]
130 | 1186: 89 45 ec mov DWORD PTR [rbp-0x14],eax
131 | 1189: 83 45 f8 01 add DWORD PTR [rbp-0x8],0x1
132 | 118d: 83 7d ec 00 cmp DWORD PTR [rbp-0x14],0x0
133 | 1191: 7f e0 jg 1173
134 | 1193: c7 45 fc 00 00 00 00 mov DWORD PTR [rbp-0x4],0x0
135 | 119a: eb 0d jmp 11a9
136 | 119c: 8b 45 e8 mov eax,DWORD PTR [rbp-0x18]
137 | 119f: 83 e8 01 sub eax,0x1
138 | 11a2: 01 45 f4 add DWORD PTR [rbp-0xc],eax
139 | 11a5: 83 45 fc 01 add DWORD PTR [rbp-0x4],0x1
140 | 11a9: 8b 45 fc mov eax,DWORD PTR [rbp-0x4]
141 | 11ac: 3b 45 f8 cmp eax,DWORD PTR [rbp-0x8]
142 | 11af: 7c eb jl 119c
143 | 11b1: 8b 45 f4 mov eax,DWORD PTR [rbp-0xc]
144 | 11b4: 5d pop rbp
145 | 11b5: c3 ret
146 |
147 | 00000000000011b6 :
148 | 11b6: 55 push rbp
149 | 11b7: 48 89 e5 mov rbp,rsp
150 | 11ba: 89 7d fc mov DWORD PTR [rbp-0x4],edi
151 | 11bd: 89 75 f8 mov DWORD PTR [rbp-0x8],esi
152 | 11c0: 8b 45 fc mov eax,DWORD PTR [rbp-0x4]
153 | 11c3: 3b 45 f8 cmp eax,DWORD PTR [rbp-0x8]
154 | 11c6: 0f 94 c0 sete al
155 | 11c9: 0f b6 c0 movzx eax,al
156 | 11cc: 5d pop rbp
157 | 11cd: c3 ret
158 |
159 | 00000000000011ce :
160 | 11ce: 55 push rbp
161 | 11cf: 48 89 e5 mov rbp,rsp
162 | 11d2: 48 83 ec 20 sub rsp,0x20
163 | 11d6: 64 48 8b 04 25 28 00 mov rax,QWORD PTR fs:0x28
164 | 11dd: 00 00
165 | 11df: 48 89 45 f8 mov QWORD PTR [rbp-0x8],rax
166 | 11e3: 31 c0 xor eax,eax
167 | 11e5: 48 8d 3d 1c 0e 00 00 lea rdi,[rip+0xe1c] # 2008 <_IO_stdin_used+0x8>
168 | 11ec: b8 00 00 00 00 mov eax,0x0
169 | 11f1: e8 4a fe ff ff call 1040
170 | 11f6: 48 8d 45 f0 lea rax,[rbp-0x10]
171 | 11fa: 48 89 c6 mov rsi,rax
172 | 11fd: 48 8d 3d 1d 0e 00 00 lea rdi,[rip+0xe1d] # 2021 <_IO_stdin_used+0x21>
173 | 1204: b8 00 00 00 00 mov eax,0x0
174 | 1209: e8 42 fe ff ff call 1050 <__isoc99_scanf@plt>
175 | 120e: 48 8d 3d 0f 0e 00 00 lea rdi,[rip+0xe0f] # 2024 <_IO_stdin_used+0x24>
176 | 1215: b8 00 00 00 00 mov eax,0x0
177 | 121a: e8 21 fe ff ff call 1040
178 | 121f: 48 8d 45 ec lea rax,[rbp-0x14]
179 | 1223: 48 89 c6 mov rsi,rax
180 | 1226: 48 8d 3d f4 0d 00 00 lea rdi,[rip+0xdf4] # 2021 <_IO_stdin_used+0x21>
181 | 122d: b8 00 00 00 00 mov eax,0x0
182 | 1232: e8 19 fe ff ff call 1050 <__isoc99_scanf@plt>
183 | 1237: 8b 55 f0 mov edx,DWORD PTR [rbp-0x10]
184 | 123a: 8b 45 ec mov eax,DWORD PTR [rbp-0x14]
185 | 123d: 89 d6 mov esi,edx
186 | 123f: 89 c7 mov edi,eax
187 | 1241: e8 13 ff ff ff call 1159
188 | 1246: 89 45 f4 mov DWORD PTR [rbp-0xc],eax
189 | 1249: 8b 45 f4 mov eax,DWORD PTR [rbp-0xc]
190 | 124c: be 58 00 00 00 mov esi,0x58
191 | 1251: 89 c7 mov edi,eax
192 | 1253: e8 5e ff ff ff call 11b6
193 | 1258: 85 c0 test eax,eax
194 | 125a: 75 13 jne 126f
195 | 125c: 48 8d 3d dd 0d 00 00 lea rdi,[rip+0xddd] # 2040 <_IO_stdin_used+0x40>
196 | 1263: b8 00 00 00 00 mov eax,0x0
197 | 1268: e8 d3 fd ff ff call 1040
198 | 126d: eb 11 jmp 1280
199 | 126f: 48 8d 3d e9 0d 00 00 lea rdi,[rip+0xde9] # 205f <_IO_stdin_used+0x5f>
200 | 1276: b8 00 00 00 00 mov eax,0x0
201 | 127b: e8 c0 fd ff ff call 1040
202 | 1280: b8 00 00 00 00 mov eax,0x0
203 | 1285: 48 8b 4d f8 mov rcx,QWORD PTR [rbp-0x8]
204 | 1289: 64 48 2b 0c 25 28 00 sub rcx,QWORD PTR fs:0x28
205 | 1290: 00 00
206 | 1292: 74 05 je 1299
207 | 1294: e8 97 fd ff ff call 1030 <__stack_chk_fail@plt>
208 | 1299: c9 leave
209 | 129a: c3 ret
210 | 129b: 0f 1f 44 00 00 nop DWORD PTR [rax+rax*1+0x0]
211 |
212 | 00000000000012a0 <__libc_csu_init>:
213 | 12a0: f3 0f 1e fa endbr64
214 | 12a4: 41 57 push r15
215 | 12a6: 4c 8d 3d 3b 2b 00 00 lea r15,[rip+0x2b3b] # 3de8 <__frame_dummy_init_array_entry>
216 | 12ad: 41 56 push r14
217 | 12af: 49 89 d6 mov r14,rdx
218 | 12b2: 41 55 push r13
219 | 12b4: 49 89 f5 mov r13,rsi
220 | 12b7: 41 54 push r12
221 | 12b9: 41 89 fc mov r12d,edi
222 | 12bc: 55 push rbp
223 | 12bd: 48 8d 2d 2c 2b 00 00 lea rbp,[rip+0x2b2c] # 3df0 <__do_global_dtors_aux_fini_array_entry>
224 | 12c4: 53 push rbx
225 | 12c5: 4c 29 fd sub rbp,r15
226 | 12c8: 48 83 ec 08 sub rsp,0x8
227 | 12cc: e8 2f fd ff ff call 1000 <_init>
228 | 12d1: 48 c1 fd 03 sar rbp,0x3
229 | 12d5: 74 1f je 12f6 <__libc_csu_init+0x56>
230 | 12d7: 31 db xor ebx,ebx
231 | 12d9: 0f 1f 80 00 00 00 00 nop DWORD PTR [rax+0x0]
232 | 12e0: 4c 89 f2 mov rdx,r14
233 | 12e3: 4c 89 ee mov rsi,r13
234 | 12e6: 44 89 e7 mov edi,r12d
235 | 12e9: 41 ff 14 df call QWORD PTR [r15+rbx*8]
236 | 12ed: 48 83 c3 01 add rbx,0x1
237 | 12f1: 48 39 dd cmp rbp,rbx
238 | 12f4: 75 ea jne 12e0 <__libc_csu_init+0x40>
239 | 12f6: 48 83 c4 08 add rsp,0x8
240 | 12fa: 5b pop rbx
241 | 12fb: 5d pop rbp
242 | 12fc: 41 5c pop r12
243 | 12fe: 41 5d pop r13
244 | 1300: 41 5e pop r14
245 | 1302: 41 5f pop r15
246 | 1304: c3 ret
247 | 1305: 66 66 2e 0f 1f 84 00 data16 nop WORD PTR cs:[rax+rax*1+0x0]
248 | 130c: 00 00 00 00
249 |
250 | 0000000000001310 <__libc_csu_fini>:
251 | 1310: f3 0f 1e fa endbr64
252 | 1314: c3 ret
253 |
254 | Disassembly of section .fini:
255 |
256 | 0000000000001318 <_fini>:
257 | 1318: f3 0f 1e fa endbr64
258 | 131c: 48 83 ec 08 sub rsp,0x8
259 | 1320: 48 83 c4 08 add rsp,0x8
260 | 1324: c3 ret
261 |
--------------------------------------------------------------------------------
/lab_09/src/app_disnasm.txt:
--------------------------------------------------------------------------------
1 |
2 | app.exe: file format elf64-x86-64
3 |
4 |
5 | Disassembly of section .init: # Startup section
6 |
7 | 0000000000001000 <_init>:
8 | 1000: f3 0f 1e fa endbr64
9 | 1004: 48 83 ec 08 sub $0x8,%rsp
10 | 1008: 48 8b 05 d9 2f 00 00 mov 0x2fd9(%rip),%rax # 3fe8 <__gmon_start__>
11 | 100f: 48 85 c0 test %rax,%rax
12 | 1012: 74 02 je 1016 <_init+0x16>
13 | 1014: ff d0 callq *%rax
14 | 1016: 48 83 c4 08 add $0x8,%rsp
15 | 101a: c3 retq
16 |
17 | Disassembly of section .plt: # Procedure Linkage Table
18 |
19 | 0000000000001020 <.plt>:
20 | 1020: ff 35 e2 2f 00 00 pushq 0x2fe2(%rip) # 4008 <_GLOBAL_OFFSET_TABLE_+0x8>
21 | 1026: ff 25 e4 2f 00 00 jmpq *0x2fe4(%rip) # 4010 <_GLOBAL_OFFSET_TABLE_+0x10>
22 | 102c: 0f 1f 40 00 nopl 0x0(%rax)
23 |
24 | 0000000000001030 <__stack_chk_fail@plt>:
25 | 1030: ff 25 e2 2f 00 00 jmpq *0x2fe2(%rip) # 4018 <__stack_chk_fail@GLIBC_2.4>
26 | 1036: 68 00 00 00 00 pushq $0x0
27 | 103b: e9 e0 ff ff ff jmpq 1020 <.plt>
28 |
29 | 0000000000001040 :
30 | 1040: ff 25 da 2f 00 00 jmpq *0x2fda(%rip) # 4020
31 | 1046: 68 01 00 00 00 pushq $0x1
32 | 104b: e9 d0 ff ff ff jmpq 1020 <.plt>
33 |
34 | 0000000000001050 <__isoc99_scanf@plt>:
35 | 1050: ff 25 d2 2f 00 00 jmpq *0x2fd2(%rip) # 4028 <__isoc99_scanf@GLIBC_2.7>
36 | 1056: 68 02 00 00 00 pushq $0x2
37 | 105b: e9 c0 ff ff ff jmpq 1020 <.plt>
38 |
39 | Disassembly of section .text: # Main section
40 |
41 | 0000000000001060 <_start>:
42 | 1060: f3 0f 1e fa endbr64
43 | 1064: 31 ed xor %ebp,%ebp
44 | 1066: 49 89 d1 mov %rdx,%r9
45 | 1069: 5e pop %rsi
46 | 106a: 48 89 e2 mov %rsp,%rdx
47 | 106d: 48 83 e4 f0 and $0xfffffffffffffff0,%rsp
48 | 1071: 50 push %rax
49 | 1072: 54 push %rsp
50 | 1073: 4c 8d 05 96 02 00 00 lea 0x296(%rip),%r8 # 1310 <__libc_csu_fini>
51 | 107a: 48 8d 0d 1f 02 00 00 lea 0x21f(%rip),%rcx # 12a0 <__libc_csu_init>
52 | 1081: 48 8d 3d 46 01 00 00 lea 0x146(%rip),%rdi # 11ce
53 | 1088: ff 15 52 2f 00 00 callq *0x2f52(%rip) # 3fe0 <__libc_start_main@GLIBC_2.2.5>
54 | 108e: f4 hlt
55 | 108f: 90 nop
56 |
57 | 0000000000001090 :
58 | 1090: 48 8d 3d a9 2f 00 00 lea 0x2fa9(%rip),%rdi # 4040 <__TMC_END__>
59 | 1097: 48 8d 05 a2 2f 00 00 lea 0x2fa2(%rip),%rax # 4040 <__TMC_END__>
60 | 109e: 48 39 f8 cmp %rdi,%rax
61 | 10a1: 74 15 je 10b8
62 | 10a3: 48 8b 05 2e 2f 00 00 mov 0x2f2e(%rip),%rax # 3fd8 <_ITM_deregisterTMCloneTable>
63 | 10aa: 48 85 c0 test %rax,%rax
64 | 10ad: 74 09 je 10b8
65 | 10af: ff e0 jmpq *%rax
66 | 10b1: 0f 1f 80 00 00 00 00 nopl 0x0(%rax)
67 | 10b8: c3 retq
68 | 10b9: 0f 1f 80 00 00 00 00 nopl 0x0(%rax)
69 |
70 | 00000000000010c0 :
71 | 10c0: 48 8d 3d 79 2f 00 00 lea 0x2f79(%rip),%rdi # 4040 <__TMC_END__>
72 | 10c7: 48 8d 35 72 2f 00 00 lea 0x2f72(%rip),%rsi # 4040 <__TMC_END__>
73 | 10ce: 48 29 fe sub %rdi,%rsi
74 | 10d1: 48 89 f0 mov %rsi,%rax
75 | 10d4: 48 c1 ee 3f shr $0x3f,%rsi
76 | 10d8: 48 c1 f8 03 sar $0x3,%rax
77 | 10dc: 48 01 c6 add %rax,%rsi
78 | 10df: 48 d1 fe sar %rsi
79 | 10e2: 74 14 je 10f8
80 | 10e4: 48 8b 05 05 2f 00 00 mov 0x2f05(%rip),%rax # 3ff0 <_ITM_registerTMCloneTable>
81 | 10eb: 48 85 c0 test %rax,%rax
82 | 10ee: 74 08 je 10f8
83 | 10f0: ff e0 jmpq *%rax
84 | 10f2: 66 0f 1f 44 00 00 nopw 0x0(%rax,%rax,1)
85 | 10f8: c3 retq
86 | 10f9: 0f 1f 80 00 00 00 00 nopl 0x0(%rax)
87 |
88 | 0000000000001100 <__do_global_dtors_aux>:
89 | 1100: f3 0f 1e fa endbr64
90 | 1104: 80 3d 35 2f 00 00 00 cmpb $0x0,0x2f35(%rip) # 4040 <__TMC_END__>
91 | 110b: 75 33 jne 1140 <__do_global_dtors_aux+0x40>
92 | 110d: 55 push %rbp
93 | 110e: 48 83 3d e2 2e 00 00 cmpq $0x0,0x2ee2(%rip) # 3ff8 <__cxa_finalize@GLIBC_2.2.5>
94 | 1115: 00
95 | 1116: 48 89 e5 mov %rsp,%rbp
96 | 1119: 74 0d je 1128 <__do_global_dtors_aux+0x28>
97 | 111b: 48 8b 3d 16 2f 00 00 mov 0x2f16(%rip),%rdi # 4038 <__dso_handle>
98 | 1122: ff 15 d0 2e 00 00 callq *0x2ed0(%rip) # 3ff8 <__cxa_finalize@GLIBC_2.2.5>
99 | 1128: e8 63 ff ff ff callq 1090
100 | 112d: c6 05 0c 2f 00 00 01 movb $0x1,0x2f0c(%rip) # 4040 <__TMC_END__>
101 | 1134: 5d pop %rbp
102 | 1135: c3 retq
103 | 1136: 66 2e 0f 1f 84 00 00 nopw %cs:0x0(%rax,%rax,1)
104 | 113d: 00 00 00
105 | 1140: c3 retq
106 | 1141: 66 66 2e 0f 1f 84 00 data16 nopw %cs:0x0(%rax,%rax,1)
107 | 1148: 00 00 00 00
108 | 114c: 0f 1f 40 00 nopl 0x0(%rax)
109 |
110 | 0000000000001150 :
111 | 1150: f3 0f 1e fa endbr64
112 | 1154: e9 67 ff ff ff jmpq 10c0
113 |
114 | 0000000000001159 :
115 | 1159: 55 push %rbp # Save register
116 | 115a: 48 89 e5 mov %rsp,%rbp # Use register in the code
117 | 115d: 89 7d ec mov %edi,-0x14(%rbp) # arg1
118 | 1160: 89 75 e8 mov %esi,-0x18(%rbp) # arg2
119 | 1163: c7 45 f4 00 00 00 00 movl $0x0,-0xc(%rbp) # a = 0
120 | 116a: c7 45 f8 00 00 00 00 movl $0x0,-0x8(%rbp) # b = 0
121 | 1171: eb 1a jmp 118d # Jump to *
122 | 1173: 8b 45 ec mov -0x14(%rbp),%eax # eax = arg1
123 | 1176: 99 cltd # Convert double
124 | 1177: f7 7d e8 idivl -0x18(%rbp) # (int) eax /= arg2
125 | 117a: 89 d0 mov %edx,%eax # Mod
126 | 117c: 01 45 f4 add %eax,-0xc(%rbp) # a += mod
127 | 117f: 8b 45 ec mov -0x14(%rbp),%eax # eax = arg1
128 | 1182: 99 cltd # Conver to double
129 | 1183: f7 7d e8 idivl -0x18(%rbp) # arg1 /= arg2
130 | 1186: 89 45 ec mov %eax,-0x14(%rbp) # arg1 = eax
131 | 1189: 83 45 f8 01 addl $0x1,-0x8(%rbp) # b += 1
132 | 118d: 83 7d ec 00 cmpl $0x0,-0x14(%rbp) # * arg1 == 0?
133 | 1191: 7f e0 jg 1173 # if arg1 > 0 jump to 1171
134 | 1193: c7 45 fc 00 00 00 00 movl $0x0,-0x4(%rbp) # c = 0
135 | 119a: eb 0d jmp 11a9 # Jump to **
136 | 119c: 8b 45 e8 mov -0x18(%rbp),%eax # eax = arg2
137 | 119f: 83 e8 01 sub $0x1,%eax # eax -= 1
138 | 11a2: 01 45 f4 add %eax,-0xc(%rbp) # a += eax
139 | 11a5: 83 45 fc 01 addl $0x1,-0x4(%rbp) # c += 1
140 | 11a9: 8b 45 fc mov -0x4(%rbp),%eax # ** eax = c
141 | 11ac: 3b 45 f8 cmp -0x8(%rbp),%eax # b == c?
142 | 11af: 7c eb jl 119c # is b < c jump to 119c
143 | 11b1: 8b 45 f4 mov -0xc(%rbp),%eax # return a
144 | 11b4: 5d pop %rbp # Pop saved registers
145 | 11b5: c3 retq # End of function
146 |
147 | 00000000000011b6 :
148 | 11b6: 55 push %rbp # Save register
149 | 11b7: 48 89 e5 mov %rsp,%rbp # Use register in the code
150 | 11ba: 89 7d fc mov %edi,-0x4(%rbp) # arg1
151 | 11bd: 89 75 f8 mov %esi,-0x8(%rbp) # arg2
152 | 11c0: 8b 45 fc mov -0x4(%rbp),%eax # eax = arg1
153 | 11c3: 3b 45 f8 cmp -0x8(%rbp),%eax # Compare arg1 with arg2
154 | 11c6: 0f 94 c0 sete %al # Set AL to result of cmp (1 or 0)
155 | 11c9: 0f b6 c0 movzbl %al,%eax # eax = al
156 | 11cc: 5d pop %rbp # Pop saved register
157 | 11cd: c3 retq # End of function
158 |
159 | 00000000000011ce :
160 | 11ce: 55 push %rbp
161 | 11cf: 48 89 e5 mov %rsp,%rbp
162 | 11d2: 48 83 ec 20 sub $0x20,%rsp
163 | 11d6: 64 48 8b 04 25 28 00 mov %fs:0x28,%rax
164 | 11dd: 00 00
165 | 11df: 48 89 45 f8 mov %rax,-0x8(%rbp)
166 | 11e3: 31 c0 xor %eax,%eax
167 | 11e5: 48 8d 3d 1c 0e 00 00 lea 0xe1c(%rip),%rdi # 2008 <_IO_stdin_used+0x8>
168 | 11ec: b8 00 00 00 00 mov $0x0,%eax
169 | 11f1: e8 4a fe ff ff callq 1040
170 | 11f6: 48 8d 45 f0 lea -0x10(%rbp),%rax # arg2
171 | 11fa: 48 89 c6 mov %rax,%rsi # arg2 address
172 | 11fd: 48 8d 3d 1d 0e 00 00 lea 0xe1d(%rip),%rdi # 2021 <_IO_stdin_used+0x21>
173 | 1204: b8 00 00 00 00 mov $0x0,%eax
174 | 1209: e8 42 fe ff ff callq 1050 <__isoc99_scanf@plt>
175 | 120e: 48 8d 3d 0f 0e 00 00 lea 0xe0f(%rip),%rdi # 2024 <_IO_stdin_used+0x24>
176 | 1215: b8 00 00 00 00 mov $0x0,%eax
177 | 121a: e8 21 fe ff ff callq 1040
178 | 121f: 48 8d 45 ec lea -0x14(%rbp),%rax # arg1
179 | 1223: 48 89 c6 mov %rax,%rsi # arg1 address
180 | 1226: 48 8d 3d f4 0d 00 00 lea 0xdf4(%rip),%rdi # 2021 <_IO_stdin_used+0x21>
181 | 122d: b8 00 00 00 00 mov $0x0,%eax
182 | 1232: e8 19 fe ff ff callq 1050 <__isoc99_scanf@plt>
183 | 1237: 8b 55 f0 mov -0x10(%rbp),%edx # arg2
184 | 123a: 8b 45 ec mov -0x14(%rbp),%eax # arg1
185 | 123d: 89 d6 mov %edx,%esi
186 | 123f: 89 c7 mov %eax,%edi
187 | 1241: e8 13 ff ff ff callq 1159
188 | 1246: 89 45 f4 mov %eax,-0xc(%rbp) # tmp = res of getcyph
189 | 1249: 8b 45 f4 mov -0xc(%rbp),%eax # eax = tmp
190 | 124c: be 58 00 00 00 mov $0x58,%esi # arg2 = 88
191 | 1251: 89 c7 mov %eax,%edi # arg1 = tmp
192 | 1253: e8 5e ff ff ff callq 11b6
193 | 1258: 85 c0 test %eax,%eax
194 | 125a: 75 13 jne 126f
195 | 125c: 48 8d 3d dd 0d 00 00 lea 0xddd(%rip),%rdi # 2040 <_IO_stdin_used+0x40>
196 | 1263: b8 00 00 00 00 mov $0x0,%eax
197 | 1268: e8 d3 fd ff ff callq 1040
198 | 126d: eb 11 jmp 1280
199 | 126f: 48 8d 3d e9 0d 00 00 lea 0xde9(%rip),%rdi # 205f <_IO_stdin_used+0x5f>
200 | 1276: b8 00 00 00 00 mov $0x0,%eax
201 | 127b: e8 c0 fd ff ff callq 1040
202 | 1280: b8 00 00 00 00 mov $0x0,%eax
203 | 1285: 48 8b 4d f8 mov -0x8(%rbp),%rcx
204 | 1289: 64 48 2b 0c 25 28 00 sub %fs:0x28,%rcx
205 | 1290: 00 00
206 | 1292: 74 05 je 1299
207 | 1294: e8 97 fd ff ff callq 1030 <__stack_chk_fail@plt>
208 | 1299: c9 leaveq
209 | 129a: c3 retq
210 | 129b: 0f 1f 44 00 00 nopl 0x0(%rax,%rax,1)
211 |
212 | 00000000000012a0 <__libc_csu_init>:
213 | 12a0: f3 0f 1e fa endbr64
214 | 12a4: 41 57 push %r15
215 | 12a6: 4c 8d 3d 3b 2b 00 00 lea 0x2b3b(%rip),%r15 # 3de8 <__frame_dummy_init_array_entry>
216 | 12ad: 41 56 push %r14
217 | 12af: 49 89 d6 mov %rdx,%r14
218 | 12b2: 41 55 push %r13
219 | 12b4: 49 89 f5 mov %rsi,%r13
220 | 12b7: 41 54 push %r12
221 | 12b9: 41 89 fc mov %edi,%r12d
222 | 12bc: 55 push %rbp
223 | 12bd: 48 8d 2d 2c 2b 00 00 lea 0x2b2c(%rip),%rbp # 3df0 <__do_global_dtors_aux_fini_array_entry>
224 | 12c4: 53 push %rbx
225 | 12c5: 4c 29 fd sub %r15,%rbp
226 | 12c8: 48 83 ec 08 sub $0x8,%rsp
227 | 12cc: e8 2f fd ff ff callq 1000 <_init>
228 | 12d1: 48 c1 fd 03 sar $0x3,%rbp
229 | 12d5: 74 1f je 12f6 <__libc_csu_init+0x56>
230 | 12d7: 31 db xor %ebx,%ebx
231 | 12d9: 0f 1f 80 00 00 00 00 nopl 0x0(%rax)
232 | 12e0: 4c 89 f2 mov %r14,%rdx
233 | 12e3: 4c 89 ee mov %r13,%rsi
234 | 12e6: 44 89 e7 mov %r12d,%edi
235 | 12e9: 41 ff 14 df callq *(%r15,%rbx,8)
236 | 12ed: 48 83 c3 01 add $0x1,%rbx
237 | 12f1: 48 39 dd cmp %rbx,%rbp
238 | 12f4: 75 ea jne 12e0 <__libc_csu_init+0x40>
239 | 12f6: 48 83 c4 08 add $0x8,%rsp
240 | 12fa: 5b pop %rbx
241 | 12fb: 5d pop %rbp
242 | 12fc: 41 5c pop %r12
243 | 12fe: 41 5d pop %r13
244 | 1300: 41 5e pop %r14
245 | 1302: 41 5f pop %r15
246 | 1304: c3 retq
247 | 1305: 66 66 2e 0f 1f 84 00 data16 nopw %cs:0x0(%rax,%rax,1)
248 | 130c: 00 00 00 00
249 |
250 | 0000000000001310 <__libc_csu_fini>:
251 | 1310: f3 0f 1e fa endbr64
252 | 1314: c3 retq
253 |
254 | Disassembly of section .fini:
255 |
256 | 0000000000001318 <_fini>:
257 | 1318: f3 0f 1e fa endbr64
258 | 131c: 48 83 ec 08 sub $0x8,%rsp
259 | 1320: 48 83 c4 08 add $0x8,%rsp
260 | 1324: c3 retq
261 |
--------------------------------------------------------------------------------
/lab_09/src/brut.py:
--------------------------------------------------------------------------------
1 | INT_MAX = 2147483647
2 |
3 |
4 | def brut(cs, cypher):
5 | for i in range(cs - 1, INT_MAX):
6 | sm = 0
7 | digits = 0
8 |
9 | while i > 0:
10 | sm += i % cs
11 | i /= cs
12 | digits += 1
13 |
14 | for _ in range(digits):
15 | sm += cs - 1
16 |
17 | if sm == cypher:
18 | return i
19 |
20 | return -1
21 |
22 |
23 | if __name__ == "__main__":
24 | cs = int(input("Enter the count system: "))
25 | cypher = int(input("Enter the cypher: "))
26 | print(brut(cs, cypher))
27 |
--------------------------------------------------------------------------------
/lab_09/src/main.c:
--------------------------------------------------------------------------------
1 | #include
2 |
3 | #define CYPHER 88
4 |
5 | int getcyph(int num, int cs)
6 | {
7 | int sum = 0, digits = 0;
8 |
9 | while (num > 0)
10 | {
11 | sum += num % cs;
12 | num /= cs;
13 | digits++;
14 | }
15 |
16 | for (int i = 0; i < digits; ++i)
17 | {
18 | sum += cs - 1;
19 | }
20 |
21 | return sum;
22 | }
23 |
24 | int cmpnum(int first, int second)
25 | {
26 | return first == second;
27 | }
28 |
29 | int main()
30 | {
31 | int num, cs, cypher;
32 |
33 | printf("Enter the count system: ");
34 | scanf("%d", &cs);
35 | printf("Enter the passcode: ");
36 | scanf("%d", &num);
37 |
38 | cypher = getcyph(num, cs);
39 |
40 | if (!cmpnum(cypher, CYPHER))
41 | {
42 | printf("Wrong passcode! Access denied!");
43 | }
44 | else
45 | {
46 | printf("Access given!");
47 | }
48 |
49 | return 0;
50 | }
--------------------------------------------------------------------------------