私はこの日かそこらでGoを使ってアセンブラーを構築しているので、言語に慣れることができます。これはGoを使用した最初の実際のプログラムなので、問題が発生することが予想されましたが、一貫したバグが何度も発生しています。他の場合にそれを修正するための他のハッキーな方法を見つけたばかりですが、今回は答えが必要だと思うので、実際にこれを正しく行っているように感じます。
基本的に、私は大量のバイト値を解析する必要があります。これらの一部は符号付きバイトであるため、-1=0xFFなどです。ラベルのアドレスを計算するとき、現在のアドレスからのオフセットを見つける必要があります。次のコードは、オフセットを取得するために使用する基本バージョンを簡略化したものです。
// lbladdr holds the target label address
// address holds current address in memory
// label[x] holds the offset
if address > lbladdr {
lbladdr -= address
}
label[x] = strconv.FormatInt(int64(lbladdr), 16)
これは正の値に対しては機能しますが、負のアドレス(address> lbladdr)を取得すると、FEのような値を取得する代わりに-2を取得します。標準ライブラリが16進数に負の符号を追加する理由がわかりません。また、それに関するドキュメントで何も見つかりませんでした。私は他の多くの場所を調べましたが、同じ問題を抱えている人を見つけることもできないようです。
簡単な修正であることが私の側の何かであることを願っています。