PUSH1 0x60
(값 0x60을 스택에 푸시)DUP1
(스택 맨 위의 값을 복사)SWAP1
(스택 맨 위의 값과 두 번째 값을 교환)LOG1
(하나의 토픽을 포함한 로그를 기록)pragma solidity ^0.8.0;
contract InlineAssembly {
function add(uint256 a, uint256 b) public pure returns (uint256 result) {
assembly {
// 스택에 'a'와 'b'를 푸시
let x := a
let y := b
// ADD 명령어를 사용하여 두 값을 더함
result := add(x, y)
}
}
}
pragma solidity ^0.8.0;
contract InlineAssembly {
function conditionalJump(uint256 value) public pure returns (uint256) {
assembly {
let result
switch value
case 0 {
// value가 0일 경우
result := 0
}
default {
// value가 0이 아닐 경우
result := 1
}
mstore(0x80, result) // 메모리에 결과를 저장
return(0x80, 32) // 결과 반환
}
}
}
pragma solidity ^0.8.0;
contract InlineAssembly {
function stackManipulation() public pure returns (uint256) {
assembly {
// 스택에 값을 푸시
let a := 1
let b := 2
let c := 3
// DUP 명령어를 사용하여 스택의 맨 위 값을 복사
dup1
// SWAP 명령어를 사용하여 스택의 두 값을 교환
swap1
// 스택에서 값을 팝
pop
// 결과값을 반환
mstore(0x80, a) // 메모리에 값을 저장
return(0x80, 32) // 결과 반환
}
}
}
솔리디티에서 인라인 어셈블리를 사용하는 것은 고급 기능으로, 보안과 최적화를 위해 주의해서 사용해야 합니다. 인라인 어셈블리는 주로 성능 최적화나 복잡한 저수준 작업을 수행할 때 사용됩니다.