mov指令的作用:

mov指令可能是汇编里用的最多的指令了,完成c语言里的赋值。

mov指令种类:

1.普通的mov指令

2.做符号扩展的movs

3.做零扩展的movz

1.普通mov的种类有:

movb #完成1个字节的复制

movw #完成2个字节的复制

movl #完成4个字节的复制

movq #完成8个字节的复制

2.movs的种类以及为什么要符号扩展指令?

1.为什么要用符号扩展指令

如果要完成下面的c语言代码

char c = -1;

int i = c;

如果翻译成下面的汇编代码,会发现一个问题

用movb把%al寄存器里的-1,复制到%ebx寄存器,结果变成了255。等等,为什么会这样?

.section .text

.global _start

fmt:

.ascii "%d\n\0"

_start:

movb $-1, %al      #把-1赋值到寄存器al

xorl %ebx, %ebx    #把寄存器%ebx 赋值为0

movb %al, %bl      #把al的值赋值到%ebx寄存器的低8位 (引用%ebx寄存器低8位的方法就是使用%bl寄存器)

xorq %rax, %rax

movl %ebx, %esi

movq $fmt, %rdi

call printf        #调用printf 打印ebx寄存器的内容,会发现输出变成了255

movl $0, %edi      #调用exit退出进程

call exit

接上段,学过原码,补码,反码的同学知道,在二进制的角度看待一个数。其在内存中表示正数,表示负数,依赖机器是怎么解释最高bit位的1。c语言里面signed类型,如果最高bit为1,认为它是一个负数。unsigned类型,始终认为是正数。

回到刚刚的-1变成255的问题。

作为用户,只想在由char 类型转为int,输出还是-1,就这么简单。

(事实上c语言已经做了自动转换,这里的char,int只是指代上面的汇编代码里的类型)

char类型的-1在内存中的表示:11111111

(由于最高bit位为1,且类型为signed,所以解释成-1)

使用movb指令把char类型的-1复制到int类型里:

char类型的-1复制到int类型在内存中的表示:00000000000000000000000011111111

(由于最高bit位为0,且类型为signed,所以解释成255)

int类型的-1在内存中的表示:11111111111111111111111111111111

两边一对比就知道,char复制到int需要把多出来的字节作符号位扩展。

2.movs的种类

movsbw #作符号扩展的1字节复制到2字节

movsbl #作符号扩展的1字节复制到4字节

movsbq #作符号扩展的1字节复制到8字节

movswl #作符号扩展的2字节复制到4字节

movswq #作符号扩展的2字节复制到8字节

movslq #作符号扩展的4字节复制到8字节

3.movz的种类及其作用

1.如果要完成下面的c语言代码

unsigned char c = -1;

unsigned i = c;

printf("%x:%d\n", i, i); //输出 0xff, 255

这时候就是movz指令大显身手的时候。

movb $-1, %al      #%al  = 0xff

movzbl %al, %ebx   #%ebx = 0x000000ff

2.movz指令的种类

movzbw #作0扩展的1字节复制到2字节

movzbl #作0扩展的1字节复制到4字节

movzbq #作0扩展的1字节复制到8字节

movzwl #作0扩展的2字节复制到4字节

movzwq #作0扩展的2字节复制到8字节

movzlq #作0扩展的4字节复制到8字节

练习题

在c语言里char c 赋值给short s 该用上面的什么指令?

在c语言里char c 赋值给unsigned short s 该用上面的什么指令?

在c语言里unsigned char c 赋值给short s 该用上面的什么指令?

在c语言里short s 赋值给char c该用上面的什么指令?

在c语言里unsignedshort s 赋值给char c该用上面的什么指令?

在c语言里unsigned short us 赋值给short s该用上面的什么指令?

友情指示上面的问题想知道结果可以先写好c语言代码,再gcc -S 生成汇编文件查看

