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

谢谢

4

2 回答 2

4

您需要将您的.bss部分更改为.data部分。该.bss部分用于未初始化的数据,而该.data部分用于已初始化的数据。这就是为什么你不能在节中使用db,dw等等。.bss相反,您可以将它们放在.data部分中。同样,您可以使用resb. resw以此类推,.bss但不在.data部分中。

简而言之,.data是针对已初始化的数据,.bss是针对未初始化的数据。

于 2012-08-28T14:38:55.063 回答
0

你是对的,这是一条漫长的道路。如果您想要“简单”,请坚持使用 BASIC!你正在取得进展。您在“.data”中有两个数字,而不是“.bss”,但我认为它们仍然是“db”。当您使用 ax 进行加法时,它使用 16 位 - 一个“字”或两个字节。这会将一个数字放在 al 中,将第二个数字放在 ah 中 - 这不是您想要的!要么使用 al 进行加法,要么将你的两个数字(和结果!)“dw”而不是“db”。“显示结果”是最难的部分,除了让你显示大于 255 的数字之外,做文字可能比字节容易。有人刚刚发布了一个“显示结果”例程......作为 Masm 的宏,但是你应该能够修改代码以在 Nasm 中工作。你可能不想要一个宏 - 它' 每次使用时都会复制相同的代码。一个子程序会更好,但如果你不知道怎么做,那就把它“排成一行”——你只做一次(现在)。如果您仍然遇到问题,请发布一些更新的代码...

最好的,弗兰克 http://www.nasm.us

于 2012-08-29T23:21:20.657 回答