Practical x64 Assembly and C++

 

While at school and studying music, I taught myself computer programming. After teaching piano for a while and discovering that there was already a lot of people hoping to become the next Horowitz, I decided to go back to Uni and get a degree in programming. We brushed over C++ learning mostly how to program console apps for Linux. Mostly we looked at Java. My Uni taught me a lot but nothing to do with the way a CPU or its language works. I figured that if my Uni wasn't teaching ASM, there's a good chance other Unis weren't teaching it also. ASM isn't the most useful computer language but I believe it's the most important. Every other language is just an abstraction of it. I decided to put up some tutorials on YouTube to see if anybody was interested in this type of information. After the first few videos got some views from folks all around the world I felt asured that this was indeed useful information.

 

Mine mightn't be the most popular videos on YouTube (that's probably the one about the kid biting another kid's finger), they're far from being the most popular programming videos (that's probably New Boston's videos) but I'm very proud, it's been a massive undertaking.

 

These tutorials are intended for folks with a background in C++ who'd like to know how to use modern x64 Assembly language. From tutorial 44 onwards I started making slides, they are available for download below. They are in OpenOffice's Impress format. We've been all the way from "mov al, 3" to the craziness of the SIMD shuffle instructions. I have learned a lot from making these tutorials and I hope you have also.

 

This series is available on YouTube here.

 

 

Slides:

 

Tutorial 44: MMX Packing and Unpacking
Tutorial 45: MMX Boolean and Comparison Instructions 1
Tutorial 46: MMX Comparisons 2 Segue to SSE
Tutorial 47: Intro to SSE
Tutorial 48: SSE Data Movement and Data Alignment
Tutorial 49: SSE Arithmetic and Dynamic Data
Tutorial 50: Data Conversion Instructions
Tutorial 51: Shuffle Instructions
Tutorial 52: Structures
Tutorial 53: Classes
Tutorial 54: Moving Sign Masks
Tutorial 55: MXCSR Exception Fun
Tutorial 56: SSE Comparisons that Set rFlags
Tutorial 57: SSE Insertion and Extraction Instructions
Tutorial 58: Intro to AVX

 

 

Other

 

Notepad++ Color Scheme: Download, unzip and copy to the install folder. This is a new color scheme for Notepad++, it features pastels on a black background which I find is easier to look at for long periods of time than the white backgrounds of most programming IDE's. There's a text file in the zip with instructions for installation.

Download color scheme

 

In tutorial 25 we looked at increasing the brightness of a photo with ASM and C++. In the tutorial we only looked at C++ and basic ASM. This PDF has a comparison of C++, ASM, MMX and SSE doing the same brightness adjusting algorithm. The source code for each version is included:

Supplemental PDF to Tute 25: C++ vs ASM vs MMX vs SSE

 




Free web hostingWeb hosting