From b39f224ee730962dd1b4593fdbda1229cd53d294 Mon Sep 17 00:00:00 2001 From: KoroLion Date: Sat, 12 Sep 2020 23:20:34 +0300 Subject: [PATCH] Initial commit --- nasm.asm | 204 ++++++++++++++++++++++++++++++ лаб3_отчёт.docx | Bin 0 -> 9374 bytes лабораторная 3.1.docx | Bin 0 -> 4563 bytes 3 files changed, 204 insertions(+) create mode 100644 nasm.asm create mode 100644 лаб3_отчёт.docx create mode 100644 лабораторная 3.1.docx diff --git a/nasm.asm b/nasm.asm new file mode 100644 index 0000000..31b725c --- /dev/null +++ b/nasm.asm @@ -0,0 +1,204 @@ +; demo data for (2c – d/3) / (b – a/4): + +; 1. a = 12, b = 7, c = 7, d = 18 +; (2 * 7 - 18 / 3) / (7 - 12 / 4) = (14 - 6) / (7 - 3) = 8 / 4 = 2 + +; 2. a = 180, b = 50, c = 100, d = 30 +; (2 * 100 - 30 / 3) / (50 - 180 / 4) = (200 - 10) / (50 - 45) = 190 / 5 = 38 + +; 3. a = 10, b = 6, c = 2, d = 11 +; (2 * 2 - 11 / 3) / (6 - 10 / 4) = (4 - 3) / (6 - 2) = 1 / 4 = 0 + +section .data + GREETING: db '(2c – d / 3) / (b – a / 4)', 10 + GREETING_LEN: equ $-GREETING + LIM: db 'Limitations: 6c >= d, 4b >= a, b - a / 4 != 0, division is integer, all variables are integers', 10 + LIM_LEN: equ $-LIM + ENTER_A: db 'Enter a (0 <= a <= 255): ' + ENTER_B: db 'Enter b (0 <= b <= 255): ' + ENTER_C: db 'Enter c (0 <= c <= 255): ' + ENTER_D: db 'Enter d (0 <= d <= 255): ' + RES_STR: db '(2c – d/3) / (b – a/4) = ' + RES_STR_LEN: equ $-RES_STR + NEWLINE: db 10 +section .bss + num_buf: resb 4 + a: resb 1 + b: resb 1 + c: resb 1 + d: resb 1 + res: resb 1 + t1: resb 1 + t2: resb 1 +section .text + global _start + +%macro print 2 + mov ecx, %1 + mov edx, %2 + mov eax, 4 + mov ebx, 1 + int 80h +%endmacro + +%macro print_int 1 +; prints integer without leading 0 +; arg is a memory address of an 3 char max int as a string + mov eax, 3 + cmp byte [%1], 48 + jne %%done + dec eax + cmp byte [%1 + 1], 48 + jne %%done + dec eax + +%%done: + mov ebx, 3 + sub ebx, eax + mov edx, %1 + add edx, ebx + + mov ecx, edx + mov edx, eax + mov eax, 4 + mov ebx, 1 + int 80h +%endmacro + +%macro inttostr 2 +; CONVERTING NUMBER TO STRING + xor eax, eax + mov al, [%1] + mov cx, 10 ; divider + + mov dx, 0 + div cx ; divides edx:eax by arg stores result in eax and remainder in edx + add dx, 48 + mov [%2 + 2], dl + + mov dx, 0 + div cx + add dx, 48 + mov [%2 + 1], dl + + mov dx, 0 + div cx + add dx, 48 + mov [%2], dl +%endmacro + +%macro readln_int 1 + mov eax, 3 + mov ebx, 2 + mov ecx, num_buf + mov edx, 4 + int 80h + + mov byte [num_buf + 3], 10 ; manually set end of line (user can try to input 1234) + + mov ebx, 0 + mov edx, num_buf +%%int_len: + xor eax, eax ; ~ mov eax, 0 + mov al, byte [edx] + push eax + inc edx + inc ebx + cmp al, 10 + jne %%int_len + + pop eax ; removing \n from the stack + dec ebx ; \n is not the digit +; now ebx contains amount of digits in number and stack contains all the digits as chars + + xor ecx, ecx + cmp ebx, 0 ; if 0 digits => done + je %%done + + pop ecx + sub ecx, 48 ; converting from char to int, that it represent + cmp ebx, 1 ; if 1 digit + je %%done + + pop eax + sub eax, 48 + mov edx, 10 + mul dl ; mul multiplies eax by arg and stores res in eax + add ecx, eax + cmp ebx, 2 ; if 2 digits + je %%done + + pop eax + sub eax, 48 + mov edx, 100 + mul dl + add ecx, eax +%%done: +; now ecx contains the number + + mov [%1], cl ; storing first byte of it to the memory +%endmacro + +_start: + print GREETING, GREETING_LEN + print LIM, LIM_LEN + + print ENTER_A, 25 + readln_int a + + print ENTER_B, 25 + readln_int b + + print ENTER_C, 25 + readln_int c + + print ENTER_D, 25 + readln_int d + + ; t1 = (2c – d/3) + xor eax, eax + mov al, [c] + mov ecx, 2 + mul cx + mov [t1], al + + xor eax, eax + mov al, [d] + mov ecx, 3 + div cx + mov [t2], al + + xor eax, eax + xor ebx, ebx + mov al, [t1] + mov bl, [t2] + sub eax, ebx + mov [t1], al + + ; t2 = (b – a/4) + xor eax, eax + mov al, [a] + mov ecx, 4 + div cx + xor ebx, ebx + mov bl, [b] + sub ebx, eax + mov [t2], bl + + ; res = (t1 / t2) = (2c – d/3) / (b – a/4) + xor eax, eax + xor ecx, ecx + xor edx, edx + mov al, [t1] + mov cl, [t2] + div cx + mov [res], al + + print RES_STR, RES_STR_LEN + inttostr res, num_buf + print_int num_buf + print NEWLINE, 1 + + mov eax, 1 + mov ebx, 0 + int 80h diff --git a/лаб3_отчёт.docx b/лаб3_отчёт.docx new file mode 100644 index 0000000000000000000000000000000000000000..70aa60e09150b9b951f151bb227743088bd72bb0 GIT binary patch literal 9374 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 NUw+Rhqfov4`Y%lM;kf_+ literal 0 HcmV?d00001 diff --git a/лабораторная 3.1.docx b/лабораторная 3.1.docx new file mode 100644 index 0000000000000000000000000000000000000000..daaea545639654caa7c5c7b3765f37bdabb52b00 GIT binary patch literal 4563 zcmaJ^c|6qn_qGp7_FZHjJEcVS#8}5#7!t<5FWFW0WsqGo!yseHRwmrBG>9P?A$uuW zER7|y6konG-S54*{eHJIubJ2UF=yVN^PKaX_w$$6|FBhT8()JVD2E-Q<)?VTP=RE3;=Cn>=OjD7# z_VBF@zEL0iA<_g6gK72DcxVO4k6`3I!)Ddw1a6GUVXmoXzA`AZldPGGFLPwkznk1^ zM5tC&2&lR*=n6K+sX7TYRb~aeY2Lke`z*3VVSK`~AJRtgWFK^(bRmM{u}Hj_>vfb} zL(@fBc9U@E$c^&w>VR*aig_o)?A`wpS$gp#e#1ghZ&<57{EN*+>*kg`UAxbvMEnKR&)GE4&p$}c(cfP- z%*Pv%HRRhZ&lJBNo!Y-(07qt;f8g5IQxjybF8!Kl7pZS2+U&wh<@dG%g9x`2>4v~ovf=KW0p|JQxi@RIx{X&6)&U^CoQyheX0)vQ1_&zV=<}% z@s>l(d7$(iv=TEkh`8;JWMK5=)p?|7yLC9BOGjn!adx+ItQivJOP0+W5T1IJASumwFzd#of%IW5VCOz^@?OW_w>nU6A_ceaj=)k14~C3b+L9+6!7lacOZVtqLzMKSvWTgF6d zVfvjo6LUMdx{#P&UREl!j&EgeTY}%;mLXz<9j+0l-sGrvQd@OPp&Sjv0oYG!;rT*H9y<+ zaC_+4L4$^7*}ad8oW+RB1bsYUo+Fe5$2U27Y%j4`*5ATG8rUCj1i1tUd-%Eqk$||8 zVR))r{-n+>TxgS@#d@O})b^eNORnvOGx z-51!zS|G@|X7<3u0xh*TaUmfKSyv$N35pVPUd}?VTm#^9{Cibn^be$~sf6KUsNVFmweCh%ZC2 zvn<3%AU~2r+{UaQPi9SueBEs|krM1LMa~fr(}mME^%@9vHJS^>lFB9Q=4U({cvUPn zqjv+3fYf?Oo?7wR56m|8*FpzNy;ZMpcpzH&B&YkP@(dpNj*t&WCFM5u0RRfoJz5Ov zuk1H?3Ue?`o@Q)}&tn9`^XVr0_fQHvB^`(Upa3>HcR>_=>-p1zqp-MHvYb2c^3{HEPjo*$o-> z3h-*E)G2H(QiTC}4!{quHQ_P`IUpxd1NArFi^ zteUV=z^uDIpR%vvE|rTrqtVO*{r%G?>rSS09mZ~P?ulL!H?g>3)6Bb91-2%PG?sGb)g*$JOeg6tF{}>lz$(}odij!McRWBmGnvn3Y_|qhup!lB z^q_v`Gx3j%d2R0|gb;%D@4T^L?*A98?ij|AbXqi!g(iZy&in71;ZR>58sB1q>3_J}=1pCP0ruK9H!6a?6 zGa}O-##IR%HMjMRtPeG!VSQQ)hr~KS`N4*@zD&hyIBNQa5Lkur8j;%a?PkZUc zStk*(S}+>52PcT{J4xS4^;@t@%TW`_3quvfsGlkkyLXAEykMaCqKWQu7&*8k6Aq#l z4oIt?yWOF?B#XA?Mhj?&i4T}whf|1}CN>`K71h>pK z!~O*jT##FlsmD#ab8s6Onas9e4Hs@-lExfGSMjSc>QWCCp2E!R$J(LqyqHlP9pRg( z3x0mDA=gSoj49ww%tzOJc2?o&9*hlt4v)OeS4)$S`)Kv1=1#yN`mAa&vLI>s&k-X3u_9nBD

