You Can Learn Assembly in 60 Seconds (its easy)
HTML-код
- Опубликовано: 3 окт 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...
RUclips, 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
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.
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
*RUclips keeps shoving its shorts in my face*
Already sub to you wanting more tutorials or complete course
Yeah, we do. :-)
This blows my mind knowing Chris Sawyer wrote RCT in assembly.
Legendary bro.
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.
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?
Definitely the most easiest way of explaining assembly from what i have seen so far 👍
This is awesome, could you make more of these short explanations with actual tangible result? Thanks and love this channel!
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!
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
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.
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
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.
You should do more of these short heavy info packed videos. ❤
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++)
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 RUclips 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.
"Variable inside the processor" jeeeeeezzz...
please kindly make playlist on assembly language💙❤️💚♥️
I haven't seen AT&T/GAS assembly syntax since uni & even in uni while the prof had a slide showing AT&T/GAS assembly syntax when we actually wrote assembly it we used the Intel/MASM/NASM assemby syntax
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.
now i can build rollercoaster tycoon in assembly
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.
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
Now im burning " The Art of Assembly" book...
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
This is amazing, I am now a fully qualified Assembly Language programmer for the TIOBE Index 😁
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 💪💪
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.
Please more of these
I see what you mean the syntax for lower level language such as assembly is more clear and straight forward
Ugh, I remember assembler. Push, pop, registers, so much fun haha.
try leaning 8086 assembly
When a simple hello world statement takes 15 lines of code you know you’re doing something right ;)
? It's assembly
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 ?
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.
Usually a constant string will be in the data or rodata section as opposed to text
Do mips assembly next ❤
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 need more easy tutorial like this
You rock dude. Thank you.
You rock!
A course please
Such a trivial example for assembly
holy shit just wrote my first assembly. Thank you
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)
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👍🏽
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)
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
other flawours if assembly use $ to denote hex numbers and use # for rhe purpose $ is used here
poease do more of these ❤️❤️
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.
Perfect Loop.
You gotta do a syscall just to end the program?
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
Good to know more recent stuff, I only know 8086
Equivalent to write(1, "Hello World!
", 13); in c
good video, but plz do not use at&t syntax
Today I learned that amd syntax MOV is src, dest while intel MOV is dest, src. Kinda wonder why they're different🤔
Explain
@@glungusgongus intel syntax and and syntax have the reverse 9rdering for operands
@@jjones3705 what is dest src
Depends on who wrote the assembler, not cpu architecture.
Cool vid, but AT&T syntax?
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
Bro got everything open source
A legend once said, If you know assembly all applications are open-source
0:46 ohw, so, the compilation command is `gcc -static -nostdlib`, then where are assemblers like nasm used??
rax is a register not a variable
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.
👏👏👏 I like your videos...remember doing things with tasm and masm
How to write an assembler?
Man! Just make a playlist on that.
Can you create a proper tutorial for assembly with some projects ?
I prefer NASM syntax.
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.
Learning Assembly is easy, getting it to actually do anything useful, now that is the hard shit ;)
you forget to add it's for Linux, not DOS, for example :)
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
if you can give me an advice to learn assembly, can you give any name of resources to help me learn assembly?
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!
The mnemonics' parameters are in reverse order
Now we learned how to use some API calls to print "Hello World" to the screen. Not much Assembler to see and learn here.
But, to be fair, what can you expect in 60 seconds :).
You should've mentioned that this only compiles on x86_64 Linux, great vid tho!
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.
Meanwhile python:
Print("Hello World!")
Lol
I joke, assembly is really cool
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.
Bro this is just a hello world program. Anything more complex than this requires MORE effort to write and optimize.
Am a professional programmer now
Thanks 🐐
I was a 6502 guy but this makes sense, now I'm learning arm for my raspberry Pi
This somehow doesn't work in Libre Office Writer help?!
So what does mov really do??
Some tutorials say (mov x, y) mean x = y.
But here (mov x, y) seems to mean y = x
Python code = print("Hello world")
Java script= console.log("Hello Word")
Asm :
Assembler still is shorter than Java 😅
I’m here expecting myself to learn assembly by watching these randomly popup shorts
You are the best 💪👏
is anyone else not pointing out the only real instruction he used is mov?
I guess if you have one Turing complete instruction, that's all you need
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.
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.