回答
int matrix[50][100], a, b, c;
matrix[a][b] = c;
它創造的100 int
50個陣列。然後使用值c
初始化a
th數組的b
個整數。但您應初始化a
,b
和c
。否則,由於它們具有自動存儲持續時間,因此它們的值將不確定。
int matrix[50][100];
int a = 2;
int b = 3;
int c = 4;
matrix[a][b] = c;
這是我的gcc
(4.4.4)如何接通代碼插入組件(AT & T語法):
movl $2, -4(%ebp) # a = 2
movl $3, -8(%ebp) # b = 3
movl $4, -12(%ebp) # c = 4
movl -4(%ebp), %edx # %edx = a = 2
movl -8(%ebp), %eax # %eax = b = 3
imull $100, %edx, %edx # %edx = 100 * a = 100 * 2 = 200
addl %eax, %edx # %edx = %edx + b = 200 + 3 = 203
# Formula: %edx = 100 * a + b
movl -12(%ebp), %eax # %eax = c = 4
movl %eax, -20012(%ebp,%edx,4) # Access to 203-th element (each of these
# are 4 bytes, ie. sizeof(int) on my
# computer) and put %eax = 4 in it.
在C中,陣列被確實存儲在row-major order。也就是說,在源代碼中編寫matrix[a][b]
的時候,你將獲得:
offset = row*NUMCOLS + column = a*100 + b
這就是彙編代碼顯示。
在asm代碼中的一些意見將是很好:) – 2013-03-03 17:31:44
@GrijeshChauhan:對。我會更新它。 – md5 2013-03-03 17:37:23
爲了進一步提高你可以添加信息矩陣存儲在列主要這就是爲什麼有效地址計算爲'%edx = 100 * a = 100 * 2 = 200' – 2013-03-03 17:49:08
- 1. 這個C代碼是做什麼的?
- 2. 這個c/++代碼是做什麼的?
- 3. 這個C代碼是做什麼的?
- 4. 這段C++代碼是做什麼的?
- 5. 這段C代碼是做什麼的?
- 6. 這行C#代碼是做什麼的?
- 7. 這是什麼C#代碼做(列表)?
- 8. 這個clojure代碼是做什麼的?
- 9. 這個Groovy代碼是做什麼的?
- 10. 這個jquery代碼是做什麼的?
- 11. 這個java代碼是做什麼的?
- 12. 這個Scheme代碼是做什麼的?
- 13. 這個rails代碼是做什麼的?
- 14. 這個xkcd代碼是做什麼的?
- 15. 這個VHDL代碼是做什麼的?
- 16. 這個JS代碼是做什麼的?
- 17. 這個python代碼是做什麼的?
- 18. 這個Arduino代碼是做什麼的?
- 19. 這個javascript代碼是做什麼的?
- 20. 這個C++代碼段做了什麼?
- 21. 矩陣迭代:這段代碼的功能是什麼?
- 22. 什麼是C#代碼做:
- 23. 這個vb代碼的c#是什麼?
- 24. 這個C指針代碼是做什麼的?
- 25. 這個Objective-C字典代碼是做什麼的?
- 26. NSString另外這個Objective-c代碼是做什麼的?
- 27. 這是什麼行代碼是做
- 28. 這段Javascript代碼是做什麼的?
- 29. 這行PHP代碼是做什麼的?
- 30. 這段java代碼是做什麼的?
沒什麼好。播放未定義的值。 – Andrey 2013-03-03 17:25:13
試試吧,你就會知道。 – Maroun 2013-03-03 17:25:52
如果你想把它翻譯成彙編程序 - 選擇一個編譯器並指示它打印彙編代替生成二進制文件。 – Andrey 2013-03-03 17:26:01