(汇编) 基于VS的x86汇编基础指令

这篇具有很好参考价值的文章主要介绍了(汇编) 基于VS的x86汇编基础指令。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

环境

visual studio 选择x86运行

示例代码

/**
| 32位 | 16位 | 高8位 | 低8位 |
| ---- | ---- | ----- | ----- |
| EAX  | AX   | AH    | AL    |
 */
#include <iostream>

int main() {
    int32_t x = 1;
    int32_t y = 2;

    // 简单加法示例
    __asm {
        mov eax, x;
        mov ebx, y;
        add eax, ebx;
        mov x, eax;
    };

    ::std::printf("x = %d y = %d\n", x, y);
    
    return 0;
}

汇编基础

标志位

# visual studio 中的标志位
# OV UP EI PL ZR AC PE CY
  • OV 溢出
    • 超出表示范围为溢出 1,否则 0
  • UP 增量
    • 1:以递减顺序对数据串处理;0:以递增顺序对数据串处理
  • EI 允许中断
    • CPU允许中断1,否则0
  • PL 正
    • 运算结果为正则为1,否则0
  • ZR 零
    • 运算结果为0则为1,否则0
  • AC 辅助进位
    • 低4位向高位进位1,否则0
  • PE 奇偶校验
    • 最低16位中含1的个数为偶数为1,否则0
  • CY 进位
    • 最高位进位1,否则0

常用指令

此处介绍汇编的常用基础指令,不做过多展开,仅记录基本含义

指令 作用 e.g.
add 加法 add eax, ebx;
and 按位与操作 and eax, ebx;
call 下一条指令地址入栈,跳到目标进行指令执行 call 地址;
cmp 操作数1-(符号扩展)操作数2
不保存,观察标志位
cmp eax, ebx;
dec 自减 dec eax;
div 除法
结果,余数 (不同参数不同)
div bx;
imul 乘法
(不同参数不同)
imul eax, ebx, ecx;
inc 自增 inc eax;
jmp 跳转 这是一系列指令
lea 加载地址 lea eax, 地址;
mov mov eax, 114514;
movsd 双精度赋值到寄存器
movss 但精度数赋值到浮点寄存器
movsx/movsxd 符号扩展传输
movs系列 批量内存传输
movzx 0扩 展传输
neg 取反(±) neg eax;
not 按位取反 not eax;
or 按照位或 or eax, ebx;
pop及相关 出栈 pop eax;
push及相关 入栈 push eax;
rcl 循环左移
最高位到cf,cf移入最低位
rcl eax, 次数;
rcr 循环右移
cf填入最高位,最低位填入cf
rcr eax, 次数;
ret 从栈中恢复地址 ret ;
rol 循环左移
最高位到cf和最低位,cf原值丢弃
rol eax, 次数;
ror 循环右移
最低位填入最高和cf
ror eax, 次数
sar 算数右移
符号位保留
sar eax, 数值;
shr 逻辑右移
高位补0
shr eax, 次数
sub 减法 sub eax, ebx;
test 按位与
不保存,观察标志位
cmp eax, ebx;
xor 按位异或 xor eax, ebx;

vs配置

寄存器

进入debug模式后,在顶部调试->窗口->寄存器

反汇编

在编辑界面,右击->转到反汇编

进入后右击选择显示具体信息

检测变量

注意设置不开优化文章来源地址https://www.toymoban.com/news/detail-463625.html




END

