Intro to x86 Assembly Language (Part 1)

Sdílet
Vložit
  • čas přidán 30. 05. 2024
  • Covers the basics of what assembly language is and gives an overview of the x86 architecture along with some code examples.
    Example code: github.com/code-tutorials/ass...
    Davy Wybiral
    wybiral.github.io/
    / davywtf

Komentáře • 450

  • @bonbonpony
    @bonbonpony Před 5 lety +317

    08:34 Actually, MUL and DIV also affect EDX. The MUL instruction stores the higher half of the result in EDX, while DIV stores the remainder from division there. If one dosn't know about that, one can be very surprised that suddenly their EDX is getting clobbered with "random" numbers after division/multiplication.

    • @OmbreeTV
      @OmbreeTV Před 4 lety +11

      Omg thank you so much, i've been trying to understand a code for a couple of days and couldn't figure out why edx was being pushed and pop before and after a multiplication

    • @lyrapuff7502
      @lyrapuff7502 Před 3 lety +3

      *boops*

    • @mikicerise6250
      @mikicerise6250 Před 3 lety +2

      OMG, thanks soo much. If not for your comment I would still be mystified at the bizarre results of my test code. xD "Multiplication never works... division only works sometimes... duuhhh..." xD

    • @mikicerise6250
      @mikicerise6250 Před 3 lety +2

      Another thing I've discovered on the MacOSX x64 side of things (still using NASM) is if you divide 64 bit integers the quotient is apparently given by RAX:RDX, for reasons I still don't understand, so since both RAX and RDX are 64 bit integers, aside from giving you the wrong answer, if anything substantial is in RDX it's a ticket to overflow-land unless you initialize RDX at 0 first.

    • @Kokurorokuko
      @Kokurorokuko Před 2 lety

      How is storing higher half of the result useful?

  • @kraio-sfu
    @kraio-sfu Před 4 lety +664

    “Assembly language is basically just a human-readable form of machine code”
    As a complete beginner who has just looked at Assembly code for the first time, I am crying both tears of laughter and pain at this statement

    • @mansodev
      @mansodev Před 3 lety +7

      @Kraio have you tried lua or python? Their more higher level and easy to learn.

    • @nickstill2666
      @nickstill2666 Před 3 lety +30

      I hope you didnt give up but you'll want to start somewhere besides x86 assembly. There are loads of languages that make more sense and are more natural to write for a beginner.

    • @kraio-sfu
      @kraio-sfu Před 3 lety +12

      nick still Which one would you suggest? I have recently started wanting to make my own computer on a breadboard, but I want to be able to actually make programs for it. Do you think the Motorola 68010 would be an okay pick?

    • @kraio-sfu
      @kraio-sfu Před 3 lety +16

      The Planebagel Oh I absolutely love Python, it’s my main programming language. I just find it funny because calling Assembly “human-readable” is a very generous statement

    • @nickstill2666
      @nickstill2666 Před 3 lety +6

      @@kraio-sfu hell ya! A big project but could be rewarding. My personal preference (arm chair opinion) would be to start with a 6502. The Assembly lang is straight forward and there is a community around ROM creation for the 6502 with python and you can even by a kit for breadboarding it

  • @ivandres73
    @ivandres73 Před 5 lety +275

    Excelent, straight to the point and no "suscribe bull".... Great presentation and introduction

    • @ivandres73
      @ivandres73 Před 3 lety +1

      @reena mola because you reference processors registries (eax, ebx, etc) without brackets ([ ]). You use brackets when referencing memory address ([0x400008]).

    • @ivandres73
      @ivandres73 Před 3 lety

      @reena mola "mov eax,[ebx]".
      imagine ebx=0x40000.
      So we are saying: "mov eax, [0x40000]".
      imagine memory at 0x40000 = 20.
      So we are saying: "move eax, 20".
      Note, syntax might change a bit of how to reference a registry depending on the tool (at&t, intel, oracle...). But that is not the case for the example above.

    • @ivandres73
      @ivandres73 Před 3 lety

      @reena mola No, registries do not have addresses, they are just... "there". Memory has addresses, and the more memory you have (2GB, 4GB, 8GB, etc) the more "addresses" you have.

    • @ivandres73
      @ivandres73 Před 3 lety

      ​@reena mola no. you are talking about the "sections" that a registry has. Every 32bit x86 registry has 4 sections, and those are different from memory addresses.
      memory addresses refers to the RAM.
      registries do not have addresses.
      registries can store addresses.
      references to sections of a registry is with 'ax, al, ah', and other special words; not with brackets.
      any RAM address is refered with brackets[ ].
      [eax+4] = go to the RAM, at the location of eax+4.
      eax+4 = add 4 to the value stored in eax. (not sure if this is even permitted)

    • @ivandres73
      @ivandres73 Před 3 lety

      @reena mola Make good use of knowledge! 🤙🏽

  • @marcussmithwick6326
    @marcussmithwick6326 Před 5 lety +72

    Finally a good tutorial on x86

  • @ahmedomar222
    @ahmedomar222 Před 5 lety +6

    Thanks for making this video series for free. I am really glad. It is a massive help to me. Plus you really simplify it which good for a beginner like me.

  • @asheralbrecht2554
    @asheralbrecht2554 Před 2 lety +14

    You are the only person that i could find online that can explain things extremely well! Thanks so much!

  • @FoxhoundULM
    @FoxhoundULM Před 3 lety +7

    Hey Davy, what a masterpiece of a tutorial series, I wanted to have an idea of what Assembly programming looked like and better understand very low level programming, well man i wasn't expecting to find such a brillant tutorial in video !
    Thanks, and if you want to carry on with more advance stuffs in assembly, please don't hold your breath !

    • @xrafter
      @xrafter Před 3 lety +2

      Assembly is a processor language but in human format.

  • @c0n-5truct-0r6
    @c0n-5truct-0r6 Před 2 lety +3

    I just had hours over hours of Assembly lessons at University... 6 Videos and I finaly get how it works! Well done! Thanks a lot!

  • @PAUNOMOLUSCO
    @PAUNOMOLUSCO Před 4 lety +10

    I gave my thumb’s up to every episode of this series.

  • @regretkagami1004
    @regretkagami1004 Před 5 lety +1

    I'm so glad you've made these videos. I been using asmtutor which is good, but it goes down a lot easier when you've got a good video series to follow along to. Dope shit man, thank you

  • @CircularLogic54
    @CircularLogic54 Před 5 lety +4

    I love your enthusiasm at the end

  • @sgyniguez
    @sgyniguez Před 5 lety +43

    Didn't make sense to me the first time I watched it. After reading through parts of a book, following a tutorial on tutorialspoint, this made SO much more sense. Thank you my man.

    • @omarelric
      @omarelric Před 4 lety

      Salvador Yniguez hey dude, what book was it?

    • @mrkewi1
      @mrkewi1 Před 4 lety +2

      @@omarelric The Art Of Assembly

    • @omarelric
      @omarelric Před 4 lety

      Fazil Sultan hey, I somehow came across the same book anyways 😂

    • @omarelric
      @omarelric Před 4 lety +1

      Samyakt Jain “the art of assembly”

    • @samyaktjain698
      @samyaktjain698 Před 4 lety

      @@omarelric I am beginner , please help me , where I learn Reverse engineering ?

  • @alexcocinda384
    @alexcocinda384 Před 4 lety +12

    Thank you so much man, this really helped me to get the basics of this thing. I may be able to pass my college exam now.

  • @Learnerofthings
    @Learnerofthings Před 2 lety +4

    I know this is 3 years old, but this is a very good series and should be continued :)

  • @Vermilicious
    @Vermilicious Před 4 lety

    Short and easy-to-follow presentations. Good job.

  • @memy4460
    @memy4460 Před rokem +1

    Absolutely brilliant. Nothing, I mean nothing at all worked on my computer from this tutorial.

  • @gumboe2007
    @gumboe2007 Před 3 lety

    Great video Davy, clear and easy to follow. Thanks for putting it together

  • @beasusan521
    @beasusan521 Před 3 lety

    happy I've found your videos. from this video alone, I already understood more, then in my lecture to this topic. Thanks for uploading such a great video series and taking your time explaining it so good!

    • @043_fazlerabbi5
      @043_fazlerabbi5 Před rokem

      He is best

    • @hjrgf
      @hjrgf Před rokem

      ​​​@@043_fazlerabbi5 yeah the video is formatted to make it easy to learn all of the assembly stuff I remembered much more stuff than other tutorials 10/10 tutorial

  • @bradley1995
    @bradley1995 Před 9 měsíci

    @10:37
    Wow amazing descriptions on the code. Seeing it in such fashion helped me understand the translation between that and c code. I believe there will be great insight learned from your video's! Thank you friend

  • @shvideo1
    @shvideo1 Před 2 lety +1

    Thank you for this great tutorial. Covered a lot of information and produced a working executable. You are a great teacher!

  • @gregwoolley
    @gregwoolley Před 3 lety +2

    Nice video! Good pace, well structured and clearly explained, thank you!

  • @naymiii
    @naymiii Před rokem

    Amazing video series Davy! It's incredibly helpful!

  • @10hourslooney25
    @10hourslooney25 Před 3 lety

    Thank you. And no needless Videohive inspired introductions! Straight to the point.

  • @crabmothflunderbum7770
    @crabmothflunderbum7770 Před 4 lety +3

    Outstanding video series, thank you so much, it really helped. You are a pioneer of knowledge

  • @g4yktzgjx6
    @g4yktzgjx6 Před 6 lety +97

    First part was informative but. You left out what the different keywords means once you get to 10:08.
    msg db "Hello World!",10,0 //Here we append '
    '(newline) and the numeral 0 to our string in order to 0 terminate it(0-terminated string) - which is good practice.
    Also you didn't create a string of bytes but an array of bytes. You defined bytes(db). So you defined an array containing characters "Hello world!
    ". Which you could also have done like so although very messy:
    msg db 'H', 'e' , 'l',' l', 'o', ' ', 'w', 'o', 'r', 'l', 'd', '!', 0x0a
    len equ $ - msg // equ is used to define contants. "$" evaluates to the assembly position at the beginning of the line containing the expression(current address). Also maybe tell us why it works. It is not obvious for everyone that you're taking the address exactly after making your string and subtracting the address of the very start of the string.
    Please remember to tell us what each keyword does and means.

    • @DavyBot
      @DavyBot  Před 6 lety +31

      You don't need to end your string with a 0x00 unless you're dealing with C library functions. The system call for writing to stdout requires the length and that 0x00 doesn't matter. Also... What do you think the difference between a string and an array of character bytes is? :)
      Also, to each their own. I write the bytes out in hex format as 0x0a instead of just 10 or even 0xa because I'm used to working with hex editors (as people working with low level languages like this tend to be).
      But, yes, I could have explained in more detail that the $ was for taking the location after the string.

    • @g4yktzgjx6
      @g4yktzgjx6 Před 6 lety +2

      There is no difference between a string and an array of characters. But in the video you called it a string of bytes. Which I find wrong. It is an array of bytes or a sequence of bytes representing a string.

    • @DavyBot
      @DavyBot  Před 6 lety +20

      They're all valid terms. You probably hear people use "string of bytes" more when they've had to deal with unicode strings in addition to ascii strings. But you're just being picky (or not being picky enough?), it isn't "wrong".
      en.wikipedia.org/wiki/String_(computer_science)#Representations
      www.google.com/search?tbm=bks&q=%22string+of+bytes%22

    • @homelessrobot
      @homelessrobot Před 3 lety +1

      A more relevant section of that wikipedia article is probably:
      en.wikipedia.org/wiki/String_(computer_science)#Non-text_strings (maybe it wasn't there two years ago)
      The meaning of the word 'string' has evolved to mean 'a sequence of character elements' (or whatever) over time, but its really just another word for vector, array, or sequence. In particular if you are working on x86 in machine instructions, you should probably already be somewhat familiar with this because there are a whole class of string operations for x86 that aren't related t zero terminated character encoding anything. They are just for operating over a contiguous, addressable sequences of elements of a given size.

  • @chevalier5691
    @chevalier5691 Před 5 lety +2

    This video is not really an "intro" but fortunately it's exactly what I need.

    • @blackham7
      @blackham7 Před 4 lety +2

      Eurgh You're such a squidward

  • @J0rD5t3R
    @J0rD5t3R Před rokem

    This video just saved my whole day. Thank you! Now on to the rest of the playlist...

  • @a.v7998
    @a.v7998 Před 5 měsíci

    This was really very intresting! I think learning assembly teaches you a lot about computers!

  • @vojtechstoklasa3417
    @vojtechstoklasa3417 Před 10 měsíci +1

    I am programmer for quite some time, but your videos seem to be the right way for me to move into asssembly more! Cheers

    • @meno437
      @meno437 Před 9 měsíci +1

      Crack your own programs good way of learning

  • @jpalacios117
    @jpalacios117 Před 4 lety

    You reeeeaaaly hace to watch it more than once...
    Great video!

  • @finlayhutchinson7370
    @finlayhutchinson7370 Před rokem

    Very helpful I watched a few tutorials and this is the easiest one to understand thank you.

  • @myartchannel8205
    @myartchannel8205 Před 4 lety +1

    Hurray! Now we're getting somewhere, assembly is a set of different languages. I'm definitely bookmarking this.

  • @serdart7220
    @serdart7220 Před 5 měsíci +1

    Thanks for this great, very comprehensible, video. Organization of the video (introduction and then development of the body part of this training) really is very nice, 👌👍

  • @NC700xLover
    @NC700xLover Před 4 lety +2

    This is great, and very helpful. Thanks for making it.

  • @kingbeencent
    @kingbeencent Před 3 lety

    This video suddenly appeared on my playlist after watching virus testing videos, I am interested in remember the Assembly Language, thanks for this content!!!!!

  • @sameermubeen8495
    @sameermubeen8495 Před měsícem

    very useful and informative video, amazing work

  • @tree9380
    @tree9380 Před 4 lety +194

    I came here from michael reeves saying this is a easy language and my friend says its not, naturally im going to torture myself to spite my friend. This will be my first coding language, wish me luck

    • @undefinedchannel9916
      @undefinedchannel9916 Před 3 lety +54

      cmon atleast learn a high-level language to get used to big brain code logic like loops and if statements and stuff like that

    • @tree9380
      @tree9380 Před 3 lety +33

      @@undefinedchannel9916 my suffering is and will be immeasureable till im done and move on to less suffering like c++

    • @tree9380
      @tree9380 Před 3 lety +7

      @steev i do hate myself imdeed

    • @wassuupman764
      @wassuupman764 Před 3 lety +28

      @@tree9380 start with python or JS dude... you will lose motivation

    • @dilet1114
      @dilet1114 Před 3 lety +27

      only the most chad of chads will be able to do that...

  • @booleanscene8882
    @booleanscene8882 Před 3 lety

    The information in this video is spot on

  • @trulyspinach
    @trulyspinach Před 5 lety +1

    Thank you for the great video, very clear explanations.

  • @pendergastj
    @pendergastj Před 4 lety +1

    What a great video. Thank you for making this! Subscribed.

  • @MosinShooter109
    @MosinShooter109 Před 2 lety

    Oh man what a find! Knowledgeable and understandable.

  • @DividedWarrior
    @DividedWarrior Před 4 lety

    Very helpful video. You are the best! Very fun language. Wish me luck!

  • @rexseppe7084
    @rexseppe7084 Před rokem

    Thanks, finally someone with a good tutorial!

  • @dezcraft_dev
    @dezcraft_dev Před rokem

    Davy you are a wonderful teacher

  • @Rogue_Art
    @Rogue_Art Před 3 lety +7

    One thing you should mention is that there are two ways to write x86-64 assembly. The one you've shown in your video is the Intel syntax which is a lot nicer and readable, but is read right-to-left. The other one, which is just as common, is the AT&T and GNU syntax which is more complex and is read left-to-right.

  • @kr1spybac0n
    @kr1spybac0n Před 3 lety

    Your explained this way better than my professor ever did

  • @user-en3fm9wn9x
    @user-en3fm9wn9x Před rokem

    Awesome content, thanks for sharing this!

  • @UniqueGlover
    @UniqueGlover Před 4 lety

    Great video, easy to follow

  • @PerreRust
    @PerreRust Před 3 lety

    Great video, no bullshit, and excellently explained!

  • @Handlessuck1
    @Handlessuck1 Před 4 lety

    This was suprisingly easy to understand

    • @fighterjelly
      @fighterjelly Před 3 lety

      what do you smoke to understand this god language ?

  • @johnrothe6981
    @johnrothe6981 Před 4 lety

    Great contents, great communication!

  • @joriskbos1115
    @joriskbos1115 Před 5 lety +5

    I've seen assembly code that just uses syscall instead of int 0x80 and as far as I know it does exactly the same. Does it matter what I use? My best guess is that syscall might be something specific to nasm and int 0x80 is more common across assemblers.

  • @PureASM-ShellCoder
    @PureASM-ShellCoder Před 4 lety

    Excellent video, thanks man ! 👍👏

  • @myles9193
    @myles9193 Před 6 lety +12

    Been trying to teach myself x86 for a while, definitely not the 'nicest' language but a great feeling when it works

    • @drozcan
      @drozcan Před 6 lety +5

      reverse engineering feels like pro

    • @wooseliedestine9382
      @wooseliedestine9382 Před 5 lety +1

      @@drozcan Yes indeed

    • @bradley1995
      @bradley1995 Před 9 měsíci

      I'm learning to create a simple "compiler" using java for a lex/parser and to generate asm code. I'm super excited!

  • @trifalgarh
    @trifalgarh Před 5 lety +10

    I wish we had a professor for assembly & computer architecture like you in my Uni 😅

    • @MrGSA1310
      @MrGSA1310 Před 3 lety +1

      I wish I had a professor who teach me something instead of forcing me to watch this kind of videos in order to have any hope of success for his exam 😢

    • @grandmakisses9973
      @grandmakisses9973 Před 3 lety

      @@MrGSA1310 that’s what I’m scared for I’m going to university soon :( wish me luck

  • @elikelik3574
    @elikelik3574 Před 4 lety

    Thanks a lot for such a great explanation. I have seen a lot of super videos but I'm not clever enough to understand them, but now eventually I start to understand =D . Again Thanks a lot.

  • @Bod88
    @Bod88 Před 4 lety

    I really enjoyed this. I'm currently reading the PDF Reverse Engineering For Beginners (understanding Assembly Language) and it gets a bit heavy at times when it talks about different CPU architecture sets and different compiler output. But your video is straight to the point. Thanks

  • @husamalzahrani2503
    @husamalzahrani2503 Před 4 lety +1

    Really thanks man we really were need this courses for learninh you really amazing and great persone dont stop 🔥👍👍👍👍🔥🔥

  • @wisdommonger
    @wisdommonger Před 5 lety +2

    I'd love to see the final right half of the video, but it's populated by overlays. I've got annotations turned off, but they still show up.

  • @awecwec3720
    @awecwec3720 Před 3 měsíci

    very clear and efficient thank u

  • @clayton8945
    @clayton8945 Před 3 lety

    Great explanation!

  • @samaellovecraft
    @samaellovecraft Před 2 měsíci

    Thanks for the knowledge!

  • @jefferystone1
    @jefferystone1 Před 4 lety +1

    Good job - ignore the haters - we all have to start somewhere which is why many are here.

  • @sivaaj8504
    @sivaaj8504 Před 2 lety

    To the point. Excellent video.

  • @satejtawade
    @satejtawade Před 4 lety

    Good video. Thnx sir. Kindly upload more video on assembly language

  • @jamespatrick8145
    @jamespatrick8145 Před 3 lety

    Awesome video, thanks!

  • @tracetv8115
    @tracetv8115 Před 5 lety +1

    10:32 I am a little bit confused. How does the System know, if we want to store the value 4 into the eax to calculate with it or if we want a system call? I don't get it?

  • @willychrosnik1925
    @willychrosnik1925 Před 8 měsíci

    thanks bro. amazing video

  • @mgkole
    @mgkole Před 5 lety +1

    Great video man!!!!!!!!

  • @joan2296
    @joan2296 Před 3 lety

    OMGG thank uuu Davy 😍😍😍😍😍

  • @Fabik11
    @Fabik11 Před rokem +1

    That was pretty cool.

  • @lionhack01
    @lionhack01 Před rokem

    Great stuff!!

  • @mr_noodler
    @mr_noodler Před 2 lety

    Great video!!

  • @lucasbpsx8566
    @lucasbpsx8566 Před 3 lety

    Wow, you teach Go and x86, you're a god

  • @greob
    @greob Před 5 lety +3

    Nice and simple. Thank you!

  • @sealkeen
    @sealkeen Před 3 lety

    5:44 *accumulator register, the first important one. Something that is missing is the general purpose registers' description/declaration/definition.

  • @HonsHon
    @HonsHon Před 2 lety

    when I first got it to compile, I was so happy haha

  • @MoveTrueRecords_
    @MoveTrueRecords_ Před 5 měsíci +1

    Bro u just explained this easy

  • @juan-ou3gq
    @juan-ou3gq Před 4 lety

    good teacher thanks from Peru

  • @ProfessorLinux
    @ProfessorLinux Před 4 lety

    Great video.

  • @shis10
    @shis10 Před 4 lety

    Awesome video

  • @kmengkomsot1479
    @kmengkomsot1479 Před rokem

    Thanks for the tutorial🥰🥰🥰

  • @thehorse1sbrown
    @thehorse1sbrown Před 3 lety

    You are a god, sir. Thank you!

  • @tomaszx7760
    @tomaszx7760 Před 3 lety +1

    Nice. Many years ago i write some Asm code in dos. And use int 13h mode to create games.

  • @maelstrom57
    @maelstrom57 Před 7 měsíci

    I hadn't been this excited to print "hello world" before.

  • @danielevallini6518
    @danielevallini6518 Před 3 lety

    Great video :)

  • @Videosuser
    @Videosuser Před 3 lety

    You've saved my college semester, sir. Thank you.

  • @mathssoso4261
    @mathssoso4261 Před 6 lety

    thank you, what is the software used for programming?

  • @Spitfire-fg2mi
    @Spitfire-fg2mi Před 3 lety

    If using visual studio (2019) is any of the syntax different from these examples? I'm getting syntax errors when attempting to run the code. I just briefly checked a different video specifically for setting up visual studio for assembly and their example ran fine.

  • @lilraahdreadlockvideosandm1648

    I’m about to watch this 😁

  • @srshk257
    @srshk257 Před 3 lety

    Very cool series. I wish my professors taught like you. Any plans on doing a series on ARM64 or x86_64 assembly?

  • @DavyBot
    @DavyBot  Před 6 lety +6

    Example code: github.com/code-tutorials/assembly-intro
    Slides: docs.google.com/presentation/d/19nVBqrXdsvRHhAXPDwQodSoux-b_PXF9dBe-bfZJS2M

    • @godwhomismike
      @godwhomismike Před 6 lety

      I really hope you teach computer science courses at your local college(s).

    • @Xerion567
      @Xerion567 Před 6 lety

      godwhomismike From what I understand, computer science is more about mathematics and high level abstraction stuff. Most of the courses I've seen teach with Java, though I did know of least one school which focused on embedded systems.

    • @godwhomismike
      @godwhomismike Před 6 lety

      I've had plenty of CS instructors that were not that great with math, but could code extremely well.

  • @stdint.h
    @stdint.h Před rokem

    Very clear

  • @w3w3w3
    @w3w3w3 Před 3 lety

    Thanks for this :)

  • @wqatch
    @wqatch Před 4 lety +1

    2:42 32-bit's max is 4,294,967,296, while 64 bit's max is 18,446,744,073,709,551,616. 64 bit's max is actually 32 bit max' squared.

    • @peterparker-fg5kr
      @peterparker-fg5kr Před 2 lety

      conclusion 64 bit are no more useful than 32 bits

    • @wqatch
      @wqatch Před 2 lety

      @@peterparker-fg5kr *laughs in >4GB of ram*

  • @mrgamer-lu1im
    @mrgamer-lu1im Před 3 lety

    man i wanna thank you

  • @lunaluna7aya
    @lunaluna7aya Před 5 lety +4

    how can one know in whivh register should we move the value? for example like how do we know if value 1 should be moved into eax and value 42 into ebx? is it possible if we move them into ecx or edx? can someone help me which registers are suitable for which?

    • @DavyBot
      @DavyBot  Před 5 lety +1

      It depends on the system call you're making. On Linux EAX is always going to determine the type of system call. So when I set it to 1 I'm specifying that it's a sys_exit (system exit) call.
      Here is a chart of different system calls: syscalls.kernelgrok.com/
      You'll notice that EBX, ECX, ...etc all have different meanings depending on the system call. If you're not doing a system call then it doesn't matter, they're general purpose registers. So you can use them however you want until you need to make a system call and then they have specific purposes.

    • @lunaluna7aya
      @lunaluna7aya Před 5 lety

      oh, so you mean it doesn't matter in which register you store the value at first, right? I was so confused about that ever since i started learning this language ..

    • @bonbonpony
      @bonbonpony Před 5 lety +3

      @@lunaluna7aya Normally the registers are "general purpose", wich means that they're at your disposal and you can do whatever you like with them. It's basically your scratchpad.
      But on Intel/AMD processors, each of those registers has also some "special purpose".
      For example, the "A" register (AX, EAX, RAX) is for Accumulating the results of calculations. It is often the default register for operations like multiplication or division, and therefore it is also used for returning values from functions etc.
      The "B" register (BX, EBX, RBX) is the Base registers, because originally it was used to store the base address for arrays of data in which you index with some other register.
      The "C" register (CX, ECX, RCX) is the Count register, because it is often used as a counter in loops or string operations.
      The "D" register (DX, EDX, RDX) is the Data register, because it can be used with I/O ports, in which case it stores the data to be sent throuth the port (the port number is in A).
      There are also "index registers" (pointers) that are used for pointing data in memory:
      The Stack Pointer (SP, ESP, RSP) for pointing to the top of the stack, Base Pointer (BP, EBP, RBP) to point to the base of the stack.
      Source Index (SI, ESI, RSI) and Destination Index (DI, EDI, RDI) that point to the source and destination data in string operations.
      There's also Instruction Pointer (IP, EIP, RIP) that points to the next instruction to execute. You don't manipulate it directly, but it changes when you make jumps, returns, subroutine calls and interrupts.
      The interrupt number 0x80 is a system call on Linux, so it only works on Linux. Microsoft DOS used a different interrupt number (0x21) for the system call. You can find the full list of available interrupt services in the Internet.

  • @InsaneFirebat
    @InsaneFirebat Před 4 měsíci

    Do you have a favorite resource for opcodes and system calls?

  • @gregoryfenn1462
    @gregoryfenn1462 Před 3 lety

    The third line in the _start function "int 0x80" doesn't work for me. "Error: operand size mismatch for `int'". I couldn't see where this is covered in the video, what is the compiler complaining about?

  • @daman7387
    @daman7387 Před 4 lety +1

    What videos should I watch to be able to understand this?