macos - 在 MacOSX 上的 x86 程序集 GNU 中处理寄存器整数值环绕
问题描述
我正在使用 MacOSX 上的 x86 GNU GAS 中的一个简单示例,其中将整数值300
移动到eax
寄存器中。正如预期300 mod 256
的那样,只有(值44
)实际存储在 中%eax
,如echo$?
Mac 终端所示:
.globl _main
_main:
pushq %rbp
movq %rsp, %rbp
subq $16, %rsp
movl $300, %eax;
leave
ret
但是,我的印象是有一个溢出/环绕标志来表示发生了环绕或者一个寄存器存储了 和 的整数除法的300
结果256
,结果是1
。对于 x86 GNU,我找不到任何详细说明此过程(如果存在)的信息。有谁知道如何访问环绕值或溢出标志?
解决方案
你的问题有几个误解。
首先,eax 可以保存从 0 到 4294967295 的值,mov $300, %eax
实际上将 300 存储到 eax 中也是如此。
其次,mov指令不能溢出或回绕;源的大小和目标的大小是相同的。溢出标志用于算术运算。
打印 44的原因echo $?
是操作系统向 shell 报告了进程退出状态的低字节。
推荐阅读
- java - 如何在 Spring Boot 中将字符串列表传递给 @Query
- laravel - 如何将变量填充到所有查看登录用户
- javascript - Javascript - 帮助更新我的计算器的显示以显示按下按钮的数量
- assembly - 在装配体中对齐数据
- objective-c - 如何获取登录用户的头像?
- c++11 - 对列表的不完整类型支持
- android - Flutter ListView 单击导航到另一个屏幕
- angular - 具有多个搜索键的 Angular 8 过滤器/搜索 json 列表
- python - 即使没有 UPDATE 更改, UPDATE 的 psycopg2 行数也不为零
- python - Python一直提示直到有效