Understanding x86 bootloader assembly

I am working my way through this tutorial: Writing a Bootloader Part 1.

And I don’t understand assembly at all, so I here are some notes to make sense of it all.

First here are two references that I hope will be useful:

This is the code of the example:

bits 16 ; tell NASM this is 16 bit code
org 0x7c00 ; tell NASM to start outputting stuff at offset 0x7c00
boot:
    mov si,hello ; point si register to hello label memory location
    mov ah,0x0e ; 0x0e means 'Write Character in TTY mode'
.loop:
    lodsb
    or al,al ; is al == 0 ?
    jz halt  ; if (al == 0) jump to halt label
    int 0x10 ; runs BIOS interrupt 0x10 - Video Services
    jmp .loop
halt:
    cli ; clear interrupt flag
    hlt ; halt execution
hello: db "Hello world!",0

times 510 - ($-$$) db 0 ; pad remaining 510 bytes with zeroes
dw 0xaa55 ; magic bootloader magic - marks this 512 byte sector bootable!

So the first instruction bits 16 makes sense.

But org 0x7c00 already gets me struggling. It means that this is where the “code” starts.

However, if I change the number it only changes a number in the output, it does not “move” the code, as I would have expected.

So I looked up the description for the org directive in the nasm docs

The bin format provides an additional directive to the list given in chapter 7: ORG. The function of the ORG directive is to specify the origin address which NASM will assume the program begins at when it is loaded into memory.

Unlike the ORG directive provided by MASM-compatible assemblers, which allows you to jump around in the object file and overwrite code you have already generated, NASM’s ORG does exactly what the directive says: origin. Its sole function is to specify one offset which is added to all internal address references within the section

To be honest I did not understand any of the explanation, so I just assume it is magic and must be in there for this thing to work.

Next is boot: it is a label as I understand, that is, it is not written to the output, but it can be referenced from other places in the code. boot: is not referenced anywhere, but there is a “local label” called .loop: below it, that is used. And local labels must be placed under a label.

mov si,hello means that the address of the “Hello World” string is put into register si, the 16 bit general purpose source register

mov ah,0x0e loads a value into the 8 high-bit accumulator register.

What this does is explained in the linked wikipedia page: BIOS interrupt call

mov ah, 0x0e    ; function number = 0Eh : Display Character
mov al, '!'     ; AL = code of character to display
int 0x10        ; call INT 10h, BIOS video service

ah is the high accumulator which contains the function and al is the low accumulator which gets the character to print. So this works like

  1. set method to invoke
  2. pass parameter
  3. perform that function call

What lodsb does is easy to google:

The LODSB loads the byte addressed by DS:[SI] into register AL. SI is then incremented (if DF=0) or decremented (if DF=1) by 1.

The last byte in a string is the zero byte, so the next part of the code

or al,al ; is al == 0 ?
jz halt  ; if (al == 0) jump to halt label

is easy to understand, it checks for zero and jumps to halt.

Then the int 0x10 instructions performs the operation

And the last part pads they binary file with zeros and adds the magic number

I have also run the resulting binary through an x86 disassembler:

0:  be 10 7c b4 0e          mov    esi,0xeb47c10
5:  ac                      lods   al,BYTE PTR ds:[esi]
6:  08 c0                   or     al,al
8:  74 04                   je     0xe
a:  cd 10                   int    0x10
c:  eb f7                   jmp    0x5
e:  fa                      cli
f:  f4                      hlt

And it appears that the 0x7c00 from the org instruction is added to the address of the “Hello World” string. So I guess it is the offset that points to the beginning of the 512 byte that this bootloader operates in. Which would only make sens

Using Jenkins Matrix Builds with Agent Docker

There is one simple tutorial that I was looking for on the web, and I could not find it.

So I wrote it myself.

Jenkins has matrix builds, and Jenkins has agent Docker for builds inside a docker image.

Combined, these features make it easy to test a project with multiple versions of PHP for example.

So here is the simple example I came up with: Put this in your Jenkinsfile and you are done.

pipeline {
  agent none
  stages {
    stage('BuildAndTest') {
      matrix {
        agent {
            docker { image "${DOCKER_IMAGE}" }
        }
        axes {
          axis {
            name 'DOCKER_IMAGE'
            values 'php:5.3', 'php:5.6'
          }
        }
        stages {
          stage('Build') {
            steps {
              echo "Do Build for ${DOCKER_IMAGE}"
              sh 'php --version'
            }
          }
        }
      }
    }
  }
}

