論理計算をしてみる
C言語でもできることだが、AndとかOrとかXorの計算をアセンブリコードで実装してみる。すべてアセンブリコードでやると入出力なんか考慮しなくてはならないので、関数部分だけアセンブリコードで書く。
- logic.asm
global _and global _or global _xor section .text _and: mov eax, 1234H mov edx, 5678H and eax, edx ret _or: mov eax, 1234H mov edx, 5678H or eax, edx ret _xor: mov eax, 1234H mov edx, 5678H xor eax, edx ret
- logic.c
#include <stdio.h> int main() { printf("and(0x1234 and 0x5678) = %x\n",and()); printf("or(0x1234 or 0x5678) = %x\n",or()); printf("xor(0x1234 xor 0x5678) = %x\n",xor()); return 0; }
使うのはnasmとgccのみである。nasmでアセンブルしてgccをほぼリンカとして使っている。そしてきちんと実行コードを作ることができる。結果は以下の通りである。
$ nasm -f win32 logic.asm $ gcc logic.obj logic.c $ ./a.exe and(0x1234 and 0x5678) = 1230 or(0x1234 or 0x5678) = 567c xor(0x1234 xor 0x5678) = 444c