NASM ってなんだ

『30日でできる！　OS自作入門』を読んでいる。

https://qiita.com/yosukei3108/items/045d37e605c57c74efe7

書籍では作者さん自作のアセンブラが利用されているのだけど、これがどういうものなのかよくわからない。
なので、何か適当なもので代替することにした。これがどういうものなのか、やっぱりよくわからない。

というわけでつまった (つまっている) ことや調べたことどもをメモ。

### RESB の使い方？

お手本 (`$` -> `($-$$)` に置換したもの) の以下の部分を NASM でアセンブルしたら (記述通りの動きには思えるのだけど) `0x7dfeまでを0x00で埋め` たあと、残りの処理がなされたように見えた。

(この辺も違う)
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/616231/d03cded0-9a33-1708-7357-67df79972217.png)

要するに、できたファイルがフロッピーのサイズを大分はみ出るものになってしまった。

```nasm
		RESB	0x7dfe-($-$$)		; 0x7dfeまでを0x00で埋める命令

		DB		0x55, 0xaa

; 以下はブートセクタ以外の部分の記述

		DB		0xf0, 0xff, 0xff, 0x00, 0x00, 0x00, 0x00, 0x00
		RESB	4600
		DB		0xf0, 0xff, 0xff, 0x00, 0x00, 0x00, 0x00, 0x00
		RESB	1469432
```

`0x7dfe-($-$$)` を `0x1fe-($-$$)` としたら動いたんだけど、これは解決になってるんだろうか、、？

list はこんな感じだった。

`other:` は「ラベルがいるのかな？」っと思って書いたもの。けど特に意味をなしてなさそうだった。

(一部抜粋)

```nasm
    55 00000082 0A                      		DB		0x0a			; 改行
    56 00000083 00                      		DB		0
    57                                  
    58 00000084 <res 7D7Ah>             		RESB	0x7dfe-($-$$)		; 0x7dfeまでを0x00で埋める命令
    58          ******************       warning: uninitialized space declared in .text section: zeroing [-w+zeroing]
    59                                  
    60 00007DFE 55AA                    		DB		0x55, 0xaa
    61                                  
    62                                  ; 以下はブートセクタ以外の部分の記述
    63                                  other:
    64 00007E00 F0FFFF0000000000        		DB		0xf0, 0xff, 0xff, 0x00, 0x00, 0x00, 0x00, 0x00
    65 00007E08 <res 11F8h>             		RESB	4600
    65          ******************       warning: uninitialized space declared in .text section: zeroing [-w+zeroing]
    66 00009000 F0FFFF0000000000        		DB		0xf0, 0xff, 0xff, 0x00, 0x00, 0x00, 0x00, 0x00
    67 00009008 <res 166BF8h>           		RESB	1469432
    67          ******************       warning: uninitialized space declared in .text section: zeroing [-w+zeroing]
```

```nasm
    55 00000082 0A                      		DB		0x0a			; 改行
    56 00000083 00                      		DB		0
    57                                  
    58 00000084 <res 17Ah>              		RESB	0x1fe-($-$$)		; 0x7dfeまでを0x00で埋める命令
    58          ******************       warning: uninitialized space declared in .text section: zeroing [-w+zeroing]
    59                                  
    60 000001FE 55AA                    		DB		0x55, 0xaa
    61                                  
    62                                  ; 以下はブートセクタ以外の部分の記述
    63                                  other:
    64 00000200 F0FFFF0000000000        		DB		0xf0, 0xff, 0xff, 0x00, 0x00, 0x00, 0x00, 0x00
    65 00000208 <res 11F8h>             		RESB	4600
    65          ******************       warning: uninitialized space declared in .text section: zeroing [-w+zeroing]
    66 00001400 F0FFFF0000000000        		DB		0xf0, 0xff, 0xff, 0x00, 0x00, 0x00, 0x00, 0x00
    67 00001408 <res 166BF8h>           		RESB	1469432
    67          ******************       warning: uninitialized space declared in .text section: zeroing [-w+zeroing]
```

### リンク

https://www.nasm.us/xdoc/2.16.01/html/nasmdoc8.html

https://www.nasm.us/xdoc/2.16.01/html/nasmdo13.html#section-13.1.3