数値演算と思いきや文字コード(Ascii)の演算でしょうこれは

addというのは加算命令らしい.レジスタDLに1を入れて,それからaddを使って5を足すというサンプルコードがあったのだけれども,出力させるためにさらに0x30を足せというのになんか違和感を感じたので代わりに0x35を足してみた.

 ; OnePlusFive.asm
   bits 16
   org 0x100
   
   mov dl, 1
   ;add dl, 5
   add dl, 0x35
   ;add dl, 0x30
   mov ah, 02
   int 0x21
   
   mov ah, 0x4C
   mov al, 0
   int 0x21

すると実行結果は

 D:\asmwork>nasm -f bin OnePlusFive.asm -o OnePlusFive.com
 
 D:\asmwork>OnePlusFive.com
 6
 D:\asmwork>

予想通りなわけで."AH=02"+"int 0x21"がレジスタDLにある文字を標準出力にという意味だから,そうなんだね.

このサンプルでは"1+5"をやりますとテキストは言ってるけど,現実的には数値演算ではなくAsciiのコードを加算したわけだ.addそのものの機能はこれでも分かるわけだけど.数値演算の結果出力って意外と面倒ということなのかな?