谁能帮我用汇编写一个save and restore routine,用无锁ring bufferr,不要用堆栈

谁能帮我用汇编写一个save and restore routine,用ring buffer,不要用堆栈_百度知道
谁能帮我用汇编写一个save and restore routine,用ring buffer,不要用堆栈
简单的概念就行,不要求能运行
Buff_Array[k] &always@(posedge clock)begin
if (reset == 1)
for (k = 0;= Data_in, cell_1, Data_in: 0];= buff_size -1; integer kmodule Circular_Buffer_1 (cell_3; parameter word_size = 8; wire cell_3 = Buff_Array[3]: 0] Buff_Array [buff_size -1,reg [word_size -1: 0] Data_in, k = k+1)
Buff _ Array[k] & input [word_size -1, cell_0;
for (k = 1; k &lt, cell_0 = Buff_Array[0], cell_1;= 0: 0] cell_3, cell_0, cell_2;
Buff_Array[0] & k = k+1)&#92, cell_2 = Buff_Array[2]; output [word_size -1; parameter buff_size = 4;= Buff_Array[k-1], reset); k &= buff_size -1; wire cell_1 = Buff_Array[1], cell_2
其他类似问题
为您推荐:
其他2条回答
mips还是ppc用那个cpu的汇编语言,arm,x86
不懂你的题目 说详细点
等待您来回答
下载知道APP
随时随地咨询
出门在外也不愁如何在Visual&C++中写X64的汇编函数
翻译自http://www.sciencezero.org/index.php?title=How_to_write_x64_assembly_functions_in_Visual_C++#Debugging
2.1 x64 寄存器
8128XMM:xmm8 & xmm15
x863264rax, rbx, rcx, rdx, rsi, rdi, rbp, rsp
643csfsgsfsgs
32eip64rip
2.2 不再存在的指令
BCDAAA, AAD, AAM, AAS, DAA, DAS
PUSHADPOPAD
PUSH DSPOP DSFSGS
2.3 新指令
32MOV64MOVZXD
2. 128GUIDxmmSSE
2.4 其他不同
32x64322GB
x64x64 ABI
X64x86fastcall
3.1 整数,指针和引用参数
4rcxrdxr8r9
3.2 浮点数(FP)参数
x87register stack.
3.3 返回值
3.4 易变性和非易变性
rbx, rbp, rdi, rsi, r12, r13, r14, r15, xmm6 -
register stack.
rax, rcx, rdx, r8, r9, r10, and r11
xmm0 - xmm5
3.6 堆栈清理
int r = calc (1, 2, 3, 4,
mov&&&&&&&
dword ptr [rsp+20h],5
mov&&&&&&&
mov&&&&&&&
mov&&&&&&&
mov&&&&&&&
call&&&&&&&
&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&
1234ecxedxr8dr9d5rsp+20h20h46420h32
... code goes here
Vistual Studio
6.1 设置Vistual Studio的汇编环境
6.1.1 Yasm
6.1.2 yasm
6.1.3 VC++asm
AsmHighlighter
6.2 添加.asm后缀文件
Add | Add New
asmtabbuild with Yasm
6.3 准备函数声明
(int a, int b, int c, char d, char* e, float fa, float
C++extern “C”C++C
extern "C" {
int calc (int a, int b, int c, char d, char* e, float fa, float
6.4 获得产生的调用代码
char e (5);
int r = calc (1, 2, 3, 4,
&e, 1.0, 2.0);
mov&&&&&&&
[rsp+44h],5
movss&&&&&&
xmm0,dword ptr [__real@]
movss&&&&&&
dword ptr [rsp+30h],xmm0
movss&&&&&&
xmm0,dword ptr [__real@3f800000]
movss&&&&&&
dword ptr [rsp+28h],xmm0
lea&&&&&&&&
rax,[rsp+44h]
mov&&&&&&&&
qword ptr [rsp+20h],rax
mov&&&&&&&&
r8d,3&&&&&&&&&&&&&&&&&&&&
mov&&&&&&&&
mov&&&&&&&&
call&&&&&&&
6.5 用汇编写函数
C++multiple defined symbols
objectPE32+Yasm
PROC_FRAME.pdata.xdata
PROC_FRAME&&&&&
push rbpREG prefix64
0x48&&&&&&&&&&&
; emit a REX prefix to enable hot-patching
prologunwindprologunwind data
push&&&&&&&
rbp&&&&&&&&&&&&
; save prospective frame pointer
[pushreg&&&
rbp]&&&&&&&&&&&
; create unwind data for this rbp register push
sub&&&&&&&&
rsp,0x40&&&&&&&
; allocate stack space
[allocstack 0x40]&&&&&&&&&&
; create unwind data for this stack allocation
lea&&&&&&&&
rbp,[rsp+0x20]& ; assign the frame
pointer with a bias of 32
[setframe&&
rbp,0x20]&&&&&&
; create unwind data for a frame register in rbp
movdqa&&&&&
[rbp],xmm7&&&&&
; save a non-volatile XMM register
[savexmm128 xmm7, 0x20]
create unwind data for an XMM register save
mov&&&&&&&&
[rbp+0x18],rsi& ; save rsi
[savereg&&&
rsi,0x38]&&&&&&
; create unwind data for a save of rsi
mov&&&&&&&&
[rsp+0x10],rdi& ; save rdi
[savereg&&&
rdi, 0x10]&&&&&
; create unwind data for a save of rdi
[endprolog]
...函数在此.
movdqa&&&&&
xmm7,[rbp]&&&&&
; restore the registers that weren't saved
mov&&&&&&&&
rsi,[rbp+0x18]& ; this is
not part of the
mov&&&&&&&&
rdi,[rbp-0x10]& ; official
lea&&&&&&&&
rsp,[rbp-0x20]& ; This is the official
pop&&&&&&&&
PROC_FRAME
ENDPROC_FRAME
已投稿到:
以上网友发言只代表其个人观点,不代表新浪网的观点或立场。您所在位置: &
&nbsp&&nbsp&nbsp&&nbsp
《IBM-PC汇编语言程序设计(第二版)答案》.pdf105页
本文档一共被下载:
次 ,您可全文免费在线阅读后下载本文档。
文档加载中...广告还剩秒
需要金币:168 &&
《IBM-PC汇编语言程序设计(第二版)答案》.pdf
你可能关注的文档:
··········
··········
1.1 用降幂法和除法将下列十进制数转换为二进制数和十六进制数: 1 369 2 5 4 32767 答: 1
369 B 171H 2
10000 1XXXXXXXXXX000B 95 1XXXXXXXXXX1B FFFH 4
32767 1XXXXXXXXXX1111B 7FFFH
1.2 将下列二进制数转换为十六进制数和十进制数: 1
1XXXXXXXXXX111111 答: 1
1XXXXXXXXXX11111B FFFFH 111111B FFH 255
1.3 将下列十六进制数转换为二进制数和十进制数: 1 FA 2 5B 3 FFFE 4 1234 答: 1
FFFEH 1XXXXXXXXXX1 4
1234H 1XXXXXXXXXX00B 4660
1.4 完成下列十六进制数的运算,并转换为十进制数进行校核: 1 3A+B7 2 1234+AF 3 ABCD-FE 4 7AB×6F 答: 1
3A+B7H F1H 241 2
1234+AFH 12E3H 4835 3
ABCD-FEH AACFH AB×6FH 3
1.5 下列各数均为十进制数,请用8位二进制补码计算下列各题,并用十六进制数表示其运 算结果。 1
6 -85- -76 答: 1
-85 +76 F7H;CF 0;OF 0 2 85+ -76
H;CF 1;OF 0 3
85-76 B-B B+B B 09H; CF 0;OF 0 4
01B 0A1H; CF 0;OF 1 5
-85 -76 B-B B+B B 5FH; CF 0;OF 1 6
B-B B+B F7H; CF 0;OF 0
1.6 下列各数为十六进制表示的8位二进制数,请说明当它们分别被看作是用补码表示的带 符号数或无符号数时,它们所表示的十进制数是什么? 1 D8 2 FF 答: 1
D8H表示的带符号数为 -40,D8H表示的无符号数为216; 2
FFH 表示的带符号数为 -1, FFH 表示的无符号数为255。
1.7 下列各数均为用十六进制表示的8位二进制
正在加载中,请稍后...}

我要回帖

更多关于 linux ring buffer 的文章

更多推荐

版权声明:文章内容来源于网络,版权归原作者所有,如有侵权请点击这里与我们联系,我们将及时删除。

点击添加站长微信