
汇编 Assembly
汇编学习记录
猿来是码农
这个作者很懒,什么都没留下…
展开
专栏收录文章
- 默认排序
- 最新发布
- 最早发布
- 最多阅读
- 最少阅读
-
《汇编语言程序设计》例子之查找最大数
2,参数传送方式不一样了,movq $output, %rdi 和 movq temp, %rsi 传递第1、2 个参数,但在传递第2个参数时,如果直接用 movq %ecx, %rsi 会出现编译错误,这是两个不一样长度的寄存器,刚学我也不知道该如何正确使用,所以添加了一个临时变量来存放最大数,然后再从这个临时变量加载到 %rsi 寄存器中以达到目的。1,修改入口点为 main,因为我直接用的 gcc 编译,Makefile 如上所示。原创 2024-06-17 19:13:36 · 547 阅读 · 0 评论 -
《汇编语言程序设计》例子出现segmentation fault
网上搜索到解决办法有 2 种,一种是在源码开头添加.code32 告诉编译器按照32位进行编译,另外一种是使用 pushq,q 即为 quad word 表示 8 字节长度的,即 64 位。编译通过后,运行时出现 segmentation fault。网上搜了很多,没有一样的,但很多相似的在调用 printf 的时候出现 segmentation fault,这个跟调用约定有关系,64 位和32 位还不一样,64 位下是通过寄存器和栈来传递参数的,而 32 位下则是通过栈来传递参数的。原创 2024-06-17 14:05:19 · 280 阅读 · 0 评论 -
汇编中标签的引用$符号
此时 eax 寄存器里已经变成了 500,而原来的 value 的值是没有必变的,用 x 查看其内存里的值还是200。可以看到,用 movl $500, (%eax) 来修改 eax 里地址指向的值,eax 里的值是没变化的,但它的值所指向的值被修改了,即 value 变成了 500。在执行 movl $value, %eax 后,eax 寄存器里存入了 value 的地址 0x601028(十进制为6295592),那如果往下执行 movl $500, %eax 会是怎样的结果呢?原创 2024-06-14 18:51:17 · 371 阅读 · 0 评论