Let me know if it helps you: I am on twitter: @oracle2020

The Memory Palace Method

I am writing about a memory palace that I once built. There are different ways to build memory palaces.

A saw a method recently that used a single picture from a single scene, and did the walk through without moving.

The memory palace that I built most successfully was for learning for a certification to work as a security guard in Germany. For this you have to learn the legal requirements that are the base of the job. The interesting part here is that as a security guard, you are nothing like a police men or women. You only have the exact same basic rights that any ordinary person has. So your room for legal maneuvering is very tight, and you need to know exactly what you are allowed to do.

To learn for the examination, I constructed a path that took me through the neighborhood that I was living in at that time. I took places that were each about 200 meters apart, and gave each location a name, and added a marker to a custom google map. I am right now actually trying to use the Open Source software Marble for this type of work, but I found that it’s bookmark handling is quite rudimentary. Not what I would expect from a popular Open Source Tool. Maybe I need to jump in, and create my own extension. However, at each I of the spots I marked I visualized an animal as vividly as possible, to give the location even more memorability.

After placing names and markers in a map, I transferred the ordered list of locations (with their names) to a table document, with several columns.And next to location and animal, I added one of the facts that I needed to remember. The thing about remembering contents for certifications is, that often it is quite a lot harder, to remember a list of more than 5 or 6 items, than it is to remember a list of 3 things. But these would be the exact types of question being asked in a multiple choice test.

There would be a question like „when you stop a person who stole some merchandise in a supermarket, which law are you acting upon.“ and „how long are you allowed to keep the person.“ And the answer would give you 4 or so, slightly similar sounding names of laws. And of course you are expected to pick the exact right one.So for multiple choice questionnaires in this type of setting, it is not enough to be able to apply to knowledge intuitively, or to talk yourself out of it if you get asked face to face. You need to be able to remember exactly what was asked, even if it does not make much sense in a practical setting.

So that is why a memory palace is a good tool here, because if you would mentally go through your list of laws, you would be able to easily distinguish, if the law was the one at the bus-stop, or if it was the one on the bridge.

A Protocol for testing Self Driving Car Algorithms

If was tasked with testing Self Driving Car Algorithms in the “Real World”, I would go about it in the following simple way:

I’d equip a test-car with all the sensors required for the algorithm to test, and in addition I would add sensors to record the steering wheel position and the positions of the gas and break pedals. I would not add any servos to control and actually “do” the driving the algorithm would suggest.

Instead I’d put two test drivers into the car, one at the steering wheel, doing the driving like a human driver would do. And in the passenger seat, I’d put an “instructor” that would get a screen, that cannot be viewed from the driver position. On that screen the following data would be displayed: The Steering wheel position the algorithm would suggest, and the difference to the current steering wheel position. And the same difference for the speed the algorithm would suggest, and the difference to the current speed.

The “Instructor” in the passenger seat would then get the task of conveying the desired direction and speed that the algorithm suggests to the driver verbally. In the beginning this might be awkward, inefficient and error prone, but over time, as the driver and the instructor adjust to their roles, they will become more and more in tune, like a duo of musicians improvising together. As a pair they would do the task of conveying the information the computer provides to the physical machine, the car.

Then of course all the data from these test drives would be collected, together with the actual driving data collected from the sensors in the steering wheel, pedals, velocity meter, etc.

This data could then be used to evaluate the efficiency and practicality of the algorithms. The goal would then be to optimize in a way that difference between the suggested direction and velocity is minimal in regards to the measured values.

This approach would provide several benefits. First of all the “human” part of this interaction is a model that has been already proved to work well, as this is usually the constellation in a rally car. There is a “Driver” and a “Navigator”.

Additionally, this approach can be used without any legal requirements to testing on actual roads. The driver is actually driving and focusing on traffic, and is not distracted by a screen or anything.

But above all, this approach provides the fast iterations necessary to improve an algorithm incrementally, or quickly test a new idea. Because as the human safety drivers are fully in control and actively focusing on the driving there is no risk if an algorithm proves to have bugs, as this case will simply show up in the data as a greater deviation.

There is no need to have an emergency stop button, and there is no risk of the car suddenly stopping abruptly, or accelerating rapidly, if the algorithm runs in a completely wrong direction.

Thinking about the problem at hand, this was the first and most obvious solution to quickly get to a stage to experiment, without putting anyone at risk and without slowing down the experimenting.

