我在PIC24上用C语言定义了一个变量
假设变量的名称(在C文件中)是The_Number_Of_Bytes
在PIC24 C代码中,它的定义如下.
unsigned long The_Number_Of_Bytes=0; // number of bytes in buffer当一个名为DATABUF01的字节数组将包含The_Number_Of_Bytes字节(对于隐含的冗余表示抱歉)时,我将被调用,并且我需要确保准确地执行那么多字节,然后停止。
我很有信心,这个数字将少于65535,所以为什么它是一个未签署的长是其他的讨论。现在,我想知道,哪个是高阶词,哪个是低阶词?(就这一点而言,long是PIC24 C中的32位数字吗?)
在这个例子中,有人能告诉我W2和W3中会有什么吗?
Mov.W #_The_Number_Of_Bytes, W1 ;From the dispatcher
Mov.W [W1++], W2 ;My question: Hi Order or Low Order ?
Mov.W [W1], W3 ;My question: Hi Order or Low ?
Mov.W #_DATABUF01, W4 ;The Start
Mov.B [W4++], W5 ;First byte...
: ;Whatever
: ;Whatever
: ;Whatever有谁能确认或纠正我对未签名长int的Hi / Low order的看法?
编辑批注请求此。可以回答这个问题(评论是我的)
请求的注释,大小似乎是4个字节,从这个.
45: unsigned long i=0;
0AB6A B80060 mul.uu 0x0000,#0,0x0000 ;make a zero
0AB6C 980710 mov.w 0x0000,[0x001c+2] ;no clue which word
0AB6E 980721 mov.w 0x0002,[0x001c+4] ;aha, if I made it 1 or 2, I'd know
46: unsigned int Fischer;
47:
48: Fischer = sizeof(i);
0AB70 200040 mov.w #0x4,0x0000 ;So it must be 4
0AB72 780F00 mov.w 0x0000,[0x001c] ;okay, it's a 4 byte number
49: 发布于 2014-08-24 16:20:54
您还可以查看程序的程序集,以便了解他们的编译器是如何实现的.例如:
int main(int argc, char** argv)
{
long i = 56;
long j = i;
return 0;
}变成..。( xc16-gcc -S main.c )
.file "/Users/grady/MPLABXProjects/testpic24.X/main.c"
.section .text,code
.align 2
.global _main ; export
.type _main,@function
_main:
.set ___PA___,1
lnk #12
mov w0,[w14+8]
mov w1,[w14+10]
mov #56,w4
mov #0,w5
mov.d w4,[w14]
mov.d [w14],w4
mov w4,[w14+4]
mov w5,[w14+6]
clr w4
mov w4,w0
ulnk
return
.set ___PA___,0
.section __c30_signature, info, data
.word 0x0001
.word 0x0000
.word 0x0000
; MCHP configuration words
.set ___PA___,0
.endhttps://stackoverflow.com/questions/15508199
复制相似问题