1基础知识
ØVxworks shell命令
i
b&bh&bdall
c
ti&tt
cret:执行到子函数返回,返回后的结果可以在r3寄存器里看到。先b断住子函数,然后用cret taskid,查看r3就知道了子函数返回的结果。
e l1_print_bit_number,2,0,printf,”abcd\n”:当执行到l1_print_bit_number函数时,执行printf(“abcd\n”)。
b l1_print_bit_number,0,2,0:当执行l1_print_bit_number函数2次后,即第3次断点生效。
Ø基本指令
stwu r1,-48(r1) :1) [r1-48]<-r1; 2) r1= r1-48
sth r0,8(r31): lower 16bits of r0, save to [r31+8]
lwz r9,8(r31): load [r31+8]'s 32bits to r9
mr r31, r1: r1->r31 migrate register
mtlr r0: migrate r0 to lr register
Ø条件指令
CR(Condition Register)一共32位,从低位到高位被分成 CR0-CR7八段,每段四位。每个四位的CRn从低到高分别是:LT(小于标志)、GT(大于)、EQ(等于)和SO(溢出)比较指令或条件跳转指令均可指明具体操作哪个 CRn,由此可以同时判断多个条件。整数计算默认更改CR0,浮点数计算默认更改CR1。
指令的语法格式:
bcctr BO, BI(LK=0)
bcctrl BO, BI(LK=1)
BO字段常用操作码:
BO=00100 如果条件成立(CR[BI]==0)则发生跳转
BO=01100 如果条件不成立(CR[BI]==1)则发生跳转
BO=10100 直接跳转
如果LK=1,则转移指令下一条指令的有效地址存放到连接寄存器。
如果减量计数器(BO[2]=0),指令格式无效,则转移到目标地址。
bcctrl 0x14,0:1)跳转到ctr(0x15a083c)处。2)lr =(cur pc + 4), 其中0x14 = 0001 0100
2汇编代码
Ø真实环境里的代码分析
-> l l1_print_comment_line,200
l1_print_comment_line:
0x9a403c 9421ffd0 stwu r1,-48(r1) // 1) [r1-48]<-r1; 2) r1= r1-48
0x9a4040 7c0802a6 mfspr r0,LR
0x9a4044 90010034 stw r0,52(r1)❶ //存储调用者的LR值,后面的❷处执行 后,r0就是这里存储进去的值。
0x9a4048 93e1002c stw r31,44(r1)
0x9a404c 7c3f0b78 or r31,r1,r1// r31=r1
0x9a4050 907f0018 stw r3,24(r31)
0x9a4054 38000000 li r0,0x0 # 0
0x9a4058 901f0008 stw r0,8(r31)
0x9a405c 38000000 li r0,0x0 # 0
0x9a4060 901f0008 stw r0,8(r31)
0x9a4064 4800002c b 0x9a4090 # 0x009a4090
0x9a4068 3d200205 lis r9,0x205 # 517
0x9a406c 38691f60 addi r3,r9,0x1f60 # 8032
0x9a4070 3d20015a lis r9,0x15a # 346
0x9a4074 3929083c addi r9,r9,0x83c # 2108
0x9a4078 7d2903a6 mtspr CTR,r9
0x9a407c 4cc63182 crxor crb6,crb6,crb6
0x9a4080 4e800421 bcctrl 0x14,0 //1)跳转到ctr(0x15a083c)处。2)lr =(0x9a4080+4) =0x9a4084
0x9a4084 813f0008 lwz r9,8(r31)
0x9a4088 38090001 addi r0,r9,0x1 # 1
0x9a408c 901f0008 stw r0,8(r31)
0x9a4090 801f0008 lwz r0,8(r31)
0x9a4094 813f0018 lwz r9,24(r31)
0x9a4098 7f804800 cmp crf7,0,r0,r9
0x9a409c 419cffcc bc 0xc,28, 0x9a4068 # 0x009a4068
0x9a40a0 3d200205 lis r9,0x205 # 517
0x9a40a4 38691f64 addi r3,r9,0x1f64 # 8036
0x9a40a8 3d20015a lis r9,0x15a # 346
0x9a40ac 3929083c addi r9,r9,0x83c # 2108
0x9a40b0 7d2903a6 mtspr CTR,r9
0x9a40b4 4cc63182 crxor crb6,crb6,crb6
0x9a40b8 4e800421 bcctrl 0x14,0//1)跳转到ctr(0x15a083c)处。2)lr =(0x9a40b8+4) =0x9a40bc
0x9a40bc 81610000 lwz r11,0(r1) ❷
0x9a40c0 800b0004 lwz r0,4(r11) //r0 =调用者调用地方的下一条指令地址,就是❶处存储的值。
0x9a40c4 7c0803a6 mtspr LR,r0 //1) lr =r0
0x9a40c8 83ebfffc lwz r31,-4(r11)
0x9a40cc 7d615b78 or r1,r11,r11
0x9a40d0 4e800020 blr //返回到 lr 寄存器里的地址
l1_print_spaces:
0x9a40d4 9421ffd0 stwu r1,-48(r1)
0x9a40d8 7c0802a6 mfspr r0,LR
0x9a40dc 90010034 stw r0,52(r1)
0x9a40e0 93e1002c stw r31,44(r1)
0x9a40e4 7c3f0b78 or r31,r1,r1
0x9a40e8 907f0018 stw r3,24(r31)
0x9a40ec 38000000 li r0,0x0 # 0
0x9a40f0 901f0008 stw r0,8(r31)
0x9a40f4 38000000 li r0,0x0 # 0
0x9a40f8 901f0008 stw r0,8(r31)
0x9a40fc 4800002c b 0x9a4128 # 0x009a4128
0x9a4100 3d200205 lis r9,0x205 # 517
0x9a4104 38691f68 addi r3,r9,0x1f68 # 8040
0x9a4108 3d20015a lis r9,0x15a # 346
0x9a410c 3929083c addi r9,r9,0x83c # 2108
0x9a4110 7d2903a6 mtspr CTR,r9
0x9a4114 4cc63182 crxor crb6,crb6,crb6
0x9a4118 4e800421 bcctrl 0x14,0
0x9a411c 813f0008 lwz r9,8(r31)
0x9a4120 38090001 addi r0,r9,0x1 # 1
0x9a4124 901f0008 stw r0,8(r31)
0x9a4128 801f0008 lwz r0,8(r31)
0x9a412c 813f0018 lwz r9,24(r31)
0x9a4130 7f804800 cmp crf7,0,r0,r9
0x9a4134 419cffcc bc 0xc,28, 0x9a4100 # 0x009a4100
0x9a4138 81610000 lwz r11,0(r1)
0x9a413c 800b0004 lwz r0,4(r11)
0x9a4140 7c0803a6 mtspr LR,r0
0x9a4144 83ebfffc lwz r31,-4(r11)
0x9a4148 7d615b78 or r1,r11,r11
0x9a414c 4e800020 blr
l1_print_bit_number:
0x9a4150 9421ffd0 stwu r1,-48(r1)
0x9a4154 7c0802a6 mfspr r0,LR
0x9a4158 90010034 stw r0,52(r1)
0x9a415c 93e1002c stw r31,44(r1)
0x9a4160 7c3f0b78 or r31,r1,r1
0x9a4164 907f0018 stw r3,24(r31)
0x9a4168 909f001c stw r4,28(r31)
0x9a416c 38000000 li r0,0x0 # 0
0x9a4170 901f0008 stw r0,8(r31)
0x9a4174 801f0018 lwz r0,24(r31)
0x9a4178 2f800000 cmpi crf7,0,r0,0x0 # 0
0x9a417c 409d007c bc 0x4,29, 0x9a41f8 # 0x009a41f8
0x9a4180 813f0018 lwz r9,24(r31)
0x9a4184 3809ffff addi r0,r9,0xffff # -1
0x9a4188 901f0008 stw r0,8(r31)
0x9a418c 48000044 b 0x9a41d0 # 0x009a41d0
0x9a4190 3d200205 lis r9,0x205 # 517
0x9a4194 38691f6c addi r3,r9,0x1f6c # 8044
0x9a4198 809f0008 lwz r4,8(r31)
0x9a419c 3d20015a lis r9,0x15a # 346
0x9a41a0 3929083c addi r9,r9,0x83c # 2108
0x9a41a4 7d2903a6 mtspr CTR,r9
0x9a41a8 4cc63182 crxor crb6,crb6,crb6
0x9a41ac 4e800421 bcctrl 0x14,0
0x9a41b0 807f001c lwz r3,28(r31)
0x9a41b4 3d20009a lis r9,0x9a # 154
0x9a41b8 392940d4 addi r9,r9,0x40d4 # 16596
0x9a41bc 7d2903a6 mtspr CTR,r9
0x9a41c0 4e800421 bcctrl 0x14,0
0x9a41c4 813f0008 lwz r9,8(r31)
0x9a41c8 3809ffff addi