A Shaving Routine without the Fluff

Many words have been written about a manly shaving routine, here are mine.

There are the usual guides on the internet, that are about some fictitious manly archetype, that ramble on about some specific manly products, about scents, and using a single razor, or some classic shaving apparatus. Or that try to guide you towards unnecessarily expensive products in order to drive the writers affiliate commissions up.

You will find none of the above here.

My routine is a simple no frills shaving routine, that includes some necessary products that are in no way expensive or unattainable. They will serve their purpose, and they will serve you a long time.

First of all, why shave at all? It is 2019 for gods sake, nobody cares if you are shaved or not, we live in times where everything goes. So shaving is not part of my daily routine. I do it only, when I feel the time has come again, and I happen to have some “me-time” available. So shaving is for me to celebrate myself, to have some for taking care for myself, and for my body. So I usually not only shave, but I take a bath or a shover before or after, however I see fit. Taking a bath or a shower is not only a physical cleansing for me, it is also a mental cleansing, I do it to draw a barrier maybe between a stressful day of work or travel, to mark the transition into a more tranquil phase of my day, where I relax and feel good, and have a good time.

So my shaving ritual usually starts with me undressing. I do not undress in the bathroom, but rather somewhere else in my momentary living quarters. Undressed then, I take a look around, maybe bring order in some things, taking an inventory of my surroundings.

Then I go for the bathroom, where I usually keep all my shaving equipment and get to work.

As I said, I do not shave every day, so usually I have a bit of a stubble. When I am in a hurry, I just shave anyways, but when I do feel I have the time to take care slowly, I have an electric long-hair cutter. And here is the first piece of advice: I got the cheapest possible version available, from some random supermarket, probably 10+ years ago. It cost me 20 € and basically served me all my adult life long. It used to be rechargeable, but probably the batteries are so worn down by now, it does not charge anymore, I have to keep it plugged in all the time, while using. Well, big deal, it does not matter, I need light and a mirror anyways to shave, and an electric outlet is near by. By now it is also totally clogged up by hair residue, that sometimes it does not even move. Well, I shake it a bit, and gently knock it on the sink, gets it going every time.

So, after I used this cutter to get the stubble into manageable length, and after trimming my beard, I get out the big guns. Well, not so much. I use shaving cream form a tube. And this is an important detail, nothing sucks more than shaving cream from some compressed canister. First of all, canisters with a compressed air or some gas, are an unnecessary waste, the gas involved used to poison the atmosphere, (not so much anymore these days, but hey, Karma!) and they are bulky and a waste of space.

Usually I get a brand of shaving cream in a tube called “Palmolive Rasiercreme Classic“. The reason why I chose this brand is simple, it is the only brand that is available in a tube. Everything else comes in a container, so its out. Here in Germany, it is basically available at every streetcorner, and usually cheaper than on amazon, so don’t waste your money ordering stuff on the internet. I usually buy two tubes, when I see them, so when one runs out, I already have a spare. Although it never runs out. I only use a tiny itsi-bitsi bump of shaving cream, and I shave so seldom, this stuff basically lasts for ages.

To apply it, I use a basic shaving brush. Don’t bother going for expensive materials and brands, I got mine from a random supermarket a few years ago, and I still use it, even though it is already starting to crack and might fall apart anytime soon, … well it hasn’t happened yet, so I stick with it.

Other than that you need something like a plate or cup to stir the shaving cream with your brush. Don’t go all rocket science here, and scout out specialty shops, get a saucer or cup from the kitchen and use that. I have plastic bowl, that I got with another brand of shaving creme some years ago, and this is serving me well here. At one point in time there was a brand of shaving soap that was sold in a plastic bowl as a solid piece of soup, you just had to stick your brush on. Well, I prefer the tube these days, but the bowl still comes in handy to beat the bush so to say.

Also, applying shaving creme, and stirring the foam. I keep it simple and suggest to not overthink it, I don’t waste time stirring to perfect consistency, I just do a few stroke with the brush until its evenly spread and then I start to apply it.

Next up is the razor, and here again, keep it simple, use an effective tool, nothing fancy, but also don’t go all neanderthal on yourself here, hear me? When I was a bit younger and more pretentious I felt like I had to use an elegant tool from a more civilized age (The single blade classic Saftey Razor patented from Gilette in 1901/1904). But these days I simple go for the Wilkinson Sword Quadro, a simple yet effective design, and not expensive at all. Any other brand would probably serve this purpose as well.

