汇编语言hword、byte如何输出负数,C语言转汇编

问题描述

在练习汇编语言输出两个负数时,使用 .hword和 .byte类型定义输出时会出现高位填充现象如下图:

在这里插入图片描述

整型输出直接是一串无关数串,十六进制输出低位正确高位填充,没有得到我们想看到的-100和-2。

怎么进行数据类型转换呢,来解决这一问题?

C语言我们熟,我们可以用C语言转换成汇编语言然后分析比对

写一个实现相同功能的C代码:

#include<stdio.h>
int main(){
    short a= -100;
    char  b= -2;
    printf("%5d %5d",a,b);
    return 0;
}

先编译,保证能编译成功没有出错,输出的结果是我们想要的

在这里插入图片描述

这时我们就可以把C语言转换成汇编,然后参考C语言内部是怎么把他们转换成功的

C语言转换成汇编语言:(需要先安装交叉编译工具)

arm-linux-gnueabi-gcc -E byte.c -o byte.i
arm-linux-gnueabi-gcc -S byte.i -o bytec.s
C语言转换后的语言与我们写的汇编语言进行比较,发现它在载入地址的时候使用了【ldrsh 和 ldrsb】使得转换成功

在这里插入图片描述

修改我们写的代码,然后观察结果发现问题解决了!

在这里插入图片描述

思考总结

1)在写汇编语言时,当我们出现问题解决不了,可以先写出我们熟悉的C语言代码,然后转换成汇编语言供我们参考分析。

在这个问题中,其实定义的时候可以直接用 .int 类型或 .word类型就不会出现问题,如下图

在这里插入图片描述

将C代码也改成int类型,转换成汇编语言会发现少了类型转换的步骤

2)因此我们可以得出这样一个结论:时间和空间不可兼得,我们在写汇编时,可以用16位的hword类型或8位的type类型定义合适的数据,也就是用时间来换取空间。

  • 21
    点赞
  • 15
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 23
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 23
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

IM汤姆凯特

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值