• 忘掉天地
  • 仿佛也想不起自己
bingliaolongBingliaolong  2023-08-09 23:56 Aet 隐藏边栏 |   抢沙发  4 
文章评分 1 次,平均分 5.0

GNU 汇编器语法

示例

定义数据

nasm数据操作

GNU汇编器操作

  1. 使用直接操作数,要用$

  1. 获取部分内存时,例如 64 寄存器的第一个字节

  1. 不在操作数中定义大小,而是在指令中定义

GNU汇编器操作后缀

  1. b:1个字节操作数
  2. w:2个字节操作数
  3. l:4个字节操作数
  4. q:8个字节操作数
  5. t:10个字节操作数
  6. o:16个字节操作数

内存访问

  1. nasm用的是[],gnu使用()

跳转

注释

C调用汇编

  1. c程序

  1. 汇编

  1. 构建

内嵌汇编代码

  1. 语法

  1. 每个操作数由约束字符串描述,后面跟着括号中的 C 表达式
    1. r:将变量值保存在通用寄存器中
    2. g:允许使用任何寄存器、内存或立即整数操作数,但非通用寄存器的寄存器除外
    3. f:浮点寄存器
    4. m:允许使用内存操作数,可以使用机器通常支持的任何类型的地址
    5. 等等

在汇编中调用C

  1. c代码

  1. 汇编

  1. 构建

汇编中使用浮点数

类型

  1. 单精度
  2. 双精度
  3. 双精度扩展

单精度浮点数数据在内存中

  1. 符号-1位
    1. 0为正数
  2. 指数-8位
    1. 指数是从 -128 到 127 的 8 位有符号整数,或者是从 0 到 255 的 8 位无符号整数
  3. 尾数-23位
  4. 详细:
    1. 指数为 00001111b 的十进制是 15。对于单精度位移为127,这意味着我们需要计算指数-12715-127=-112
    2. 由于尾数的归一化二进制整数部分始终等于 1,因此尾数中仅记录其小数部分:
    3. value = mantissa * 2^-112

双精度浮点数据在内存中

  1. 符号-1位
    1. 0为正数
  2. 指数-11位
    1. 指数是从 -128 到 127 的 8 位有符号整数,或者是从 0 到 255 的 8 位无符号整数
  3. 尾数-52位
  4. 详细:
    1. value = (-1)^sign * (1 + mantissa / 2 ^ 52) * 2 ^ exponent - 1023)

扩展精度

  1. 符号 - 1 位
  2. 指数 - 15 位
  3. 尾数 - 112 位

本文为原创文章,版权归所有,欢迎分享本文,转载请保留出处!

bingliaolong
Bingliaolong 关注:0    粉丝:0 最后编辑于:2023-08-10
Everything will be better.

发表评论

表情 格式 链接 私密 签到
扫一扫二维码分享