Finally someone teaching this like a regular programming course. Very hard to find such videos. Have this in my college coursework, and they don't teach the basics patiently at all. So happy I found this
I don't plan on ever doing anything with this knowledge but hearing someone talk passionately about stuff they know about is the best and this channel is a beauty for that
The audio and visual easter eggs embedded in the various videos is unusual, niche, and quite well done. Using easter eggs here to mean "so obscure that the historical reference is easily missed."
Cannot wait to go through all of this series -- and then the rest of your vids. Can't see how I've missed you so long. Thanks for a great presentation.
Can't wait for the rest of this series. You do a great job at stepping through this slowly. I feel like only you and Ben Eater take this much time to explain assembly to people. Love it!
The most cost effective solution to run arm on real HW is to connect a rpi Zero 2 (not Zero 1 - has armv6) or any other rpi 2..5 (rpi5 has a armv8)headless over USB to you system and connect with ssh to it. Great introduction! -- Happy coding! --
i'm person who spent best years of my career rewriting CoreGraphics and UIKit from outside of Apple from scratch using Hopper as guidance, yet managed to never learn asm because it's lame and tedious. your glorious high quality videos, (naturally or intentional? :) leery eyes and lovely voice just sucks me into learning that things i should have just learn years ago. thank you so much you are the best teacher i ever had, and i can see boys of future learning how to combat our future computer overlords by your immortal art! ❤❤❤❤❤❤❤❤❤
This is so well done. I first learned Arm assembly at Apple developing drivers for Apple Newton. I sure wish there'd been something like this around back then!
I just started Assembly today (On the higher level, I've learned Python and Lua so far). I'd accidently landed on your channel when you were cosplaying while reviewing sort algorithm code. I've always wanted to learn Assembly language. But now I'm subscribed (could've sworn I already was...). Isn't it positively-ironic that the person who invented Assembly is a woman? And you're teaching it really well! Awesome and intuitive vids.
I have learned assembly language before, but gave up halfway. I also saw LaurieWired's video in the recommended videos on the homepage. After clicking in to watch it, I immediately followed her. LaurieWired's lectures are so damn good. I hope I won't give up halfway this time.
I can’t stop watching the videos because three reasons: 1.- interest on ARM assembly 2.- used to watch SEL when I was in college back in the 90’s 3.- the quality of the content and production Best regards from México ! 👍
I learned assembly in debug in x86 from the Able book, this is pretty cool, hello world was written by using interrupts . Can’t wait to try your setup and try run assembly on raspberry pi zero and pi4 (armv6 and armv7) kernels also Android armv8
Nice! Thank you for this video series! What do you think about following along using an arm sbc? Do you think there might be some problems if it is 64bit or another version of the arm ISA?
There shouldn't be issues using an ARM sbc as long as it's not a significantly different/super old ISA. ARM64 will cause a few differences to the register sizes and such, but most of the overall concepts will be the same. As long as you are on ARMv7 or higher most of these lessons should just work as expected.
I am going to nitpick your choice of words... values are not passed to registers... registers are used to pass values to the system call. It is possible that this detail is no longer correct, as I am an old fart. But "passing" was always something that happened with parameters or data between processes or to and from functions. Registers get written or read. Thank you for great video.
In code it's SWI, or SoftWare Interupt, but when compiled it becomes SVC, SuperVisor Code. lol. Two very 'interchangeable' OpCodes Laurie. I can't believe you're paying for the cloud, $63.51¡ Great scott! Why not buy a Raspberry Pi for $35 and install Risc OS? You can always do your RU-vid video production in Windows..... 🖋
This was SUCH an interesting video! So cool to have more smart STEM girlies like me :) I am in a systems level class and we have been covering assembly recently, did not know about cpulator but its a great resource for getting practice!
PC register is always increased by 4 because of the 32bit(=4byte) architecture? I am looking forward to the rest of the playlist! Thank you for sharing!
Just a question. What benefit do you have in using gcc to link the program like it was C ? That's why the linker misses the stdlib, because it's not C. The assembler program is compiled after the "as" command, you can just link and generate the executable with "ld". "ld" will look for "_start" label, not the "main" function, and generate the executable file.
Hint for GCC v12 on RPi5 with 64bit Raspberry Pi OS: If at @15:25 you get: "./hello: cannot execute: required file not found" just add "-static" after "-nostdlib"
Thank you for posting this. I just found this series and I was wondering if it was possible to just use a Raspberry Pi for this. I take it from your above post that this is in fact possible.
virt-manager (qemu) with aarch 64 doesn't have a "swi" instruction. I don't see it in the ARM doc on aarch64. This a Fedora 40 AARCH64 system via virt-manager on Fedora 40x86_64.
Hello our engineer, please is there a course to teach ARM but hardware and not software. I want to know and understand the function of each pin. Thank you.
Hi, thank you for the video. I couldn't run the program using the gcc command you provided on raspberry pi 4. I need to modify it `arm-linux-gnueabi-gcc -o hello hello.o -nostdlib -no-pie -nostartfiles` hope it's helpful
Yes, that was helpful.. But why? When I tried to run hello, I got "cannot execute: required file not found", but after using "-no-pie -nostartfiles", it worked fine, and I got "42". What magic did those flags do?
I didn't end up needing the "-nostartfiles" flag, but did need the "-no-pie" flag. "-no-pie" is apparently for disabling the default PIE (position independent executable)... 🤔🤔
@@brianh.000For those interested, the problem here is related to memory layout. By default, compilers try to generate position independent executables (PIE). That's because they're smaller in size. These executables have their code and data sections placed at random memory addresses during runtime. However, Raspberry Pi being an embedded system, its hardware has a limited amount of memory with specific reserved regions. So you will need to disable PIE by making the executable a position dependent executable (PDE) instead. The trade-off here is that PDEs tend to be much larger files.
9:02 If you think about it though to demo s best practice tutorial having prints before return 0 would not make sense iterating through the process unless you exit successfully since the printf WOULD technically error but being beings of habit just assume the exit success will be included in the end of the guide. Also doesn't Hello World chronologically not make sense since it was the one of the pair who wrote C to first use Hello World in the meme setting. If this true I would assume assembly predates C since Compiler. These are all just assumptions.
I know this is a one year old video and this may be a stupid question, but can anyone tell me why I could not just use a Raspberry Pi 4 for this. The Pi is a native ARM after all and it runs Linux and even has the "as" command built in?
If Robin over at 8 Bit Show and Tell was more photogenic he'd probably use this format, instead we're forced to stare at an ugly Commodore 64 or Vic, not exactly beautiful Risc OS v5.30 or Laurie's lovely retro Mac OS. This version of Mac OS has always been a favorite of mine, I particularky like the 'start menu' at the bottom of the screen, similar to NeXT OS. 😎 🖋
if you get an error :cannot execute binary file: Exec format install do sudo apt install -y qemu-user-static binfmt-support sudo dpkg --add-architecture amd64 sudo apt update sudo apt install libc6:amd64
I have a gambas3 ide for arm available. No gdb yet. In /use/bin you wll find the abi-as linked to as. In 64b this is the same so I'm soft-linked to as7 for 32b leaving as for 64b. Also, align 4 all .data's or bus error, and add .arch arm7-a before code and data.🤒🙏🥰
Вам не обязательно использовать Azure для работы с ARM-кодом. Если у вас Linux-x86(-64) вы можете работать с ARM-кодом прямо из терминала. Для этого необходимо установить binutils для соответствующих архитектур. ru-vid.com/video/%D0%B2%D0%B8%D0%B4%D0%B5%D0%BE-Wk4o7OjXmEw.html - не сочтите за рекламу. В том видео веду подготовительную часть по работе с ассемблером GAS и описываю необходимые инструменты для работы. Так же есть продолжение в других видео, но не для новичков, точнее не для совсем новичков.
Do you really look at the keyboard as you type yet appear this experienced and knowledgable? I think you communicate stylistically more than most so probably a comm effect more than true inexperience lol
Eeeooowwww! ... You're recommending that we pay for microsoft's azure?? Why not use an ARM development board, for example one of the STM32 Nucleo boards, or even a cheaper Bluepill or Blackpill STM32 based boards for a couple of bucks from China? Writing assembly on these is loads of fun, and being hardware, your code can actually do 'hardware' type stuff, (blink LEDs etc.), which is kind of the point to assembly anyway.
@@shulogou4234 Thank you, first time I've seen this one. Looks pretty cool though, so I'll have to take it for a spin later. Actually I'm probably more interested in Risc-V these days, but I see they also have some for support it.