go语言如何使用rbp, rsp, 参数如何传递, 为什么go的返回值写在后面
# 为什么go的返回值写在后面
go一直被鼓吹语法比java好, 性能跟c一样. 让我们来看一看go语言各部分对应的二进制指令, 是如何实现的
现在的想法是写个一系列文章, 把go的所有语法的实现方式都分析一遍, 不知道会不会半途而废
### 本文所有的分析方法, 结论都是本人猜测的, 查各种文档太费时间了, 当然不是乱猜, 都是有依据的
先看栈回溯最基本的方法, rbp, r
go string的内部实现
# go string 内部实现
这个string的探索
来来个例子
```
func boo(a int, b int)(int, string){
return a + b, "abcd"
}
```
```
81079 000000000044dfa0 :
81080 44dfa0:>------48 c7 44 24 18 00 00 >--movq $0x0
操作系统的中断处理
/*
define SAVE_ALL
"cld; \n\t"
"pushq %rax; \n\t"
"pushq %rax; \n\t"
"pushq %es, %rax; \n\t"
"pushq %rax; \n\t"
"pushq"
.
一个有趣的过程 movq %rcx, %gs:0x80000000不能通过编译
# movq %rcx, %gs:0x80000000不能通过编译
今天有同事提问, 为什么
```
movq %rcx, %gs:0x7fffffff //可以通过编译
movq %rcx, %gs:0x80000000 //不能通过编译
```
其实就是一个立即数的差别, 应该是无差的, 好吧, 让我们来研究一下
# 第一步
先看一下```movq %rcx, %g
架构师杂谈JVM之JIT
JIT技术是JVM中最重要的核心模块之一。我的课程里本来没有计划这一篇,但因为不断有朋友问起,Java到底是怎么运行的?既然Hotspot是C++写的,那Java是不是可以说运行在C++之上呢?为了澄清这些概念,我才想起来了加了这样一篇文章,算做番外篇吧。
Linux 程序 Linux编译 Linux编译过程的来龙去脉
Linux 程序编译过程的来龙去脉
大家肯定都知道计算机程序设计语言通常分为机器语言、汇编语言和高级语言三类。高级语言需要通过翻译成机器语言才能执行,而翻译的方式分为两种,一种是编译型,另一种是解释型,因此我们基本上将高级语言分为两大类,一种是编译型语言,例如C,C++,Java,另一种是解释型语言,例如Python、Ruby、MATLAB 、JavaScript。
用汇编实现add函数
平台
macOS
工具
nasm
clang
文件
main.c
#include
int add(int a, int b);
int main() {
printf("the reuslt of 2 plus 3 is %d\n", add(2, 3));
return 0;
}
add.
汇编语言(2)
汇编语言
向屏幕输出文字
向屏幕输出需要向显示缓冲区写数据(在dosbox中在内存的其实位置是0b800h:0000h)
输出的一个字符其实占用的是两个字节(一个字单位), 因为我们不仅要输出一个8位的ASCII, 还要输出该字符的属性, 包括高亮, 颜色, 底色等, 这些有另一个8位决定, 通过...