到了这里,关于(汇编) 基于VS的x86汇编基础指令的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • X86汇编语言:从实模式到保护模式--命令篇

    注:不能直接将内存赋值给内存,也不能将立即数直接赋值给段寄存器(CS DS ES SS),但是可以将内存直接赋值给段寄存器 div:使用操作数作为除数,除以被除数(无符号除法)。 如果除数的长度为8位,则只使用AX作为被除数,执行除法后商存储在AL中,余数存储在AH中。 如

    2024年02月05日
    浏览(28)
  • Visual Studio+MASM32写汇编程序——安装和环境配置说明

    写在前面: 如果你之前使用的是Visual Studio 2022(其他版本不清楚,如果是2017版本应该也是行的,如果有uu成功,也可以分享自己的经验),那么建议你立即卸载重新安装(血泪教训,网上能找到的教程基本上都不能解决问题)。 2022版本可能会出现的问题: MSB3721 命令“ml6

    2024年01月18日
    浏览(26)
  • pip install pycrypto 报错 error: command ‘C:\\Program Files (x86)\\Microsoft Visual Studio 14.0\\VC\\

    1、pip install pycrypto报错如下 error: command \\\'C:\\\\Program Files (x86)\\\\Microsoft Visual Studio 14.0\\\\VC\\\\BIN\\\\x86_amd64\\\\cl.exe\\\' failed with exit code 2 2、搞了半天,又是下载安装 Microsoft Visual Studio 14.0 又是安装 Visual C++ Build Tools 。还是没搞定 3、谷歌一圈,百度一圈最后找到个可以解决的 参考: https:

    2024年02月11日
    浏览(36)
  • error: command ‘C:\\Program Files (x86)\\Microsoft Visual Studio 14.0\\VC\\BIN\\x86_amd64\\cl.exe‘

    (一)报错代码: (这是我在安装pymrmr时:pip install pymrmr=报错:Command errored out with exit status 1:,通过打开Visual Studio installer安装相应组件后报的问题) (二)解决办法: 安装好:使用C++的桌面开发即可完成。 附:如何安装visual studio

    2024年02月15日
    浏览(34)
  • x86平台SIMD编程入门(2):通用指令

    虽然128位的XMM寄存器在硬件上只是256位YMM寄存器的下半部分,但在C++中它们是不同的类型。有一些intrinsic函数可以将它们重新解释为不同的类型,如下表所示,行代表源类型,列代表目标类型。 __m128 __m128d __m128i __m256 __m256d __m256d __m128 = _mm_castps_pd _mm_castps_si128 _mm256_castps128_p

    2024年02月06日
    浏览(30)
  • x86平台SIMD编程入门(3):浮点指令

    算术类型 函数示例 备注 加 _mm_add_sd 、 _mm256_add_ps 减 _mm_sub_sd 、 _mm256_sub_ps 乘 _mm_mul_sd 、 _mm256_mul_ps 除 _mm_div_sd 、 _mm256_div_ps 平方根 _mm_sqrt_sd 、 _mm256_sqrt_ps 倒数 _mm_rcp_ss 、 _mm_rcp_ps 、 _mm256_rcp_ps 快速计算32位浮点数的近似倒数(1/x),最大相对误差小于 (1.5times 2^{-12}) 。 倒数

    2024年02月06日
    浏览(27)
  • x86平台SIMD编程入门(4):整型指令

    算术类型 函数示例 加 _mm_add_epi32 、 _mm256_sub_epi16 减 _mm_sub_epi32 、 _mm256_sub_epi16 乘 _mm_mul_epi32 、 _mm_mullo_epi32 除 无 水平加/减 _mm_hadd_epi16 、 _mm256_hsub_epi32 饱和加/减 _mm_adds_epi8 、 _mm256_subs_epi16 最大/最小值 _mm_max_epu8 、 _mm256_min_epi32 绝对值 _mm_abs_epi16 、 _mm256_abs_epi32 平均值 _mm

    2024年02月06日
    浏览(30)
  • 发布 VectorTraits v2.0(支持 x86的Sse系列指令集等)

    目录 支持 x86的Sse系列指令集 为 Vector128/Vector256 补充全部的向量方法 提供CPU型号信息 结果范例1: X86 CPU on Windows 结果范例2: Arm CPU on Linux 结果范例3: Arm CPU on Mac OS 提供所支持的指令集信息 结果范例1: X86 CPU on Windows 结果范例2: Arm CPU on Linux 结果范例3: Arm CPU on Mac OS 新增了向量方

    2024年03月17日
    浏览(28)
  • 阿里云RDS标准版(x86) vs 经济版(ARM)性能对比

    阿里云数据库在去年云栖大会上发布了基于阿里倚天芯片(ARM架构)的RDS实例,后正式命名为经济版。本文通过标准的sysbench测试,来看看相比与标准版,经济版是否更加“经济”,以帮助开发者选择适合自己的规格。 这里选择了用户较为常用的4c16g的规格进行测试,测试工

    2024年02月02日
    浏览(32)
  • 华为云RDS通用型(x86) vs 鲲鹏(ARM)架构的性能对比

    之前,我们对比了阿里云RDS的经济版(ARM)与x86版的性价比,这次我们来看看华为云的RDS MySQL的“通用型”(x86)与“鲲鹏通用增强型”(ARM)版本的情况如何。 这里依旧选择了用户较为常用的4c16g的规格进行测试,测试工具使用了sysbench的oltp_read_write模型进行测试。配置参数与选

    2024年02月03日
    浏览(34)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包