📄 srec.lst
字号:
206 0110 21180000 move $3,$0 207 97:/mnt/hgfs/boot/booter/source/applications/booter/srec.c **** }
208 .loc 1 97 0 209 0114 1800BF8F lw $31,24($sp) 210 0118 1400B18F lw $17,20($sp) 211 011c 1000B08F lw $16,16($sp) 212 0120 21106000 move $2,$3 213 0124 0800E003 j $31 214 0128 2000BD27 addiu $sp,$sp,32 215 216 $L13: 217 .loc 1 92 0 218 012c 0000000C jal charToInt 219 0130 00000482 lb $4,%lo(ch.0)($16) 220 221 0134 00000326 addiu $3,$16,%lo(ch.0) 222 0138 01006480 lb $4,1($3) 223 013c 0000000C jal charToInt 224 0140 00810200 sll $16,$2,4 225 226 0144 25800202 or $16,$16,$2 227 0148 000030A2 sb $16,0($17) 228 .loc 1 97 0 229 014c 1800BF8F lw $31,24($sp) 230 0150 1400B18F lw $17,20($sp) 231 0154 1000B08F lw $16,16($sp) 232 .loc 1 93 0 233 0158 01000324 li $3,1 # 0x1 234 .loc 1 97 0 235 015c 21106000 move $2,$3 236 0160 0800E003 j $31 237 0164 2000BD27 addiu $sp,$sp,32 238 239 .set macro 240 .set reorder 241 $LFE5:GAS LISTING /tmp/ccHaeCoR.s page 7 242 .end getSpair 243 .align 2 244 .globl isSrec 245 .ent isSrec 246 .type isSrec, @function 247 isSrec: 248 $LFB6: 98:/mnt/hgfs/boot/booter/source/applications/booter/srec.c ****
99:/mnt/hgfs/boot/booter/source/applications/booter/srec.c **** int isSrec()
100:/mnt/hgfs/boot/booter/source/applications/booter/srec.c **** {
249 .loc 1 100 0 250 .frame $sp,32,$31 # vars= 8, regs= 1/0, args= 16, gp= 0 251 .mask 0x80000000,-8 252 .fmask 0x00000000,0 253 .set noreorder 254 .set nomacro 255 256 0168 E0FFBD27 addiu $sp,$sp,-32 257 $LCFI13: 101:/mnt/hgfs/boot/booter/source/applications/booter/srec.c **** DPRINTF("\n");
102:/mnt/hgfs/boot/booter/source/applications/booter/srec.c **** char ch[2];
103:/mnt/hgfs/boot/booter/source/applications/booter/srec.c **** if(srecRead(&ch, 2))
258 .loc 1 103 0 259 016c 1000A427 addiu $4,$sp,16 260 .loc 1 100 0 261 0170 1800BFAF sw $31,24($sp) 262 $LCFI14: 263 .loc 1 103 0 264 0174 0000000C jal srecRead 265 0178 02000524 li $5,2 # 0x2 266 104:/mnt/hgfs/boot/booter/source/applications/booter/srec.c **** {
105:/mnt/hgfs/boot/booter/source/applications/booter/srec.c **** if(ch[0] == 'S' && ch[1] == '0')
106:/mnt/hgfs/boot/booter/source/applications/booter/srec.c **** {
107:/mnt/hgfs/boot/booter/source/applications/booter/srec.c **** eatLine();
108:/mnt/hgfs/boot/booter/source/applications/booter/srec.c **** return 1;
109:/mnt/hgfs/boot/booter/source/applications/booter/srec.c **** }
110:/mnt/hgfs/boot/booter/source/applications/booter/srec.c **** }
111:/mnt/hgfs/boot/booter/source/applications/booter/srec.c **** DPRINTF("FAILURE!\n");
112:/mnt/hgfs/boot/booter/source/applications/booter/srec.c **** return 0;
113:/mnt/hgfs/boot/booter/source/applications/booter/srec.c **** }
267 .loc 1 113 0 268 .loc 1 103 0 269 017c 06004010 beq $2,$0,$L18 270 0180 1800BF8F lw $31,24($sp) 271 272 .loc 1 105 0 273 0184 1000A383 lb $3,16($sp) 274 0188 53000224 li $2,83 # 0x53 275 018c 05006210 beq $3,$2,$L17 276 0190 1100A383 lb $3,17($sp) 277 278 .loc 1 113 0 279 0194 1800BF8F lw $31,24($sp) 280 $L18: 281 .loc 1 112 0 282 0198 21100000 move $2,$0GAS LISTING /tmp/ccHaeCoR.s page 8 283 .loc 1 113 0 284 019c 0800E003 j $31 285 01a0 2000BD27 addiu $sp,$sp,32 286 287 $L17: 288 .loc 1 105 0 289 01a4 30000224 li $2,48 # 0x30 290 .loc 1 113 0 291 .loc 1 105 0 292 01a8 FBFF6214 bne $3,$2,$L18 293 01ac 1800BF8F lw $31,24($sp) 294 295 .loc 1 107 0 296 01b0 0000000C jal eatLine 297 01b4 00000000 nop 298 299 .loc 1 113 0 300 01b8 1800BF8F lw $31,24($sp) 301 .loc 1 108 0 302 01bc 01000224 li $2,1 # 0x1 303 .loc 1 113 0 304 01c0 0800E003 j $31 305 01c4 2000BD27 addiu $sp,$sp,32 306 307 .set macro 308 .set reorder 309 $LFE6: 310 .end isSrec 311 .section .rodata.str1.4,"aMS",@progbits,1 312 .align 2 313 $LC0: 314 0000 0A .ascii "\n" 315 0001 4572726F .ascii "Error: S-record checksum error!\n\000" 315 723A2020 315 532D7265 315 636F7264 315 20636865 316 .text 317 .align 2 318 .globl readSrec 319 .ent readSrec 320 .type readSrec, @function 321 readSrec: 322 $LFB7: 114:/mnt/hgfs/boot/booter/source/applications/booter/srec.c ****
115:/mnt/hgfs/boot/booter/source/applications/booter/srec.c **** void* readSrec()
116:/mnt/hgfs/boot/booter/source/applications/booter/srec.c **** {
323 .loc 1 116 0 324 .frame $sp,48,$31 # vars= 8, regs= 6/0, args= 16, gp= 0 325 .mask 0x801f0000,-4 326 .fmask 0x00000000,0 327 .set noreorder 328 .set nomacro 329 330 01c8 D0FFBD27 addiu $sp,$sp,-48 331 $LCFI15: 332 01cc 2800B4AF sw $20,40($sp)GAS LISTING /tmp/ccHaeCoR.s page 9 333 $LCFI16: 334 01d0 2C00BFAF sw $31,44($sp) 335 $LCFI17: 336 01d4 2400B3AF sw $19,36($sp) 337 $LCFI18: 338 01d8 2000B2AF sw $18,32($sp) 339 $LCFI19: 340 01dc 1C00B1AF sw $17,28($sp) 341 $LCFI20: 342 01e0 1800B0AF sw $16,24($sp) 343 $LCFI21: 344 01e4 0000143C lui $20,%hi($LC0) 345 $L20: 117:/mnt/hgfs/boot/booter/source/applications/booter/srec.c **** int i;
118:/mnt/hgfs/boot/booter/source/applications/booter/srec.c **** char type, length, checksum, ch;
119:/mnt/hgfs/boot/booter/source/applications/booter/srec.c **** char* address;
120:/mnt/hgfs/boot/booter/source/applications/booter/srec.c ****
121:/mnt/hgfs/boot/booter/source/applications/booter/srec.c **** // printf("CH ADDR: %X\n", &ch);
122:/mnt/hgfs/boot/booter/source/applications/booter/srec.c **** while(1) //read s-records until return from inside loop
123:/mnt/hgfs/boot/booter/source/applications/booter/srec.c **** {
124:/mnt/hgfs/boot/booter/source/applications/booter/srec.c **** if(!getStype(&type))
346 .loc 1 124 0 347 01e8 0000000C jal getStype 348 01ec 1000A427 addiu $4,$sp,16 349 125:/mnt/hgfs/boot/booter/source/applications/booter/srec.c **** return (void*) 0;
126:/mnt/hgfs/boot/booter/source/applications/booter/srec.c ****
127:/mnt/hgfs/boot/booter/source/applications/booter/srec.c **** /* Get record length */
128:/mnt/hgfs/boot/booter/source/applications/booter/srec.c **** if(!getSpair(&length))
129:/mnt/hgfs/boot/booter/source/applications/booter/srec.c **** return (void*) 0;
130:/mnt/hgfs/boot/booter/source/applications/booter/srec.c ****
131:/mnt/hgfs/boot/booter/source/applications/booter/srec.c **** checksum = length;
132:/mnt/hgfs/boot/booter/source/applications/booter/srec.c ****
133:/mnt/hgfs/boot/booter/source/applications/booter/srec.c **** switch (type)
134:/mnt/hgfs/boot/booter/source/applications/booter/srec.c **** {
135:/mnt/hgfs/boot/booter/source/applications/booter/srec.c **** case 1:
136:/mnt/hgfs/boot/booter/source/applications/booter/srec.c **** case 2:
137:/mnt/hgfs/boot/booter/source/applications/booter/srec.c **** case 3:
138:/mnt/hgfs/boot/booter/source/applications/booter/srec.c **** address = (char*)0;
139:/mnt/hgfs/boot/booter/source/applications/booter/srec.c **** for (i = 0; i <= type; ++i) //formulate address, number of bytes in address based on 'type'
140:/mnt/hgfs/boot/booter/source/applications/booter/srec.c **** {
141:/mnt/hgfs/boot/booter/source/applications/booter/srec.c **** if (!getSpair(&ch)) //get one byte of address
142:/mnt/hgfs/boot/booter/source/applications/booter/srec.c **** return (void*) 0;
143:/mnt/hgfs/boot/booter/source/applications/booter/srec.c ****
144:/mnt/hgfs/boot/booter/source/applications/booter/srec.c **** address = (char*)(((int)address << 8) | (ch & 0x00FF));
145:/mnt/hgfs/boot/booter/source/applications/booter/srec.c **** /* maintain 8-bit checksum */
146:/mnt/hgfs/boot/booter/source/applications/booter/srec.c **** checksum += ch;
147:/mnt/hgfs/boot/booter/source/applications/booter/srec.c **** length--;
148:/mnt/hgfs/boot/booter/source/applications/booter/srec.c **** }
149:/mnt/hgfs/boot/booter/source/applications/booter/srec.c ****
150:/mnt/hgfs/boot/booter/source/applications/booter/srec.c **** //printf("Dest addr: %X\n", address);
151:/mnt/hgfs/boot/booter/source/applications/booter/srec.c **** for (i = 0; i < (length - 1); ++i) //read remaining bytes (data) minus trailing checksum into 152:/mnt/hgfs/boot/booter/source/applications/booter/srec.c **** {
153:/mnt/hgfs/boot/booter/source/applications/booter/srec.c **** if (!getSpair(address)) //read byte into memory
154:/mnt/hgfs/boot/booter/source/applications/booter/srec.c **** return (void*) 0;
155:/mnt/hgfs/boot/booter/source/applications/booter/srec.c ****
156:/mnt/hgfs/boot/booter/source/applications/booter/srec.c **** //maintain checksum by reading data written to memory back
GAS LISTING /tmp/ccHaeCoR.s page 10 157:/mnt/hgfs/boot/booter/source/applications/booter/srec.c **** checksum += *address;
158:/mnt/hgfs/boot/booter/source/applications/booter/srec.c **** ++address;
159:/mnt/hgfs/boot/booter/source/applications/booter/srec.c **** }
160:/mnt/hgfs/boot/booter/source/applications/booter/srec.c ****
161:/mnt/hgfs/boot/booter/source/applications/booter/srec.c **** /* verify checksum */
162:/mnt/hgfs/boot/booter/source/applications/booter/srec.c **** if (!getSpair(&ch)) //read checksum byte
163:/mnt/hgfs/boot/booter/source/applications/booter/srec.c **** return (void*) 0;
164:/mnt/hgfs/boot/booter/source/applications/booter/srec.c ****
165:/mnt/hgfs/boot/booter/source/applications/booter/srec.c **** if (((ch - ~checksum) & 0x00FF) != 0)
166:/mnt/hgfs/boot/booter/source/applications/booter/srec.c **** {
167:/mnt/hgfs/boot/booter/source/applications/booter/srec.c **** printf("\nError: S-record checksum error!\n");
168:/mnt/hgfs/boot/booter/source/applications/booter/srec.c **** return (void*) 0;
169:/mnt/hgfs/boot/booter/source/applications/booter/srec.c **** }
170:/mnt/hgfs/boot/booter/source/applications/booter/srec.c **** break;
171:/mnt/hgfs/boot/booter/source/applications/booter/srec.c **** case 7:
172:/mnt/hgfs/boot/booter/source/applications/booter/srec.c **** case 8:
173:/mnt/hgfs/boot/booter/source/applications/booter/srec.c **** case 9:
174:/mnt/hgfs/boot/booter/source/applications/booter/srec.c **** type = 10 - type;
175:/mnt/hgfs/boot/booter/source/applications/booter/srec.c **** while (type-- >= 0)
176:/mnt/hgfs/boot/booter/source/applications/booter/srec.c **** {
177:/mnt/hgfs/boot/booter/source/applications/booter/srec.c **** if (!getSpair(&ch))
178:/mnt/hgfs/boot/booter/source/applications/booter/srec.c **** return (void*) 0;
179:/mnt/hgfs/boot/booter/source/applications/booter/srec.c **** address = (char*)(((int)address << 8) | (ch & 0x00FF));
180:/mnt/hgfs/boot/booter/source/applications/booter/srec.c **** checksum += ch;
181:/mnt/hgfs/boot/booter/source/applications/booter/srec.c **** length--;
182:/mnt/hgfs/boot/booter/source/applications/booter/srec.c **** }
183:/mnt/hgfs/boot/booter/source/applications/booter/srec.c **** while (length-- > 1)
184:/mnt/hgfs/boot/booter/source/applications/booter/srec.c **** {
185:/mnt/hgfs/boot/booter/source/applications/booter/srec.c **** if (!getSpair(&ch))
186:/mnt/hgfs/boot/booter/source/applications/booter/srec.c **** return (void*) 0;
187:/mnt/hgfs/boot/booter/source/applications/booter/srec.c **** checksum += ch;
188:/mnt/hgfs/boot/booter/source/applications/booter/srec.c **** }
189:/mnt/hgfs/boot/booter/source/applications/booter/srec.c ****
190:/mnt/hgfs/boot/booter/source/applications/booter/srec.c **** if (!getSpair(&ch))
191:/mnt/hgfs/boot/booter/source/applications/booter/srec.c **** return (void*) 0;
192:/mnt/hgfs/boot/booter/source/applications/booter/srec.c ****
193:/mnt/hgfs/boot/booter/source/applications/booter/srec.c **** if (((ch - ~checksum) & 0x00FF) != 0)
194:/mnt/hgfs/boot/booter/source/applications/booter/srec.c **** {
195:/mnt/hgfs/boot/booter/source/applications/booter/srec.c **** printf("\nError: S-record checksum error!\n");
196:/mnt/hgfs/boot/booter/source/applications/booter/srec.c **** return (void*) 0;
350 .loc 1 196 0 351 .loc 1 124 0 352 01f0 49004010 beq $2,$0,$L19 353 01f4 21200000 move $4,$0 354 355 .loc 1 128 0 356 01f8 0000000C jal getSpair 357 01fc 1100A427 addiu $4,$sp,17 358 359 .loc 1 133 0 360 .loc 1 128 0 361 0200 44004010 beq $2,$0,$L68 362 0204 1000A593 lbu $5,16($sp) 363 364 .loc 1 131 0 365 0208 1100A493 lbu $4,17($sp) 366 .loc 1 133 0GAS LISTING /tmp/ccHaeCoR.s page 11 367 020c 001E0500 sll $3,$5,24 368 .loc 1 131 0 369 0210 008E0400 sll $17,$4,24 370 .loc 1 133 0 371 0214 031E0300 sra $3,$3,24 372 .loc 1 131 0 373 .loc 1 133 0 374 0218 07006018 blez $3,$L24 375 021c 038E1100 sra $17,$17,24 376 377 0220 04006228 slt $2,$3,4 378 0224 08004014 bne $2,$0,$L27 379 0228 F9FF6224 addiu $2,$3,-7 380 381 022c 0300422C sltu $2,$2,3 382 .loc 1 174 0 383 .loc 1 133 0 384 0230 42004014 bne $2,$0,$L70 385 0234 0A000224 li $2,10 # 0xa 386 387 $L24: 197:/mnt/hgfs/boot/booter/source/applications/booter/srec.c **** }
198:/mnt/hgfs/boot/booter/source/applications/booter/srec.c **** else
199:/mnt/hgfs/boot/booter/source/applications/booter/srec.c **** return (void*)address;
200:/mnt/hgfs/boot/booter/source/applications/booter/srec.c ****
201:/mnt/hgfs/boot/booter/source/applications/booter/srec.c **** break;
202:/mnt/hgfs/boot/booter/source/applications/booter/srec.c **** case 0:
203:/mnt/hgfs/boot/booter/source/applications/booter/srec.c **** case 4:
204:/mnt/hgfs/boot/booter/source/applications/booter/srec.c **** case 5:
205:/mnt/hgfs/boot/booter/source/applications/booter/srec.c **** case 6:
206:/mnt/hgfs/boot/booter/source/applications/booter/srec.c **** default:
207:/mnt/hgfs/boot/booter/source/applications/booter/srec.c **** break;
208:/mnt/hgfs/boot/booter/source/applications/booter/srec.c **** }
209:/mnt/hgfs/boot/booter/source/applications/booter/srec.c ****
210:/mnt/hgfs/boot/booter/source/applications/booter/srec.c **** eatLine();
388 .loc 1 210 0 389 0238 0000000C jal eatLine 390 023c 00000000 nop 391 392 0240 7A000008 j $L20 393 0244 00000000 nop 394 395 $L27:
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -