Title: ASSEMBLY 1
1??? ????? ??
2INTRODUCE
- ??? ??? 3??
- ???
- ?????
- ????
- ?????
- ??? ?? ? ? ?? ???? ???? 11 ????? ??
3ASSEMBLY LANGUAGE
- ???? ????? ??
- ?? (Label)
- ???? (Mnemonic)
- ??? (Operand)
- ???? ??
- eax ????? ?? 10 ??
movl 10, eax
4ASSEMBLY C/C
- ????? C/C? ?? ???? ??
- ???? ??? C/C ??? ?? ???
- ????? ???? ??? .s ???? ??
- GCC??? ???? ???? ???
- gcc c_source.c asm_source.s ? ??? ??
- ???? ????? C/C ????? ?? ???
- GCC? ??? .o ??? ??? ?? ???
- ??? ???? ??
- C ???? ??? ?? ????? ??? ??
- ???? ??????? ??? ?? ??
5INLINE ASSEMBLY
- ?? ??
- C/C ? ? ? ?? ??
- ?? ??? ??? ??
- ???? ??? ?? ???? ?? ??
- ????? ???? ??? ???? ?? ?? ??
- ???? ?? ??? ?? ?? ??
6INLINE ASSEMBLY
- ??? ???? ??
- ???? ?? (asms)
- ?? ?? (output)
- ?? ?? (input)
- ?? ??? ???? (clobber)
- ??
__asm__ __volatile__ (asms output input
clobber)
7INLINE ASSEMBLY
- ??
- __asm__
- ??? ??? ?? ??? ????? ?? ????.
- Gcc??? asm ? ????? ANSI? __asm__?? ???? ??
- __volatile__
- ???? ???? ?? ??? ?? ????.
- ??? ?? ?? ???? ??? ? ??? ??? ? ??
8INLINE ASSEMBLY
- ??
- asms
- ???? ???? ????? ??? ??
- ?? ??? x? ?? ??? input, output ???? ??
- output
- constraint (variable)??? ???
- input
- output? ??
- clobber
- output, input?? ???? ??? asms? ???? ?? ??? ?? ??
9INLINE ASSEMBLY
- ?? ??
- asms? ??? ??? ??? output, input, clobber? ?? ???
? ?? - \n\t ? ??
- ?????? ??? ? ?? ??? ?? ?? ???? ??
__asm__ __volatile__ (asms output) // input,
clobber ??
__asm__ __volatile__ (asms input clobber)
// output ??
__asm__ __volatile__ (movl 1 0\n\taddl 2
0 r (out) r (x) r (y))
10INLINE ASSEMBLY
- 'm' ????? ???? ?? ??? ??? ????? ???? ????
- 'o' ??? ??? ????? ???? ??? ????
- 'V' ??? ???? ????? ???? ??? ????
- 'lt' ?? ??(?? ????? ??? ????) ????? ??? ????
- 'gt' ?? ??(?? ????? ??? ????) ????? ??? ????
- 'r' ?? ???? ?? ????
- 'd', 'a', 'f', ... ???? ?? ????? ???? ?? ????? d,
a, f? ?? 68000/68020?? ???, ????, ??? ??? ?????
????. - 'i' immediate ?? ?? ???? ????. ??? ? ??? ???
????. - 'n' immediate ?? ??? ??? ?? ?? ????. ?? ???? ???
? ? ? ?? ??? ????? ??? ???? ???? 'i'?? 'n'?
???? ?? ?????. - 'I', 'J', 'K', ... 'P' ???? ?? ?? ?? ?? ?? ????
????. 68000?? 'I'? 1?? 8??? ?? ????. ??? ???
???? ??? ??? ???? ???. - 'E' immediate ??? ????? ???? ?? ?? ??? ??? ???
???? ?? ??. - 'F' immediate ??? ????.
- 'G', 'H' ?? ?? ?? ?? ???? ??? ????? ???? ?? ???.
- 's' ?? ??? ???? ?? immediate ??? ???? ????
- 's' ?? ??? ???? ?? immediate ??? ???? ????. 's'?
'i'? ?? ?? ??? ?? ?? ??? ??? ? ?? ?? ????. - 'g' ?? ????? ??? ?? ????, ??? ?? immediate ?? ?
????? ???? ????. - '0', '1', '2', ... '9' ?? ??? ????? ??? ???.
- 'p' ??? ??? ????? ???? ????. "load address"?
"push address" ??? ?? ?. - 'Q', 'R', 'S', ... 'U' Q?? U??? ??? ???? ?? ???
?? ?? ????? ????.
11INLINE ASSEMBLY
- ''
- ????? ?? ???? ???. ?? ?? ???? ??? ??? ???.
- ''
- ??, ?? ?? ??. ''? ?? output? ''? input/output
??? ?? ????. ??? ?? ?? ????? input ???? ????. - '
- "earlyclobber" ????? ???? input ????? ???? ???
??? ?? ?? ??? ?? ????.??? input ????? ??? ?????
??? ???? ????? ? ??. - gcc? input ??? ? ???? ?? output? ????? ???? ???
input? ??? ??? output? ?? ?? ? output? input ??
?? ???? ??? ??? ? ??. ?? ??? ?? ?? output? ???
??? input? ?? ???? ?? ??? ?? ??? ????? input?
output? ??? ??? ??? ?? ? ??. - '' ?? ???? ????? ?? ???? ????. ?? ????? ????
??? ? eax ?? ?? ?? - '' ??? ??? ?? ? ?? ?? ??? constraints? ????
???.
12EXAMPLE 1
.globl main main movl 10, eax imull eax, ea
x ret
13EXAMPLE 2
include ltstdio.hgt include ltstdlib.hgt int main()
int a, sum a 1 __asm__
__volatile__( "movl 1, 0 \n\t" "addl 2,
0 \n\t" "addl 3, 0 \n\t" "addl 4,
0 \n\t" "addl 5, 0 " g (sum)
r (a), r (a1), r (a2), r (a3), r
(a4) ) printf("ad, sumd\n", a, sum)
return 0