You Can Learn Assembly in 60 Seconds (its easy)
ฝัง
- เผยแพร่เมื่อ 26 ก.ย. 2024
- You can learn assembly in 60 seconds, its NOT HARD.
🏫 COURSES 🏫
www.udemy.com/...
🔥🔥🔥 SOCIALS 🔥🔥🔥
Low Level Merch!: www.linktr.ee/...
Follow me on Twitter: / lowleveltweets
Follow me on Twitch: / lowlevellearning
Join me on Discord!: / discord
Finally, someone's being more creative with doing loops instead of say "and that's why..." or "so..." or anything I've seen in tiktok.
ayyy someone noticed tyty
@@sophiacristina I left tiktok months ago. It's not a terrible app. But you really can't stop scrolling unless you make an attempt.
@@bookle5829 It was a sort of a joke, even if i dislike tiktok, but understandable...
Yes, it is about dopamine, the constant feed and the FOMO releases it and dopamine is know to be addictive... By what i know, this is intentional...
TH-cam, instagram, reddit, tiktok, all have constant feed and FOMO...
That loop thing is actually silly
we have an error in comment it was because it was tiktok
Gonna add this to my resume now. Thanks.
I'm just going to bring my phone to the interview and show them this video. When it's over I'll ask, "when do I start?"
Oh, since you showed me the video, I have now learned Assembly so I don't need to hire you anymore. I'm going switch careers from HR professional to Assembly programmer and hire myself for the position.
“Assembly, 2 years of experience”
A minute @@FreerunnerCamilo
lol
The fact that Roller Coaster Tycoon was written in assembly is insane to me
What a savage
I think it's ok, but it's a lot of work!
I think the code of this game instructs the CPU to write data into its memory-mapped address space, and the GPU could copy this data into its memory, and the rest of the code in RAM or other devices could be processed by the CPU to make the game run.
And so, the data processing occurs, of course!
Pokemon red and blue were also written in assembly
Super Mario world was written in assembly
Those are not as big or complex games as Rollercoaster Tycoon
Damn yall watch shorts wtf also plz sub
The missing ingredient in your channel.
most youtubers would spend like 16 minutes describing this and you just did it in 60 seconds. kudos to you. Will be here if you make more
*TH-cam keeps shoving its shorts in my face*
Already sub to you wanting more tutorials or complete course
Yeah, we do. :-)
The first line is making the start lable available to the linker not telling the program where to start.
What’s a start label and what’s a linker 😵💫
i like how you say 60 seconds and this will probably take me 6 years to understand
Nah... you're much smarter than you think. It's just a command sequence to set up a system call to tell the kernel to dump a string to standard out
what lol no
Assembly is actually very simple its just more tedious to write and understand when analyzing code. The same advice I have for learning to code (study lots of other people's code) applies to assembly too, get ollydbg and analyze programs youve written or are familiar with and look at how it's layed out and try to figure out what it's doing. If you don't want to mess with NASM and want to do super simple stuff when you load a program in ollydbg you can deliberately overwrite code with nops and then insert your own asm you write into that area and set the top of your code as your origin and watch your hand made code run right there stepping through it to see it working and watch the registers :)
@@TheGoodChap if youre on windows, visual studio has a built in disassembler. (you can even select specific parts of code to convert them into asm and even debug in asm)
@@plasmahvh gcc -S for the win.
This blows my mind knowing Chris Sawyer wrote RCT in assembly.
Legendary bro.
Program #2: Write out a random number
Edit: Didn't expect that many people to take it seriously, just thought of a sarcastic way to show that assembly is not always a plug&play
You mean like the program generates a random number? Damn then we'll have to implement mersenne twister algorithm in assembly. Bet that'd be tricky as heck.
@@mayank8387 i programmed a very simple random number generator from scratch in python a few months ago lol. probably could recode that in assembly
Solve 3D wave equation and write the output to a data file 😂
@@mayank8387 I think you can just read from /dev/random or some shit, provided you're running Linux.
Im genuinely curious. How would you do that?
You can't just say mov $1, rax means we will write because on its own it doesn't mean that. You have to mention first that your intention is to making a syscall to write. which requires you to put the ordinal of the write routine in rax, the stream number to rdi, the address of the message in rsi and the length of the message in rdx
thank you, your explanation is LITERALLY better than his and helps me understand
thx man, do you have any recommendations for channels for assembly other than this guy
@@Theproductivesidestacksmashing is a good channel about reversing. i don't know about any assemble channels
@@TheproductivesideBen Eater has some good projects that go in depth
Also, do a search for "Fasm", that should bring up tons.
This is what happens when you learn assembly for 60 seconds.
For people who don’t understand, this is how I understood it.
You can call special functions by setting rax to something, then calling syscall.
So for example, writing to console is
Step 1: rax=1
Step 2: provide other arguments
Step 3: Syscall
While for exiting the program it’s
Step 1: rax=0x60
Step 2: provide other arguments
Step 3: Syscall
Nice, here is my summary as well. The rax register is used to say which system call you'd like to access (they're numbered by the kernel), then you can pass additional parameters in the other registers. Then, you run the syscall command. If there's any (integer) return value, it will replace the contents of rax with that.
All of this is documented in various man pages for x86!
This is awesome, could you make more of these short explanations with actual tangible result? Thanks and love this channel!
I can read and understand asm to some extent. But I never wrote it before. Besides some inline asm. I think being able to read it is more important than actually writing programs in asm.
now i can build rollercoaster tycoon in assembly
Yeah.... Fuck that I'ma stick to C# lmao
😂😂😂😂😂
Would learning C# help at all or is it only really useful for unity projects? (What I would use it for)
@@TheStickCollector it is helpful in web development too
@@TheStickCollector You can do almost anything in C# and you'll have the knowledge to learn other programming languages much quicker aswell.
@@TheStickCollector learn c++, its much more useful than c#, theres not much c# can do that c++ cant
"Variable inside the processor" jeeeeeezzz...
And that's why Fortran was invented. And this is also why I use C++
When Fortran was invented, even assembly was quite primitive.
I only use C & I'm lookin to learn AMD 64 Assembly!
@@LittlePenguin1-17 good luck. Writing assembly is really fun once you understand it (btw the reason I write in C++ is just because it has alot of stuff I use, I'd also use C if I had no reason to use C++)
More of this please. Mainly system calls and such.
You are absolutely right! Assembly isn't hard at all. Solving problems in assembly is :)
From all I've seen on it, writing assembly is just much more tedious than genuinely difficult to comprehend.
My first experience with Assembly was back in the 80's when I was a kid with the Z80 architecture, what amazing processor it is.
Ah, memories... Back in high school I wrote a macro assembler (i.e., ASM plus "macros" which could be complex function calls etc) -- on paper, while vacationing! :)
@@kennethbeal I did use MASM (Microsoft Macro Assembler) a lot back in the DOS era, I used to Write Libraries on MASM and linked the .OBJ with Borland's Turbo Pascal code, it was at the dawn of 32 Bit when it was a new thing.
Old goodies processors,we usually build things from scratch i miss those days😊
dude, you are a natural teacher, keep it going, so awesome, seriously awesome
Now im burning " The Art of Assembly" book...
please kindly make playlist on assembly language💙❤️💚♥️
You should do more of these short heavy info packed videos. ❤
The only issue I have with this lecture is your direct usage of numbers, you'd have a very much better description of the program if you did msg_length, sys_write, stdout, sys_exit, exit_success constants instead (or in capitals if you prefer, it's a convention I'm not fond of, but it exists in most use of most languages...).
Isn't it clearer when you make constants capitalized? That way, you know they aren't variables that could be changed.
The variable $msg does not contain the message itself but the address of the label msg where also the string "Hello world" is stored.
It's a TH-cam Short, so no blame, but I think this can be confusing otherwise. The registers are only 64 bits long, so you can't really store a complete string in them and such os functions usually will work with addresses.
This program is asking for user input.
rax register is used to call os system call 1 means read.
rdi means file descriptor. also 1 means read.
rsi pointer to buffer.
Rdx size of buffer to be read.
Just recently learn this from AI
The equivalent c function would be:
read(int file descriptor, const char* buffer, size_t bufferSize)
There are about 300 linux system call can be used. This is only one of them.
Also this is in x86_64 architecture.
Almost
Rax 1 - write
Rdi 1 - stdout
Yes, the language is easy, but writing secure software at that level takes a bunch of knowledge and experience.
What means "secure"?
@@albertosoto4280 Something that is not easily exploitable and doesn’t let the user do some stuff outside of its original use case.
I always hated written in assembly because you have to manage your own function calls (put stuff on the stack, set return destination, go to the function, read variables off the stack, unroll the stack... so tedious). It's so much easier in C where all that boilerplate is taken care of for you!
Are there any people nowadays writing production assembly code? I'd assume the performance gain wouldn't really be worth it with modern compiler optimizations.
Maybe embedded / specific hardware it's worth but idk.
@@Dom-zy1qyThe performance of Assembly is basically no different from modern-day programming languages, it was only popular back then for its performance, which was previously unseen
truly the best assembly break down out there. 10/10
Please more of these
there is this kind of sort of type of level of beauty in not just writing but also seeing code that low level that is just so satisfying i don’t know exactly why
Merely being able to see exactly step by step all the crap that a computer needs to go through in order to visually render you moving your cursor half a pixels to the right, all within the fraction of a millisecond, is insane in and of itself.
When a simple hello world statement takes 15 lines of code you know you’re doing something right ;)
? It's assembly
This is amazing, I am now a fully qualified Assembly Language programmer for the TIOBE Index 😁
You rock dude. Thank you.
You rock!
please make a vid on how to easily do this on windows with intel syntax!
What syntax is he using
@@glungusgongus gas also known as gnu assembly, windows is not set up make assembly and gcc outputs at&t syntax which is the worst assembly language to exist.
@@zmike9831 whys it called AT&T
I will finally learn this language 💪💪
Do mips assembly next ❤
The syntax itself isn't what is difficult about assembly. What is difficulty is keeping track about all of the hardware aspects (registers) memory allocation and many other things that are abstracted away in high level languages.
Useful for optimizing certsin algorithms or tasks but I would stick to C.
It requires 3x more code and 3x more thought to write in pure assembly.
Write in C. Use inline assembly for optimization.
poease do more of these ❤️❤️
All that for a .087 millisecond of clip of something I didn't even understand. Thanks, man. IT course would be fun.
Learning C and assembly hand in hand makes both languages much easier to grasp. C is really powerful (and dangerous) because of how "low-level" it is. Think of it this way: Would you like 2 pieces of bread with jelly in between or would you like some jelly that is encapsulated in bread boundaries.
I just really said nothing different there, but the POV and terminology were different. Using C is easier because it comes with a plate, a knife and a jar for the jelly.
I see what you mean the syntax for lower level language such as assembly is more clear and straight forward
A course please
Assembly is generally fairely simple which is its biggest advantage but also disadvantage its like building a bicycle out of its raw materials basically said
If you were to want to code games in assembly then you would have to implement many simple functions which even the most simple function is already a few lines long so in a nutshell its a very low level language
You can increase optimisation drastically but its going to take a very very long time to code big projects into it
Ugh, I remember assembler. Push, pop, registers, so much fun haha.
👏👏👏 I like your videos...remember doing things with tasm and masm
I prefer NASM syntax.
Perfect Loop.
He's simultaneously pranking / punishing the type of person that would actually believe that you can learn assembly in such a short amount of time by teaching using AT&T syntax! "I know - let's choose the syntax that was the brain-child of a freaking telecom company instead of the one from an actual chip designing / manufacturing company - Intel!" - said no one EVER!!!
Bro, you good?
This is just what I was thinking, didn’t specify the assembler being used or the particular syntax and you go about teaching. It these things that make the language confusing. Terrible approach to teaching
@@khonello Hey guys - I thought it would be obvious by my over-the-top, crazed comment earlier that I was attempting humor. While I do prefer intel syntax, I was just joking. Didn't expect people to agree with me.
Usually a constant string will be in the data or rodata section as opposed to text
Thanks for share your knowledge! Man, I didn't know that mov could be used inverted... Because I learnt it was mov reg-destination, value-source
However, with this video I learnt it could operate in inverted way👍🏽
I feel like this would have been better explained by doing a few different syscalls & what is expected to perform them as well as _WHY_ the syscall would need the length in %rdx if %rsi has $msg ?
bro, make us a series of videos on assembly, i really want to learn it but i cannot find a good tutorial, that explain in details and gives good links about the system calls codes, tips for asm and what does each asm indtructions does, also it would be cool if you do it on windows. Seem like windows sucks to make asm programs. But i only have windows and i'm too lazy to make a vm (because i have 8 GB of ram lol)
Ok, now I am lost. I thought assembly was so low you wouldn't just have stdin/stdout/stderr available that easily.
Assembly is low, but not that low. Lower than assembly would be just ones and zeros. Assembly is essentially programming or manipulating registers/flags instead of variables and using instructions instead of functions. The key difference is registers and instructions are physical things on the microprocessor while functions/variables are abstractions to make life easier
But there's this thing called interrupts and it makes your life SO MUCH easier and feels sometimes like you're writing in high level languages.
Assembly is fun, once you're good at it. You can write assembly code like you're writing high level code BUT you also have the knowledge and imagination to think and understand where EVERY bit of data is stored on the memory, or like where and how does these bits move in the MP/memory.
Sorry for this scuffed explanation lol I have recently finished my assembly course and I suggest also learning assembly in the context of microcontrollers to get an understanding of how the I/O work (like stdin and such)
@@RieMUisthegoaT Thanks for the in depth response, makes more sense :)
@@RieMUisthegoaT bro thanks for that explanation really learn something new
i need more easy tutorial like this
Ok, subbed!
I like the explanation but I think it could use some clarification; You should have started with (maybe the long format does, if so, excuse this comment! I still liked the clip), that the storing of values into the registers, is because you're preparing a syscall and syscalls use particular registers and the contents of those registers define what syscall you are making.
If one is somewhat versed in this stuff, this is going to be obvious though, but for those who never made a "raw" syscall, it might not be obvious. For those who are interested in that, and on linux, you can type `man syscall` from your terminal of choice to read more about that.
other flawours if assembly use $ to denote hex numbers and use # for rhe purpose $ is used here
Such a trivial example for assembly
You gotta do a syscall just to end the program?
You are the best 💪👏
God i miss knowing how to do basic programming like i did in 1st grade, i had the time of my life using and masterimg that apple 1.
Timex-Sinclair 1000. BASIC and assembly. Wild times.
Bro got everything open source
holy shit just wrote my first assembly. Thank you
Python code = print("Hello world")
Java script= console.log("Hello Word")
Asm :
Assembler still is shorter than Java 😅
Correct! It isn't hard!
Yup. It isn't hard to understand assembly, it's just hard to build something complex out of it.
@@БогданСкулимовский it is unreadable by it self, you have no idea what syscall actually do unless you know that it is built for linux.
I have become too used to intel syntax, everything uses it 😢
It is better tbf...
@@spaghettiking653its really not
@@tocraft573 At least the intel syntax doesn't spam %s and $s everywhere :/ that is just a sore on the eyes
@@spaghettiking653 that doesn’t even feel like a good argument, especially when using a good theme
@@tocraft573 How do you use a theme? What software? Any text editor I've used has no highlighting and it's a pain to look at. Moreover, the intel syntax doesn't use those symbols, which proves they're redundant and so there's just no point in writing them.
Is setting rax to 1 on line 4 independent of the operating system?
I imagine standard in and out are a rather universal concepts. I think most machines will do something at least POSIX-like. To what extent are IO buffers supported by hardware?
No, not even the function called when doing syscall is standardised across operating systems.
Cool vid, but AT&T syntax?
Am a professional programmer now
Thanks 🐐
crazy how the og rollercoaster tycoon was made with THIS code language
I’ll come back to this when I actually need to learn assembly.
Yeah, lets learn them at&t ways
U should add a background because various asm work with different cpus, for example I know assembly for 8 bit and it's 99% different that this (probably 32/64 bit)
Good to know more recent stuff, I only know 8086
0:46 ohw, so, the compilation command is `gcc -static -nostdlib`, then where are assemblers like nasm used??
A legend once said, If you know assembly all applications are open-source
good video, but plz do not use at&t syntax
This is nice
Learning Assembly is easy, getting it to actually do anything useful, now that is the hard shit ;)
Python coding is so much easier. Assembly may be the first. but it definitely isn't the best because it is very time consuming. That's why you should learn C and Python because C can count to 1 billion in a few seconds while python can do it a 2 minutes. Python has its uses and so does C
I've always been curious about the programming of microcontrollers and chips on things like motherboards or graphics cards. I don't have a lot of knowledge about hardware outside the fundamentals and would be interested in digging deeper
AT&T syntax. :(
I had to do it to keep compilation simple I’m sorry D:
@@LowLevel-TV it's alright. We all make mistakes. 😂
Good short, though. 👍
This somehow doesn't work in Libre Office Writer help?!
You should've mentioned that this only compiles on x86_64 Linux, great vid tho!
is the mov instruction pseudo instruction? or in cisc everything is a proper instruction)
The mnemonics' parameters are in reverse order
We had to make a sorting algorithm in CS in y86-64 and lemme tell you it was not easy lol but it was really fun
AAAaaaaahhhhhT&T AAAaasembly syntax!
sorry, I was raised by my mom on intel-style assembly syntax since I typed my first hello world onto her keyboard when I was 3yo & I can't help screaming everytime someone unironically writes x86 assembly using at&t syntax. my sincere condolences.
Make a video on assembly source code of syscall please please please
Syscall is single CPU instruction that translated to 0F 05 opcode. When assembler see that instruction assembler put somewhere in the output file byte 0F then byte 05.
well there is a lot of good and some bad too I think. You never really explain when you specified that you want the syscall "write", you just tells that mov 1 in rax will write on the screen and "syscall" handle the communication with os. But good video tho, I learned today!
What architecture is this?
What application did you use for assembly language, I want to learn #newbie
Can you create a proper tutorial for assembly with some projects ?
I was a 6502 guy but this makes sense, now I'm learning arm for my raspberry Pi
I use rubbing alcohol in my pits maybe once a month. I need to use deodorant less and that in turn means I don't get the deodorant burn from the alcohol and other chemicals in the stick. If I don't use the rubbing alcohol my pits get atrocious in a few days. I try not to shower every day, it makes a huge difference in my skin health.
not the AT&T syntax
Wdym
Yes, this is for GNU assembler. The syntax seems backwards
@@glungusgongusthere's intel and AT&T syntax for ASM, intel is much nicer
Meanwhile python:
Print("Hello World!")
Lol
I joke, assembly is really cool
Man! Just make a playlist on that.
Cool!
Hi! In what program do you write assembly code? 🤔🤔