├── .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 | } --------------------------------------------------------------------------------