汇编:添加两个数字

时间:2012-08-28 14:34:23

标签: assembly x86 add nasm mov

我想添加两个数字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

谢谢

2 个答案:

答案 0 :(得分:3)

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

简而言之,.data用于初始化数据,.bss用于未初始化数据。

答案 1 :(得分:0)

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

最佳, 坦率 http://www.nasm.us