我对asm 一点不懂,但目前项目在启动代码中调用几句asm代码。
领导说是 c中的ints_off() 调用asm中的 _ints_off ,对吗?
能否再简单点说明 asm的语句是什么?
急于回复领导 万分感谢!
/////////////////////// C /////////////////////////////
/*
* μC/OS for SH7043 translation
*
* - Management of interrupt level -
*/
void ints_off(void); c程序中没有 函数体
void ints_on(void);
extern long interrupt_level;
void set_interrupt_level(long level)
{
ints_off(); 此处调用是调用 asm 中的 _ints_off 吗?
if(level > 15) level = 15; /* simple error checking */
interrupt_level = level<<4; /* shift into position */
ints_on();
}
/////////////////////// C /////////////////////////////
/////////////////////// asm /////////////////////////////
;
; μC/OS for SH7043 translation
;
; - Management of interrupt disable/enable -
;
.global _ints_off
.global _ints_on
.text
.align 2
_ints_off: 我被c中的ints_off() 调用是真的吗 ??????
;IF 1 @sh2 DN 2000/09/05
stc.l sr,@-r15
mov.l r0,@-r15
stc sr,r0
or #H00F0,r0 ; 2001.04.19 E0->F0 Upd. by koketsu
ldc r0,sr
mov.l @r15+,r0
;ELSE @sh2 DN 2000/09/05
; mov.l __offmask,r1
; mov.l __lvl,r3 ; get pointer to int level
; stc sr,r0 ; do stc and ldc for reentrancy
; ldc r1,sr ; ints are now off
; and r0,r1 ; mask off other bits
; mov.l r1,@r3 ; save the int level
;ENDIF @sh2 DN 2000/09/05
rts
nop
/////////////////////// asm /////////////////////////////
asm不太懂
感觉应该是的
c中的ints_off被编译处理成_inits_off
然后asm中
global _ints_off
这样asm编译后的obj中就包含_ints_off
这样c的obj和asm的obj在link时c中的_ints_off就会被链结成asm中的_inits_off
vc++6.0 CRT里有很多asm源程序的例子哟!
DING