mov 指令用c语言写,汇编总结:mov指令

本文详细介绍了汇编语言中的mov指令,包括不同类型的mov用于完成不同大小的数据复制,并探讨了movs(符号扩展)和movz(零扩展)指令在数据类型转换中的应用,如在C语言中的char、int之间的转换问题。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

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退出进

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值