สมมติว่าเรามีโค้ด C ต่อไปนี้สำหรับ avr-8bit:
int v1=1;
int v2=2;
v2=v2+v1;
ฉันคาดว่าถอดแยกชิ้นส่วนต่อไปนี้
ldi r18, 1;
ldi r19, 2;
add r19, r18;
แต่หลังจากที่ฉันวิ่ง:
avr-gcc -mmcu=atmega2560 Test.c -o Test.elf
และ
avr-objdump -S Test.elf > Test.lss
ฉันได้ถอดแยกชิ้นส่วนต่อไปนี้
ldi r24, 0x01 ; 1
ldi r25, 0x00 ; 0
std Y+2, r25 ; 0x02
std Y+1, r24 ; 0x01
ldi r24, 0x02 ; 2
ldi r25, 0x00 ; 0
std Y+4, r25 ; 0x04
std Y+3, r24 ; 0x03
ldd r18, Y+3 ; 0x03
ldd r19, Y+4 ; 0x04
ldd r24, Y+1 ; 0x01
ldd r25, Y+2 ; 0x02
add r24, r18
adc r25, r19
std Y+4, r25 ; 0x04
std Y+3, r24 ; 0x03
มีใครบ้างที่สามารถช่วยให้ฉันเข้าใจผลการถอดประกอบได้
แก้ไข: การใช้ char แอสเซมบลีกลายเป็น:
ldi r24, 0x01
std Y+1, r24
ldi r24, 0x02
std Y+2, r24
ldd r25, Y+2
ldd r24, Y+1
add r24, r25
std Y+2, r24
จะมีคำสั่งมาตรฐานเมื่อใด?