1 include stdio h 2 int mainint argc
- Slides: 17
1. #include <stdio. h> 2. int main(int argc, char** argv) { 3. int a=10; 4. int b=20; 5. int c=30; 6. int d=40; 7. __asm__ volatile ( 8. "movl $100, %%eaxn" // eax = 100 9. "movl $200, %%ebxn" // ebx = 100 10. "addl %%ebx, %%eaxn" // eax += rbx 11. "movl %%eax, %0n" // b = rax 12. : "=g" (b) //output, b的代號是"%0" 13. : "g" (a), "g" (d) //input, a代號是"%1", da代號是"%2" 14. : "ebx", "eax" //搞髒掉的暫存器,gcc會幫我們還原 15. ); 16. printf("a=%d, b=%d, c=%d d=%dn", a, b, c, d); 17. 中正大學 } 創作共用-姓名 標示-非商業性-相同方式分享 – 羅習五 CC-BY-NC-SA asm. 1. c 6
ubuntu@oslab: ~/os-lab/shared. Folder$. /asm. 1 a=10, b=300, c=30 d=40 中正大學 – 羅習五 創作共用-姓名 標示-非商業性-相同方式分享 CC-BY-NC-SA 7
1. #include <stdio. h> 2. int main(int argc, char** argv) { 3. long int a=10; 4. long int b=20; 5. long int c=30; 6. long int d=40; 7. __asm__ volatile ( 8. "mov $100, %%raxn" 9. "mov $200, %%rbxn" 10. "add %%rbx, %%raxn" 11. "mov %%rax, %0n" 12. : "=m" (b) //output 13. : "g" (a), "g" (d) //input 14. : "rbx", "rax" //搞爛掉的暫存器 15. ); 16. printf("a=%ld, b=%ld, c=%ld d=%ldn", a, b, c, d); 創作共用-姓名 標示-非商業性-相同方式分享 17. 中正大學 } – 羅習五 CC-BY-NC-SA asm. 2. c 8
ubuntu@oslab: ~/os-lab/shared. Folder$. /asm. 2 a=10, b=300, c=30 d=40 中正大學 – 羅習五 創作共用-姓名 標示-非商業性-相同方式分享 CC-BY-NC-SA 9
1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. #include <stdio. h> int main(int argc, char** argv) { int a=10, b=20, c=90, d=100; printf("a=%d, b=%d, c=%d, d=%dn", a, b, c, d); __asm__ volatile ( "mov %1, %%raxn" // rax = a "mov %2, %%rbxn" // rbx = b "add %%rbx, %%raxn" // rax += rbx "mov %%rax, %0n" // c = rax : "=m" (c) //output : "g" (a), "g" (b) //input : "rbx", "rax" //搞爛掉的暫存器 ); printf("c = a + bn"); printf("a=%d, b=%d, c=%d, d=%dn", a, b, c, d); } 創作共用-姓名 標示-非商業性-相同方式分享 中正大學 – 羅習五 CC-BY-NC-SA asm. 3. c 10
asm. 4. c 1. #include <stdio. h> 2. int main(int argc, char** argv) { 3. unsigned long msr; 4. asm volatile ( "rdtscnt" // Returns the time in EDX: EAX. 5. "shl $32, %%rdxnt" // Shift the upper bits left. 6. "or %%rdx, %0" // 'Or' in the lower bits. 7. : "=a" (msr) //msr會放在rax暫存器 8. : 9. : "rdx"); 10. printf("msr: %lxn", msr); 11. } 中正大學 – 羅習五 創作共用-姓名 標示-非商業性-相同方式分享 CC-BY-NC-SA 12
ubuntu@oslab: ~/os-lab/shared. Folder$. /asm. 4 msr: 1798 fd 4 d 0135 中正大學 – 羅習五 創作共用-姓名 標示-非商業性-相同方式分享 CC-BY-NC-SA 13
asm. 5. c 1. #include <stdio. h> 2. int main(int argc, char** argv) { 3. unsigned long msr; 4. asm volatile ( "rdtscnt" // Returns the time in EDX: EAX. 5. "shl $32, %%rdxnt" // Shift the upper bits left. 6. "or %%rdx, %0" // 'Or' in the lower bits. 7. : "=m" (msr) //msr會放在記憶體 8. : 9. : "rdx"); 10. printf("msr: %lxn", msr); 11. } 中正大學 – 羅習五 創作共用-姓名 標示-非商業性-相同方式分享 CC-BY-NC-SA 14
- Int main(int argc, char** argv)
- Int main int argc char argv
- Nnxn com
- Int sum(int a int n) int sum=0 i
- Include
- #include stdio.h #include string.h int main()
- #include stdio.h int main()
- Fpos_t
- #include stdio.h #include stdlib.h #include string.h
- #include stdio.h #include conio.h #include stdlib.h
- 쉽게 풀어 쓴 c언어 express 도전문제
- Int main
- 저장 유형 지정자
- Inheritance calculator
- Public void drawsquare(int x, int y, int len)
- Public int divide(int a int b)