1

num1B と num2B の 2 つの数値を追加し、その数値を結果に格納し、最後に結果を表示したいと思います。

しかし、nasm を起動すると、次のように表示されます。

prog2_1.txt:4: 警告: nobits セクションでメモリを初期化しようとしました: 無視されました

prog2_1.txt:5: 警告: nobits セクションでメモリを初期化しようとしました: 無視されました

prog2_1.txt:6: 警告: nobits セクションでメモリを初期化しようとしました: 無視されました

私のコード:

org 0x0100 ;

section .bss
    num1B: db 0Ah ; init num1B to 0Ah
    num2B: db 00111111b ; init num2B to 00111111b
    result: db 0 ; init result to 0

section .data

section .text

    mov AX,0 ; AX = 0
    add AX,[num1B] ; AX = AX + num1B
    add AX,[num2B] ; AX = AX + num2B
    mov [result],AX ; result = result + AX

    mov DX,[result] ; show result
    mov AH,09h
    int 21h

    mov AH,4Ch
    int 21h

ありがとうございました

4

2 に答える 2

4

.bssセクションをセクションに変更する必要があります.data。この.bssセクションは初期化されていないデータを対象としていますが、.dataセクションは初期化されたデータを対象としています。そのため、セクションではdb、などを使用できません。代わりに、セクションに配置できます。同様に、を使用できます。など、セクションではありますが、セクションではありません。dw.bss.dataresbresw.bss.data

つまり、.dataは初期化されたデータ用であり.bss、初期化されていないデータ用です。

于 2012-08-28T14:38:55.063 に答える
0

そうです、それは長い道のりです。「簡単」を求めるならBASICにこだわれ!あなたは進歩しています。「.bss」ではなく「.data」に2つの数字がありますが、それらはまだ「db」であると思います。加算に ax を使用すると、16 ビット (「ワード」または 2 バイト) が使用されます。これは 1 つの数字を al に入れ、2 番目の数字を ah に入れます - あなたが望むものではありません! 加算に al を使用するか、2 つの数値 (および結果!) を「db」ではなく「dw」にします。「結果を表示する」は難しい部分であり、255 より大きい数値を表示できることを除けば、おそらくバイトよりも単語を実行するほうが簡単です。誰かが「結果を表示する」ルーチンを投稿しました... Masm のマクロとして、しかし、 Nasm で動作するようにコードを変更できるはずです。おそらくマクロは必要ありません-それ' 使用するたびに同じコードを複製します。サブルーチンの方が良いでしょうが、それを行う方法がわからない場合は、それを「インライン」に配置してください。(今のところ) 1 回しか実行していません。引き続き問題が発生する場合は、最新のコードを投稿してください...

最高、フランク http://www.nasm.us

于 2012-08-29T23:21:20.657 に答える