我試圖存儲XMM寄存器到一定的位置,如地址線4534342.XMM寄存器存儲
例子:
我做了什麼?
我知道XMM寄存器包含128位值。所以,我的程序已經產生了分配的16字節的內存。另外,由於寄存器被對齊的數據,我已分配的31個字節,然後發現在其內的對齊的地址。這應該防止拋出任何異常。
什麼我試圖在視覺上做什麼?
Mem Adr | Contents (binary)
4534342 | 0000 0000 0000 0000 ; I want to pass in address 4534342 and the
4534346 | 0000 0000 0000 0000 ; the program inline-assembly will store it
4534348 | 0000 0000 0000 0000 ; its contents straight down to address 45-
4534350 | 0000 0000 0000 0000 ; 34350
4534352 | 0000 0000 0000 0000
4534354 | 0000 0000 0000 0000
4534356 | 0000 0000 0000 0000
4534358 | 0000 0000 0000 0000
設置
cyg_uint8 *start_value; //pointer to the first value of the allocated block
cyg_uint32 end_address; //aligned address location value
cyg_uint32 *aligned_value; //pointer to the value at the end_address
start_value = xmm_container; //get the pointer to the allocated block
end_address = (((unsigned int) start_value) + 0x0000001f) & 0xFFFFFFF8; //find aligned memory
aligned_value = ((cyg_uint32*)end_address); //create a pointer to get the first value of the block
調試語句之前組裝調用,以確保功能
printf("aligned_value: %d\n", (cyg_uint32) aligned_value); printf("*aligned_value: %d\n", *aligned_value);
大會呼叫
個__asm__("movdqa %%xmm0, %0\n" : "=m"(*aligned_value)); //assembly call
調試語句組件調用後,以確保功能
printf("aligned_value: %d\n", (cyg_uint32) aligned_value);
printf("*aligned_value: %d\n", *aligned_value);
從printf的[FAILURE]輸出
aligned_value:1661836 //看起來不錯!
* aligned_value:0 //看起來不錯!
aligned_value:-1 //看起來錯:(
//然後程序卡住
基本上,我在做正確這個過程爲什麼你認爲它陷入
?感謝您的時間和精力。
我明白你的意思,但可惜還是用-1 :( – bluejamesbond 2012-07-11 21:26:39
相同的輸出我道歉凍結,我實習生嘗試學習這些東西,但我還沒有學會通過工具,所以這就是爲什麼我問。只是fyi – bluejamesbond 2012-07-11 21:29:54
然後學習工具。今天。 – 2012-07-11 21:38:34