2013-03-15 111 views
0

我正在嘗試編寫一個NASM程序,它可以翻轉矩陣並彙總所有數字。在NASM中增加一個變量

我一直堅持過去兩個小時試圖讓增量操作工作。

我試圖

mov DX, 0 
inc DX 

mov DX, DX+1 

mov CX, counter ; a variable initialized to 0 
inc CX 

多,但沒有什麼工作。

請幫幫我!

更新

具體而言,我發現了錯誤:

/usr/bin/ld: warning: i386 architecture of input file `a3.o' is incompatible with i386:x86-64 output 
a3.o: In function `main': 
a3.asm:(.text+0x18): relocation truncated to fit: R_386_16 against `.bss' 
collect2: ld returned 1 exit status 
+0

看來這個問題與inc操作無關,而是與你鏈接的一些「壞」文件(即a3.o)能分享a3.asm的來源嗎? – 2013-03-15 20:29:11

+0

除非'DX'是在源代碼中聲明的編譯時常量,否則不能真正做'mov DX,DX + 1'。這不是一種高級語言:您需要在運行時使用CPU指令來處理所有事情。另外,在x86上清零寄存器通常是通過將它與自己異或來完成的。 :) – 2013-03-15 22:23:37

回答

2

這是一個32比特/ 64比特不匹配。

對於32個比特可執行DO:

nasm -f elf32 -o main.o main.asm 
ld -m elf_i386 -o main main.o 

對於64個比特可執行DO:

gcc -m32 -o main main.o  # 32 bits 
gcc [-m64] -o main main.o # 64 bits 

的:

nasm -f elf64 -o main.o main.asm 
ld [-m elf_x86_64] -o main main.o 

爲了用gcc鏈路與替換第二命令方括號內的東西並不是絕對必要的。

+0

+1進行徹底分析。 – 2013-03-15 21:36:24

+0

我使用gcc,你沒有提到。與'ld'相比'gcc'是什麼? – CodyBugstein 2013-03-15 21:43:17

+0

+1,已接受。謝謝!你能簡單地解釋'nasm -f ...'這一行和'ld -m elf _....'行在做什麼嗎? – CodyBugstein 2013-03-17 02:22:07