アセンブリ言語のパフォーマンスのアセスメント(たす、減量、乗算)
#Boot.asm[org0]jmp07C0h:startstart:movax,csmovds,axmoves,axmovax,0xB800 moves,ax movdi,0movax,word[msgBack]movcx,0x7FF paint:movword[es:di],axadddi,2deccx jnzpaint read:movax,0x1000;ES:BX=1000:0000moves,ax;movbx,0;mov ah、2;ディスクにあるデータをes:bxのアドレスにmov al、1;1セクタを読むことだ。mov ch、0:0番目のCylindermov cl、2;2番目のセクターから読み始めている。mov dh、0;Head=0mov dl、0;Drive=0 A:ドライブint 0x13;Read!jc read:エラーが起きれば、再び艦。jmp 0x1000:0000;kernel.binが位置したところでジャンプする。msgBackdb'.',0x67times510-($-$$)db0dw0AA55h#Kernel.asm[org0][bits16]start:mov ax、cs;csには0x07C0が入っている。mov ds、ax;dsをcsと同じにしている。mov ax、0xB800;ビデオメモリのセグメントをmov es、ax;esレジスタに入れる。mov di、0;の一番上の列の最初に書くところだろう。mov ax、word[msgBack];使うべきデータのジュソガプを指定する。mov cx、0xFFF;画面全体に書くためには;0x7FF(10進数2047)犬のWORDが必要である。paint:mov word[es:di]、ax;ビデオメモリーに使われる。add di、2;一人のWORDを書いたので、2を加える。dec cx;一人のWORDを書いたので、CXの値を一つ減らす。jnz paint;CXが0でなければ、paintにジャンプして;残りをもっと使う。;eaxは足し算;ebxは引き算;ecxは掛算movedi,0 ; 一番上の列の最初に書くところだろう。moveax,'2';movdword[es:edi],eaxincedimovbyte[es:edi],0x07incedimovbyte[es:edi],'+'incedimovbyte[es:edi],0x07incedimovdword[es:edi],'1'incedimovbyte[es:edi],0x07incedimovbyte[es:edi],'='incedimovbyte[es:edi],0x07incediaddeax,2 ; 1 + 2!pusheax ;push!movdword[es:edi],eaxincedimovbyte[es:edi],0x07incedimovbyte[es:edi],''incedimovbyte[es:edi],0x07incedimovbyte[es:edi],''incedimovbyte[es:edi],0x07incedimovbyte[es:edi],''incedimovbyte[es:edi],0x07incedi;----------------------------------------------------------------------------moveax,'2';movdword[es:edi],eaxincedimovbyte[es:edi],0x07incedimovbyte[es:edi],'-'incedimovbyte[es:edi],0x07incedimovdword[es:edi],'2'incedimovbyte[es:edi],0x07incedimovbyte[es:edi],'='incedimovbyte[es:edi],0x07incedisubeax,1 ; 2 - 1!pusheax ;push!movdword[es:edi],eaxincedimovbyte[es:edi],0x07incedimovbyte[es:edi],''incedimovbyte[es:edi],0x07incedimovbyte[es:edi],''incedimovbyte[es:edi],0x07incedimovbyte[es:edi],''incedimovbyte[es:edi],0x07incedi;----------------------------------------------------------------------------moval,2movbl,3mulblmovdword[es:edi],'2'incedimovbyte[es:edi],0x07incedimovbyte[es:edi],'*'incedimovbyte[es:edi],0x07incedimovdword[es:edi],'3'incedimovbyte[es:edi],0x07incedimovbyte[es:edi],'='incedimovbyte[es:edi],0x07incedipusheaxaddeax,48movdword[es:edi],eaxincedimovbyte[es:edi],0x07incedimovbyte[es:edi],''incedimovbyte[es:edi],0x07incedimovbyte[es:edi],'a'incedimovbyte[es:edi],0x07incedimovbyte[es:edi],'s'incedimovbyte[es:edi],0x07incedimovbyte[es:edi],'m'incedimovbyte[es:edi],0x07incedimovbyte[es:edi],'!'incedimovbyte[es:edi],0x07incedi;エンターmovesi,0cmpesi,79jbeENTERENTER:;繰り返すようにするものmovdword[es:edi],''incedimovbyte[es:edi],0x07incediincesicmpesi,500jbeENTER;エンター終了jmp$ ;このアドレスで無限ループを回る。msgBackdb'.',0x00 ;背景色で使用するデータtimes510-($-$$)db0 ;ここから、509番地まで0に割り当てられる。dw0xAA55 ;510番地に0xAAを、511番地に0x55を入れておく。- 出力結果 -コンピューターの構造の遂行評価で容易で簡単な番組を制作するものが出ました。しかし、簡単ではないですね。アセンブリ言語であるため、最初からすべて作ってくれなければならず。とにかく3時間の間、アセンブリ言語の勉強して作りました。