我想添加两个数字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
谢谢
答案 0 :(得分:3)
您需要将.bss
部分更改为.data
部分。 .bss
部分用于未初始化的数据,而.data
部分用于初始化数据。这就是为什么你不能在db
部分中使用dw
,.bss
等等。相反,您可以将它们放在.data
部分中。同样,您可以使用resb
。 resw
部分中的.bss
等等,但不在.data
部分。
简而言之,.data
用于初始化数据,.bss
用于未初始化数据。
答案 1 :(得分:0)
你是对的,这是一条漫长的道路。如果你想“轻松”,坚持BASIC!你正在取得进步。你在“.data”中得到了两个数字,而不是“.bss”,但我认为它们仍然是“db”。当你使用ax进行加法时,它使用16位 - 一个“字”或两个字节。这把一个数字放在al和第二个数字啊 - 不是你想要的!要么使用al进行添加,要么使用两个数字(和结果!)“dw”而不是“db”。 “显示结果”是困难的部分,做单词可能比字节容易,除了让你显示大于255的数字。有人刚刚发布了“显示结果”例程...作为Masm的宏,但是你应该能够修改代码在Nasm中工作。您可能不需要宏 - 每次使用它时它都会复制相同的代码。一个子程序会更好,但是如果你不知道怎么做就把它“排成一行” - 你只做一次(现在)。如果您仍然遇到问题,请发布一些更新的代码...
最佳, 坦率 http://www.nasm.us