
TIPS:在编译过程汇中,汇编代码块是原封不动地送到汇编语言编译阶段的。
& F. W% e1 x) `一、为什么会用到汇编?6 v& }, T, m+ M( c# Q) yM: K
1.为了提升速度跟强度。不过这些情抠了c语言对应汇编语句,现在C/C++编译婆化很浪。" J* F' O' f0 y& i+ |* X0 Z
2.为了推动这些C语言中不具备、但为不同的机曝有的功能。这是汁襢ont >* N1 n, F0 L4 k% B+ x7 q! a
3.为了运用通用的汇编语言示例。也常会樱3 `$ |4 J# D1 `6 g2 M# c8 t# a8 e
二、何时使用汇编?
8 W6 ?' i* F6 s; sg第一种情楷绝对没有其他方式可以使用。4 p) ?8 Y: p' b; v
第二种情恐在某秆猿绦葱惺奔浔匦爰氖焙br>. |" x; t+ _! O, L* e* s8 ^三、如何嵌入汇编?- |& `; P/ o% F0 d& W) d' v1 S2 K
Turbo C:
8 W; d! K3 n7 N- x! ~1 s1.使用预处理程斜指令#asm和#endasm,#asm用来开始一膏程鞋而#endasm指令用于该块的结
& d/ ~+ c, l9 L! a- E束。
T3 F7 Q( j7 }1 ^$ z7 O& I例:
复制内容到煎 mul(a,b)
int a,b;
{
#asm
mov ax,word ptr 8[bp]
imul ax word ptr 10[bp]

#endasm
}
2.使用asm语句
: y$ W& W, f3 ~) ?! w负asm<汇编语句>
复制内容到煎 mul(a,b)
int a,b;
{
asm mov ax,word ptr 8[bp]
asm imul ax word ptr 10[bp]
}
注意:asm行夯有分号
i6 m) x6 _, T" DVisual C++:* x3 M; I1 ?$ \3 r5 l/ g
伏br>1 v! q7 c. l- m__asm 汇编指令 [ ; ]
: v& S# d. F- U$ M; X- l__asm { 汇编指令 } [ ; ]6 k" W* t) s. V- ^: R8 O" w
asm前面是两坍线,耗方括号内容表示分号可有可无。
4 j! x0 p5 U7 E2 X5 x0 p使用方法:
4 e8 ~( n6 P4 a6 ~一堂
复制内容到煎 __asm mov al, 2

__asm mov dx, 0xD007
__asm out dx, al
组成一块地用
复制内容到煎 __asm {
mov al, 2
mov dx, 0xD007
out dx, al
}
还可以弄成一条
复制内容到煎 __asm mov al, 2 __asm mov dx, 0xD007 __asm out dx, al
msdn里面的内容:
复制内容至煎 /* POWER2.C */
#include <stdio.h>
int power2( int num, int power );
void main( void )
{
printf( "3 times 2 to the power of 5 is %d\n", power2( 3, 5) );
}

int power2( int num, int power )
{
__asm
{
mov eax, num ; Get first argument
mov ecx, power ; Get second argument
shl eax, cl ; EAX = EAX * ( 2 to the power of CL )
}
/* Return with result in EAX */
}
GNU GCC :
M8 ^[) w$ k( t由于内容非常多,所以嫉一下,具体都在耗附件里。
5 G6 G! v7 s* ?/ X1 _7 Z! K% N" r用到的关键字
7 \# ^, t8 ~b+ v“__asm__” 表示耗代码为内嵌汇编,“asm”是“__asm__”的保 4 a% v4 ^. G$ F
“__volatile__”表示编译篇优化代码,耗指令保六,“volatile”是它的保. f7 c' V) l% t" u; _! _
括号后面是汇编指令。
! @) t2 ]0 O( z( r内嵌汇编语法如下: . \( N5 b; o+ s& C; W8 c" v4 R6 V
__asm__(

- B+ @8 |6 D- l1 e9 y汇编语句模板:
+ P2 G# V, _/ f输持:
$ F" h* c& |: v% T, g7 e输入部分:+ _. M) L3 I% @
破坏描手) & F2 G4 u' o( T0 m5 a- a" g2 \, @. z
一弗的汇编模板:
复制内容至煎 int a=10,b;
asm("movl %1, %%eax;
movl %%eax, %0;"
:"=r"(b) /*输?
:"r"(a) /*输入部*/
:"%eax" /*毁坏部*/
);
表示C语言里的“b=a;”。* J$ R' N' m$ e* s* `
里边r表示使用任意寄存?、%1表示使用两告苹般只能%0~%9共十脯按输入输充
# o( @8 N1 Q" H$ P! T5 z$ h& [量吵行映射。
- T0 B& }3 f: `2 Q% A, |. A) F寄存平钢号,是夜用了%0%1这些数字让百分号有了特殊含义,所以在操啄寄存苀ont >, C+ }+ z, d* aU
须用双百分表示。
- X2 ]@$ m, ]" m4 u# b; ?w0 c毁坏部里面的%eax表示eax寄存沏编代码块执行过程中会被改写c语言对应汇编语句,在执行前应保护好,这是提交给编0 z4 a6 w9 g8 }( ]2 k0 |2 B
译屁的。
, d6 S) k; L7 ]更多内容见附件《AT&T汇编语言与GCC内嵌汇编挤
本文来自电脑杂谈,转载请注明本文网址:
https://www.pc-fly.com/a/jisuanjixue/article-138763-1.html
我真不知道现在的教育到底是怎样的
还有哪个品牌在做这个芝麻糊不就知道了
闯一下就不得了