And here is also they only luxury that I indulge into, when it comes to my shaving routine. I used to wear out a razor blade until it was barely cutting at all anymore, but these days, I prefer a sharp edge. So I decided to set up the regular order plan on amazon, to ship me a new XXL Pack of Wilkinson Quadro Blades every six months. This means I never run out of blades, and I can generously appoint myself a fresh blade whenever I feel like I want one. As I said, I don’t shave very often, so a new shipment every six months is plenty of blades for me.

And basically then I am done, I do not use any aftershave or other product after the blade, I simple splash water into my face, and wipe it of with a towel, preferable not a white on.

I do not use an Aftershave or any other “smelling” body product, like deodorant or such, because, the whole idea that the human body has any smell that needs to be painted over, is a myth perpetuated by the advertising industry, to make you feel ashamed and insecure, and waste money on their “cure”. Well not for me, for sure, don’t buy into that bullshit.

The decline of the hierarchical Organization in Popular Culture

Being a fan of the popular Space Saga “Star Trek”, and especially of the “Next Generation” Enterprise with Captain Jean Luc Piccard, I cannot help but notice the stark discrepancy in tendency to currently popular Television Series.
Star Trek and the Star Fleet is largely based around a huge hierarchical military organization. The chain of command is clearly defined, the captain receives orders from Star Fleet, the first officer respects orders by the captain, and everyone else respects orders from the first officer and the captain and so on. But it does not stop there, there are further roles within the organization, that supplement the strict hierarchical order. There is the doctor and the counselor, both of which are below the captain, in the chain of command, but never the less can override the will of the captain as experts, should they decide that the captain is incapable of fulfilling his obligations because of a medical or emotional condition.

In a way, the structure is laid out almost like a game of chess, where different roles have different advantages and disadvantages that can override each other in complex scenarios, making strategic games possible, and interesting.
I regard Star Trek as a historical artifact, that allows us today to take a peak into a system of cultural thinking an expectations that has changed not so long ago. A TV-Series is in a way a reflection of the society that created it, and a reflection of the society that were its primary consumers.

And in comparing the series to todays popular television shows, I cannot help but notice quite a stark contrast. So I keep asking myself, what has changed. What has changed in the perception of society in the perception of writers and producers, as well as consumers that made such a change inevitable.

Of course, there are series that contain plots that are concerned with hierarchical structure, and military organizations, Game of Thrones being the most prominent one that comes to my mind. But the topic of this series is never to indulge in the intricacies of a hierarchical organization, but rather to wreck havoc in every possible way of backstabbing and killing leaders and moving hierarchies around.

This is in stark contrast to the Star Trek series, where the concept of the structure of Star Fleet is never questioned as such. It is accepted as a de facto institution. The game is about how to work within the confines of this structure, and seldom and only in far and in between edge cases to question Star Fleet structures as such. So that does happen, but it is the exception, rather than the rule.

And if a series is not about wrecking havoc and creating intense drama and violence, it goes of into the other end of the spectrum.

Take all of the popular sitcoms, like Friends, How I met your mother, Big Bang Theory, The office and probably some more. These Series feel more like a kindergarten of childish innocence. The characters trapped in a Hell of Douglas Copelandian Nihilism. Nothing is serious, everything is wrapped in layers of self-depreciating sarcasm and cynicism. The Brave new World, everything is fun and games, and nothing is serious or important. The topic is no longer about creating great things, and exploring unknown territories, but rather it is about cuddling up in a warm and safe nest, and exchange pleasantries with ones fellow inmates. Every screwup can be shrugged of with a joke, and every tragedy with an outbreak of over acting dramatization, often about not much more than spilled milk.

Contrast this with seriousness of uncomfortable conversations between the leading officers of the Enterprise. Where they spend time pondering how their next move will be perceived, and whether it is moral and ethical to proceed in a certain path. Whether it is a viable tradeoff to insult the feelings of an adversary, or even if stall or a bluff is an appropriate response. None of those Strategic meetings are taking place in modern TV.

Is it that people have changed, that desires and goals have changed, or maybe it is our perception. The idea that we are no longer seeing us as serious and important in the things we do. That in fact the seriousness in which Jean Luc Piccard and his mates acted were overacting devoid of any resemblance in the real world, where all is actually fun and games.

Well, that is probably for everyone to decide for him- or herself.