mov 指令用c语言写,汇编总结:mov指令相关推荐

  1. c语言编译load,用C语言写汇编代码之LoadLibrary

    用C语言写汇编代码之LoadLibrary 2006-6-6 23:29 9868 用C语言写汇编代码之LoadLibrary 2006-6-6 23:29 9868 用C写一个加载msvcrt.dl ...

  2. mov 指令用c语言写,汇编语言MOV指令:将源操作数复制到目的操作数

    MOV 指令将源操作数复制到目的操作数.作为数据传送(data transfer)指令,它几乎用在所有程序中.在它的基本格式中,第一个操作数是目的操作数,第二个操作数是源操作数: MOV destin ...

  3. scpi指令转换c语言,[C#源代码]使用SCPI指令对通讯端口(RS232/USB/GPIB/LAN)进行仪器编程...

    本文为原创文章.源代码为原创代码,如转载/复制,请在网页/代码处明显位置标明原文名称.做者及网址,谢谢!html 本软件是基于NI-VISA/VISA32(Virtual Instrument Sof ...

  4. 汇编指令的学习1——ARM汇编的特点

    以下内容源于朱友鹏<物联网大讲堂>的课程学习,如有侵权,请告知删除. 1.指令和伪指令 指令是CPU机器指令的助记符,经过编译(汇编器加工)后会得到一串10组成的机器码,可以由CPU读取执 ...

  5. 2020-12-4((ARM汇编)mov指令,LDR指令,LDR伪指令)

    首先说明一下 ARM是RISC("reduced instruction set computer",即"精简指令集计算机")结构 x86是CISC(" ...

  6. c51语言语句 指令集,关于 NOP 指令 汇编

    nop函数可以用来延时,请问1个NOP延时多少时间,怎么计算? 附一段说明: void _nop( void ); A NOP instruction is generated, before and ...

  7. 写一个关机代码让别人的电脑根据你的指令关机,c语言写小程序恶搞别人

    目录 要求: c语言在电脑上实现控制关机 写关机程序的代码 ​编辑 如何把这个程序让同学运行起来 要求: 运行起来,电脑1分钟内关机,如果输入:我是猪(可以是其他整蛊句子),就取消关机: c语言在电脑 ...

  8. Linux 应用程序 嵌汇编,Linux下C语言嵌汇编

    Using Assembly Language in Linux. Intel和AT&T汇编语法差异: 1.前缀: Intel汇编寄存器和立即数无需前缀.后者寄存器前缀为%,立即数前缀为$. ...

  9. 8086汇编寄存器及指令汇总

    1   寄存器的分类 通用寄存器: ax,bx,cx,dx,(ah,al,bh,bl,ch,cl,dh,dl): sp,bp,si,di 指令寄存器: ip 标志寄存器: FR 段寄存器: cs,ds ...

最新文章

  1. 从 WordCount 到文档的倒排索引详解
  2. MS-SQL分页not in 方法改进之使用row_number
  3. 电脑没网络设备dns服务器没检测到响应,设备或资源dns没检测到有响应 网络无法连接...
  4. android编程fragment,详解Android中Fragment的两种创建方式
  5. hdb interface驱动是什么_Linux USB 鼠标驱动程序详解
  6. flex, swf 不能访问网络/本地资源
  7. map在Sql中的传参 模糊查询limit分页
  8. 利用RazorSQL如何创建SSH密钥
  9. poj[2230]Watchcow 深搜 欧拉回路
  10. 最佳的75个安全检测工具
  11. STC 32位8051单片机开发实例教程 二 I/O工作模式及其配置
  12. ue4 unreal 使用 Download Image 下载图片 下载多张图片 批量下载 类似untiy协程
  13. Android 关于ApplicationInfo flags快速了解
  14. 自己制作机器学习训练和测试使用的二进制数据集(C++)
  15. 使用Markdown进行计划安排(打钩)
  16. JS逆向加密解密工具Crypto Magician、乐易助手、WT-JS 下载使用
  17. excel 点击 计数_跟踪Excel计数功能
  18. IT行业都有哪些职位?工作内容及升职路线
  19. 微信群发消息的三种操作,原来多群群发消息可以这样做
  20. 万物Linux皆可刷安卓,万物皆可Win,开发者成功在安卓手机刷入Win10系统

热门文章

  1. Scrape Center爬虫平台之spa8案例
  2. verilog学习笔记:简单的数据选择器modelsim仿真
  3. 工程师也该学习机器学习了!
  4. 轻松解决夜神逍遥模拟器模拟器等模拟器无法连接问题
  5. excel分列---多页批量操作--vba宏实现
  6. 现在ChatGPT可以使用谷歌插件进行快速交互访问了!
  7. 电脑JAVA打开oracle太慢_oracle官网下载jdk跑不动太慢了,给出快速下载方式mac
  8. Unity 抛物线运动脚本(弓箭轨迹)
  9. D. Serval and Rooted Tree(思维+树形dp+二分辅助)
  10. 局部连接层(Locally-Connected Layer)