From 4f9cd4066a8c325d1b30f1bb46dde8cc8b7e437f Mon Sep 17 00:00:00 2001 From: Tretter Date: Tue, 7 Feb 2017 20:07:52 +0000 Subject: [PATCH] initial checkin from subversion --- file1/compile | 2 + file1/file1 | Bin 0 -> 857 bytes file1/file1.asm | 42 ++++++++++++++ file1/file1.lst | 43 ++++++++++++++ floatArithmetics/compile | 2 + floatArithmetics/fltarith | Bin 0 -> 7102 bytes floatArithmetics/fltarith.asm | 98 ++++++++++++++++++++++++++++++++ hello/compile | 2 + hello/hello | Bin 0 -> 6332 bytes hello/hello.asm | 27 +++++++++ integerarithmetics/compile | 2 + integerarithmetics/intarith | Bin 0 -> 6969 bytes integerarithmetics/intarith.asm | 95 +++++++++++++++++++++++++++++++ printf1/compile | 2 + printf1/printf1 | Bin 0 -> 6422 bytes printf1/printf1.asm | 47 +++++++++++++++ printf2/compile | 2 + printf2/printf2 | Bin 0 -> 6679 bytes printf2/printf2.asm | 67 ++++++++++++++++++++++ 19 files changed, 431 insertions(+) create mode 100644 file1/compile create mode 100644 file1/file1 create mode 100644 file1/file1.asm create mode 100644 file1/file1.lst create mode 100644 floatArithmetics/compile create mode 100644 floatArithmetics/fltarith create mode 100644 floatArithmetics/fltarith.asm create mode 100644 hello/compile create mode 100644 hello/hello create mode 100644 hello/hello.asm create mode 100644 integerarithmetics/compile create mode 100644 integerarithmetics/intarith create mode 100644 integerarithmetics/intarith.asm create mode 100644 printf1/compile create mode 100644 printf1/printf1 create mode 100644 printf1/printf1.asm create mode 100644 printf2/compile create mode 100644 printf2/printf2 create mode 100644 printf2/printf2.asm diff --git a/file1/compile b/file1/compile new file mode 100644 index 0000000..1629825 --- /dev/null +++ b/file1/compile @@ -0,0 +1,2 @@ +nasm -f elf -l file1.lst file1.asm +ld -o file1 file1.o diff --git a/file1/file1 b/file1/file1 new file mode 100644 index 0000000000000000000000000000000000000000..bbf5020c4306a7ce87d99677226bf2da9276027f GIT binary patch literal 857 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 rXqjco#yL*+Q9h<4k9TbUBNtM literal 0 HcmV?d00001 diff --git a/floatArithmetics/fltarith.asm b/floatArithmetics/fltarith.asm new file mode 100644 index 0000000..c613229 --- /dev/null +++ b/floatArithmetics/fltarith.asm @@ -0,0 +1,98 @@ +; fltarith.asm show some simple C code and corresponding nasm code +; the nasm code is one sample, not unique +; +; compile nasm -f elf -l fltarith.lst fltarith.asm +; link gcc -o fltarith fltarith.o +; run fltarith +; +; the output from running fltarith and fltarithc is: +; c=5.0, a=3.000000e+00, b=4.000000e+00, c=5.000000e+00 +; c=a+b, a=3.000000e+00, b=4.000000e+00, c=7.000000e+00 +; c=a-b, a=3.000000e+00, b=4.000000e+00, c=-1.000000e+00 +; c=a*b, a=3.000000e+00, b=4.000000e+00, c=1.200000e+01 +; c=c/a, a=3.000000e+00, b=4.000000e+00, c=4.000000e+00 +; +;The file fltarith.c is: +; #include +; int main() +; { +; double a=3.0, b=4.0, c; +; +; c=5.0; +; printf("%s, a=%e, b=%e, c=%e\n","c=5.0", a, b, c); +; c=a+b; +; printf("%s, a=%e, b=%e, c=%e\n","c=a+b", a, b, c); +; c=a-b; +; printf("%s, a=%e, b=%e, c=%e\n","c=a-b", a, b, c); +; c=a*b; +; printf("%s, a=%e, b=%e, c=%e\n","c=a*b", a, b, c); +; c=c/a; +; printf("%s, a=%e, b=%e, c=%e\n","c=c/a", a, b, c); +; return 0; +; } + + extern printf ; the C function to be called + +%macro pabc 1 ; a "simple" print macro + section .data +.str db %1,0 ; %1 is macro call first actual parameter + section .text + ; push onto stack backwards + push dword [c+4] ; double c (bottom) + push dword [c] ; double c + push dword [b+4] ; double b (bottom) + push dword [b] ; double b + push dword [a+4] ; double a (bottom) + push dword [a] ; double a + push dword .str ; users string + push dword fmt ; address of format string + call printf ; Call C function + add esp,32 ; pop stack 8*4 bytes +%endmacro + + section .data ; preset constants, writeable +a: dq 3.333333333 ; 64-bit variable a initialized to 3.0 +b: dq 4.444444444 ; 64-bit variable b initializes to 4.0 +five: dq 5.0 ; constant 5.0 +fmt: db "%s, a=%e, b=%e, c=%e",10,0 ; format string for printf + + section .bss ; unitialized space +c: resq 1 ; reserve a 64-bit word + + section .text ; instructions, code segment + global main ; for gcc standard linking +main: ; label + +lit5: ; c=5.0; + fld qword [five] ; 5.0 constant + fstp qword [c] ; store into c + pabc "c=5.0" ; invoke the print macro + +addb: ; c=a+b; + fld qword [a] ; load a (pushed on flt pt stack, st0) + fadd qword [b] ; floating add b (to st0) + fstp qword [c] ; store into c (pop flt pt stack) + pabc "c=a+b" ; invoke the print macro + +subb: ; c=a-b; + fld qword [a] ; load a (pushed on flt pt stack, st0) + fsub qword [b] ; floating subtract b (to st0) + fstp qword [c] ; store into c (pop flt pt stack) + pabc "c=a-b" ; invoke the print macro + +mulb: ; c=a*b; + fld qword [a] ; load a (pushed on flt pt stack, st0) + fmul qword [b] ; floating multiply by b (to st0) + fstp qword [c] ; store product into c (pop flt pt stack) + pabc "c=a*b" ; invoke the print macro + +diva: ; c=c/a; + fld qword [c] ; load c (pushed on flt pt stack, st0) + fdiv qword [a] ; floating divide by a (to st0) + fstp qword [c] ; store quotient into c (pop flt pt stack) + pabc "c=c/a" ; invoke the print macro + + mov eax,0 ; exit code, 0=normal + ret ; main returns to operating system + + diff --git a/hello/compile b/hello/compile new file mode 100644 index 0000000..467865f --- /dev/null +++ b/hello/compile @@ -0,0 +1,2 @@ +nasm -f elf -l hello.lst hello.asm +gcc -o hello hello.o diff --git a/hello/hello b/hello/hello new file mode 100644 index 0000000000000000000000000000000000000000..3d9bd3342213d406381d878df2e65c8c30299414 GIT binary patch literal 6332 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 +; int main() +; { +; int a=3, b=4, c; +; +; c=5; +; printf("%s, a=%d, b=%d, c=%d\n","c=5 ", a, b, c); +; c=a+b; +; printf("%s, a=%d, b=%d, c=%d\n","c=a+b", a, b, c); +; c=a-b; +; printf("%s, a=%d, b=%d, c=%d\n","c=a-b", a, b, c); +; c=a*b; +; printf("%s, a=%d, b=%d, c=%d\n","c=a*b", a, b, c); +; c=c/a; +; printf("%s, a=%d, b=%d, c=%d\n","c=c/a", a, b, c); +; return 0; +; } + + extern printf ; the C function to be called + +%macro pabc 1 ; a "simple" print macro + section .data +.str db %1,0 ; %1 is first actual in macro call + section .text + ; push onto stack backwards + push dword [c] ; int c + push dword [b] ; int b + push dword [a] ; int a + push dword .str ; users string + push dword fmt ; address of format string + call printf ; Call C function + add esp,20 ; pop stack 5*4 bytes +%endmacro + + section .data ; preset constants, writeable +a: dd 3 ; 32-bit variable a initialized to 3 +b: dd 4 ; 32-bit variable b initializes to 4 +fmt: db "%s, a=%d, b=%d, c=%d",10,0 ; format string for printf + + section .bss ; unitialized space +c: resd 1 ; reserve a 32-bit word + + section .text ; instructions, code segment + global main ; for gcc standard linking +main: ; label + +lit5: ; c=5; + mov eax,5 ; 5 is a literal constant + mov [c],eax ; store into c + pabc "c=5 " ; invoke the print macro + +addb: ; c=a+b; + mov eax,[a] ; load a + add eax,[b] ; add b + mov [c],eax ; store into c + pabc "c=a+b" ; invoke the print macro + +subb: ; c=a-b; + mov eax,[a] ; load a + sub eax,[b] ; subtract b + mov [c],eax ; store into c + pabc "c=a-b" ; invoke the print macro + +mulb: ; c=a*b; + mov eax,[a] ; load a (must be eax for multiply) + imul dword [b] ; signed integer multiply by b + mov [c],eax ; store bottom half of product into c + pabc "c=a*b" ; invoke the print macro + +diva: ; c=c/a; + mov eax,[c] ; load c + mov edx,0 ; load upper half of dividend with zero + idiv dword [a] ; divide double register edx eax by a + mov [c],eax ; store quotient into c + pabc "c=c/a" ; invoke the print macro + + mov eax,0 ; exit code, 0=normal + ret ; main return to operating system + diff --git a/printf1/compile b/printf1/compile new file mode 100644 index 0000000..0468739 --- /dev/null +++ b/printf1/compile @@ -0,0 +1,2 @@ +nasm -f elf -l printf1.lst printf1.asm +gcc -o printf1 printf1.o diff --git a/printf1/printf1 b/printf1/printf1 new file mode 100644 index 0000000000000000000000000000000000000000..ba72dee7cadeec47f2ec79257cb23da1e51ea6a2 GIT binary patch literal 6422 zcmcIoeQ1@}9X{{u4z%5yd|?L^f6^6vtYK(?JSbH@4Bc=Q-y+ z$(!hyj`o-Q?(aP3_nhyK_nh;5Z~q>{Foc$X2nwQw7ebLv*z=Xj(cT-~dQqeNGVUyVP!kCnp)8mF z0L+WvzX%`o3NV#^mO*U>zZqpyO<=0_J@KI%2fRhf5kpREIu&b8$6L~=OmW;QWUUSr zkD_JW_wG9=)3P2cGXiCsS$`BO>qqPt=1XB3hRKudHD%Rg+^diMX%^ATggh-K0&O06 z9gaGLH+pzGEb%&M`cx>wGHS)=g|O|!STPcq(HT3r<|* z@~MnF3OX4ceJq;Fh`s%NyL#*nOO+fz3s@%uf9ww`r6!fCV(WG(D2Bfiij;wvge`|n z)1vV?T6E6AsSgJyZ-(YcKXh{LUDSR0rGJ-7rPEj4@cjLVo&Pz1P9W{@q04inEk}{E z)D*`r)0CQ+bCSX9*O08##1fM9UB4nROG>hO*JpuAq_qF#nW;Zcez35A=s@zdNib&d z^Td1VHKPIhyI3(^rc(E{5qhF3+7& z{Bx%;ElLb=dk0O7Dhhe#9IBB>)(W1K9F2tj5S=MO*b`vmycP-qTbfR~V$8VwU`|_HApY4f0 z+!WtrI?-`hwnyyk>Dgg6W1HD%c3K_QX0!QVteA0&3bk|;CEA9y|5-4Hl8(90ai2@Y z9kaVoaK>V3CvUb{+qYY7TU$EX+P1Z~x3zyZW#4go8qrMwF@s;VvvSUS35ausW2r^) z)?p|W?>u-6#l5+uc?}3~t_YcD5q8D?NY@lpkwTms!uSb($gRijL1kpXh$LtN<+AKh z`O`$9a(*)cMp;Vw!rNeip)mGb5r~9eWn`p$KTRn7I!q{34ss5ma5sL8`@YHFaFBa@ z8CSbkna2z}o4dB+%N84H9VrxBNAhmU z8oZNqOPL{^z}z&u2h9$vy$c@(V?y=J5m^~F#{54klle3%W7HZ=)vGIl)$6NkjXI+S zdqtp8R8)KwQRsCqh`|b}Ao{pd1gm#cJXF!Q`fHT|tiiGeMIWb;Q7dZ74weNY>myB( z)m*H%#yo)7fcOG^#=oko@GH+#m?4HpWm2v+0+$dkKm%eQes7`O?XU^qjhmc>;Q%Lp zu-a&7ZFuP=J%q2`iIz9jkj+UyB<} z2rH2(TFGc3DXjSM3=%8r=9TA|lP{#QnPtF+FYlzuSAksG6&BkgEY}&w?2_qxtBVBdifOn=haMWu6^DM#v;OmKs3;StP`dC390LV+F8BvSVWo`o@Yov0}oG z=A)T}!(1fH6=TR?38ylnS?!C)VtMD7MmT1p3Mv)4LbO+yoT@McDBDZLH_Wt-ChHiWg1N5S%1)eC@Lcdr#A(ra{{|5(pXKtNboMsoGR;*e^V32e@BLbI@I6H6Fnw>L z@%uFiR`>az5%%*USoBRkp7#B71+N9Xm$lR9<9*f_Eq;fBvbV{PZy$bM4;ITtUxW^t z9#Nb01L{M@WeN zwg>sf0^zr;dJ{1kZHt6yzkt@s5npW%2>W_>OKQ@9s#wY&?=@nu{M`tJka@A~ld75)X_b>4W? z1*!z!9r?be(pQN}V4g>a>v$sbj{Gz{A>+b^`&Gd$j*cQ|+dV@A2kid7!6Ce#+V<{c z=+PdZE1tCz>1-^Tw&h9MjuyuSPRY5n<2rF`OIPP+k)vrB^4x95i(_NQbpgHmb}!|x z!JY%%kN4Udu`nH8DoY;TWm)PCx7~^s#za(%j^W0%w|`()cfUQbXU|~okUiABtG}0x zU{i5o&qt5jPA0xQLOvA>d-qfOx*zZB5j^p$_h8WE<1iioY9 +; int main() +; { +; int a=5; +; printf("a=%d, eax=%d\n", a, a+2); +; return 0; +; } + +; Declare some external functions +; + extern printf ; the C function, to be called + + SECTION .data ; Data section, initialized variables + + a: dd 5 ; int a=5; +fmt: db "a=%d, eax=%d", 10, 0 ; The printf format, "\n",'0' + + + SECTION .text ; Code section. + + global main ; the standard gcc entry point +main: ; the program label for the entry point + push ebp ; set up stack frame + mov ebp,esp + + mov eax, [a] ; put a from store into register + add eax, 2 ; a+2 + push eax ; value of a+2 + push dword [a] ; value of variable a + push dword fmt ; address of ctrl string + call printf ; Call C function + add esp, 12 ; pop stack 3 push times 4 bytes + + mov esp, ebp ; takedown stack frame + pop ebp ; same as "leave" op + + mov eax,0 ; normal, no error, return value + ret ; return + diff --git a/printf2/compile b/printf2/compile new file mode 100644 index 0000000..3db7b94 --- /dev/null +++ b/printf2/compile @@ -0,0 +1,2 @@ +nasm -f elf -l printf2.lst printf2.asm +gcc -o printf2 printf2.o diff --git a/printf2/printf2 b/printf2/printf2 new file mode 100644 index 0000000000000000000000000000000000000000..e55f2c84ce64155a561c92e74f65d99293f6a442 GIT binary patch literal 6679 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 BxW)hg literal 0 HcmV?d00001 diff --git a/printf2/printf2.asm b/printf2/printf2.asm new file mode 100644 index 0000000..7979337 --- /dev/null +++ b/printf2/printf2.asm @@ -0,0 +1,67 @@ +; printf2.asm use "C" printf on char, string, int, double +; +; Assemble: nasm -f elf -l printf2.lst printf2.asm +; Link: gcc -o printf2 printf2.o +; Run: printf2 +; Output: +;Hello world: a string of length 7 1234567 6789ABCD 5.327000e-30 -1.234568E+302 +; +; A similar "C" program +; #include +; int main() +; { +; char char1='a'; /* sample character */ +; char str1[]="string"; /* sample string */ +; int int1=1234567; /* sample integer */ +; int hex1=0x6789ABCD; /* sample hexadecimal */ +; float flt1=5.327e-30; /* sample float */ +; double flt2=-123.4e300; /* sample double */ +; +; printf("Hello world: %c %s %d %X %e %E \n", /* format string for printf */ +; char1, str1, int1, hex1, flt1, flt2); +; return 0; +; } + + + extern printf ; the C function to be called + + SECTION .data ; Data section + +msg: db "Hello world: %c %s of length %d %d %X %e %E",10,0 + ; format string for printf +char1: db 'a' ; a character +str1: db "string",0 ; a C string, "string" needs 0 +len: equ $-str1 ; len has value, not an address +inta1: dd 1234567 ; integer 1234567 +hex1: dd 0x6789ABCD ; hex constant +flt1: dd 5.327e-30 ; 32-bit floating point +flt2: dq -123.456789e300 ; 64-bit floating point + + SECTION .bss + +flttmp: resq 1 ; 64-bit temporary for printing flt1 + + SECTION .text ; Code section. + + global main ; "C" main program +main: ; label, start of main program + + fld dword [flt1] ; need to convert 32-bit to 64-bit + fstp qword [flttmp] ; floating load makes 80-bit, + ; store as 64-bit + ; push last argument first + push dword [flt2+4] ; 64 bit floating point (bottom) + push dword [flt2] ; 64 bit floating point (top) + push dword [flttmp+4] ; 64 bit floating point (bottom) + push dword [flttmp] ; 64 bit floating point (top) + push dword [hex1] ; hex constant + push dword [inta1] ; integer data pass by value + push dword len ; constant pass by value + push dword str1 ; "string" pass by reference + push dword [char1] ; 'a' + push dword msg ; address of format string + call printf ; Call C function + add esp, 40 ; pop stack 10*4 bytes + + mov eax, 0 ; exit code, 0=normal + ret ; main returns to operating system