yellowriver的日志

电脑杂谈  发布时间:2020-01-29 04:05:13  来源:网络整理

汇编和c语言教材_ccriticalsection对应c语言_c语言对应汇编语句

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]

c语言对应汇编语句_汇编和c语言教材_ccriticalsection对应c语言

#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

汇编和c语言教材_ccriticalsection对应c语言_c语言对应汇编语句

__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) );

}

c语言对应汇编语句_ccriticalsection对应c语言_汇编和c语言教材

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__(

c语言对应汇编语句_ccriticalsection对应c语言_汇编和c语言教材

- 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

    相关阅读
      发表评论  请自觉遵守互联网相关的政策法规,严禁发布、暴力、反动的言论

      • 萧泰来
        萧泰来

        闯一下就不得了

      • 刘威
        刘威

        我真不知道现在的教育到底是怎样的

      • 李亚丽
        李亚丽

        还有哪个品牌在做这个芝麻糊不就知道了

      热点图片
      拼命载入中...