2012-08-28 87 views
1

我想添加兩個數字num1B和num2B並將結果中存儲的數字,最終顯示結果。彙編:添加兩個數字

但是,當我啓動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 

謝謝

回答

3

你需要改變你的.bss部分.data部分。 .bss部分用於未初始化的數據,而.data部分用於初始化數據。這就是爲什麼你不能在.bss部分使用dbdw等等。相反,您可以將它們放在.data部分。同樣,您可以使用resbresw等等.bss部分,但不在.data部分。

總之,.data用於初始化數據,而.bss用於未初始化的數據。

+0

這些好解釋好,謝謝:-) 3級的消息消失,但它仍然沒有:-(工作 – user1497451

+0

你是如何運行這個的?是否有人將'DS'寄存器設置爲.data段(提示!)? –

+0

使用dosbox 0.74但我有很多隨機符號:-( – user1497451

0

你是對的,這是一條漫長的道路。如果你想「簡單」,堅持BASIC!你正在取得進展。你有兩個數字在「.data」中,而不是「.bss」,但我認爲他們仍然是「db」。當您使用ax進行添加時,它使用16位 - 一個「字」或兩個字節。這將一個數字放在al中,第二個數字放在ah中 - 不是你想要的!或者使用al進行加法運算,或者使用兩個數字(和結果!)「dw」而不是「db」。 「顯示結果」是困難的部分,做單詞可能比字節更容易,除了讓你顯示大於255的數字。有人剛剛發佈了「顯示結果」例程......作爲Masm的宏,但是你應該能夠修改代碼在Nasm中工作。你可能不需要一個宏 - 它會在你每次使用它時複製相同的代碼。一個子程序會更好,但是如果你不知道如何做到這一點,只需將它放在「一致」的位置 - 你只能做一次(現在)。如果你仍然有問題,發佈一些較新的代碼......

最佳, 弗蘭克 http://www.nasm.us