系列文章目录
提示:这里可以添加系列文章的所有文章的目录,目录需要自己手动添加
例如:第一章 Python 机器学习入门之pandas的使用
提示:写完文章后,目录可以自动生成,如何生成可参考右边的帮助文档
前言
提示:这里可以添加本文要记录的大概内容:
例如:随着人工智能的不断发展,机器学习这门技术也越来越重要,很多人都开启了学习机器学习,本文就介绍了机器学习的基础内容。
提示:以下是本篇文章正文内容,下面案例可供参考
一、32-BITS, SYSCALL
不同操作系统的系统调用不通用。Linux/Unix都遵循POSIX接口标准,基本上都可以通用。但是32位的系统调用和64位系统调用不一样。
系统调用id可以查询手册,或者unistd_32.h/unistd_64.h
系统函数的参数,从左至右,依次放在EBX、ECX、EDX、ESI、EDX中,超过5个参数用其他方法传递。
系统函数的返回值存放在EAX中
int $80 # 软中断,调用系统函数
用echo $? 可以查询函数返回值
二、64-BITS,SYSCALL
64位和32位的系统调用编号完全不同,参数使用的寄存器也不同。
同时,64位的汇编可以通过syscall指令,而不是int $80来进行软中断,调用系统函数。
64为的汇编放参数有6个寄存器,从左至右分别为:RDI、RSI、RDX、RCX、R8和R9,而对于系统调用R10用来替换RCX。(这里我有一个疑问,汇编里可以调用非系统调用的普通函数?看来是可以的)
默认打开3个文件
0号文件:输入,默认为键盘(可以重定向为其他输入)(cin)
1号文件:输出,默认为屏幕(可以重定向为其他输出)(cout)
2号文件:错误输出,默认为屏幕(可以重定向为其他输出)(cerr)
三、64-BITS,C LIB
gcc编译器,函数参数是从右到左处理的。参数入栈,是从右至左入栈。
但是汇编函数在定义参数时还是按照从左到右,这更符合人的习惯。
printf是变长参数,参数个数不是固定的。所以要将%rax设置为0,表明参数结束。
.assciz 在字符串后面加’\0’
四、32-BITS,C LIB
32位CPU在调用系统该函数时,是先用push?命令入栈,然后调用函数。