8hsfQzHH?=Z(fcy0|OTvBz5W zjh95`s*)(F3?h*Sh%)fsHzng=n=&Xk+}q{HUC?XgL!$Cwrvvl1NPVs3($qWFD9<;h zN@jcH*A_=@FE%d*0Y6R-hp+;Tnf!A0vZsbW;)m6S$JLbE9zp|Q`SDk|XW#NZredE= zFomVrJEQ|}(t>~*vTAl$@APMQlc(@n-47Ei5?{Wh>OM@9L7XdB6zzO=!X35LK`i<{p7)@cGK@~1TjY&BFZMZwEEt@Y;i`LWK@AIEl+0;~p_ zHG3T{KcI-TxF6HthE4e+v%5~1JKr)&(FW+_C>z~U%y?U5s=)Ed1>wVuo zD*Z`dZmq7SU2>Xzva+qi^@q^JtGO?d@)uK!=>#(`iIa2R_pDS3%RV~Dd$Gy%DfiK% zEASYh{KPHamy!al)P;}Y7<6_Sv5v40Xqdh!jN|h8)?zia!&}PzmE=XR?jZZrE+`Mn z7-}rI<#tmWeM27btK@E~wT#jLN`LN9brr;0`CMRaqVKaGw!1slhDKdMQ6g4z&VW1J z%+zt#kP^p#lu`a>c`!|VNTa@@Sthg!aTp9K$2Odw2WYp7sK}zjJ}3gZ7g|<=K=TN% zFH%nrQLyc%xi@EumaoP(oxfnf^-k!5y512h4v8b`o6*v3rJ1hGj`7tSW>2S$p_5*W zN>{}TTB}5-ZVk4isjew(?g`&gb#L_ok>xN&k7VnX>giXQhS?;+$GK09LG%71>7!gk-yq@mM&?%|jYd)TCzN8F)Oy1G+nTiMuc(%7c6j?_dD1q?gg z@5YvuIJS_>#LJy1#tKNU&b z%UsRhdAkMY*S2y$!Pd9ev5tmEVJv+flPy+^P%97jiI5MaXJTagEy7E#XDvf>3#91P zyX;r#N8@iaNNl&0_eQx&yTdK}Bsez4#$TO1?DIr&zW*ZnQ5W!1kRdD1XcJO3)y^>R zhUM-ghE{xFC_>JFJ>F*408f$O0Ux~%kDCx6lSNMj75Ktkk_jPE!gU(^wp}X`V9lC) z(#5;N*JZw5#*jPlKk^l)7CHB+o6@3Hv&5OD2yqcyk}V(gDQ%lArKzW5x4*C^n=jM3 zo+(=^O-AzpheQ`O9nK@@{k#2z*;?l42McWhP8Mr;#rh+?5d=DkX+z?hgVO0~`Llra zEJjxELV%1V(Dre`4j_Rse9DZmXwUA@LyaJos;?F$;5gpx@LCtwmL>2Jz3*V6{=*4r zr$7B_LDU7;sYyK{r(h%dX~B;Fq5W(6amhtetv}-=&HvK> zp<#c`KfdMvdAtYUfBDB{+OO%y*+#kwe#Ql2Gyi=0zb}SglaG%DiI6{ImEr%Tr>P+| Su_!V!I^s)}*ru2tNB$T6s(tnV literal 0 HcmV?d00001