程序的机器级表示(上)

本文深入介绍了程序运行时的数据表示,包括32位环境下各种数据类型的大小和Intel汇编中的数据类型对应。此外,讲解了操作数的三种类型:立即数、寄存器和存储器引用,并通过实例展示其使用。同时,提到了汇编中的条件码寄存器及其在程序执行中的作用。最后,通过一道练习题巩固了汇编知识的理解。

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

这一章主要是讲了程序的运行过程,还有数据的格式格式,前两节就是重点讲了汇编。

要点一

大多数常用数据类型都是作为双子存储的。其中有常见的 int 和 long int,无论有无符号;所有指针都是四字节的双字;当然还有很多,具体的如下表所示(32位为例,64*2就行):

c声明

Intel数据类型

GAS后缀

大小(字节)

char

字节

b

1

short

w

2

int

双字

l

4

unsigned

双字

l

4

long int

双字

l

4

unsigned long

双字

l

4

char *

双字

l

4

float

单精度

s

4

double

双精度

l

8

long double

扩展精度

t

8

所以有时候会看到mov的一些变形:movb 、movw 、movl ,就是分别传送字节、传送字和传送双字。

要点二

在做题之前,要先了解一些概念:

操作数:统共有三种类型,第一种是立即数,也就是常数值;第二种是寄存器,表示的是某个寄存器的内容;第三种是存储器引用,会根据计算出来的地址(即有效地址)访问某个存储器的位置。

以上应该是在学习汇编的过程中就有一些了解的。

题目

 

操作数

%eax

0x100

0x104

0xAB

$0x108

0x108

(%eax)

0xFF

4(%eax)

0xAB

9(%eax,%edx)

0x11

260(%ecx,edx)

0x13

0xfc(,%ecx,4)

0xFF

(%eax,%edx,4)

0x11

这个做题,就按照这张表来算就好:

 

一谈到数据就会牵扯到程序执行时的空间变化还有很多的汇编,例如下面又有一张表:

 

这里还涉及到汇编中的条件码寄存器:

CF:进位标志。

ZF:零标志。

SF:符号标志。

OF:溢出标志。(正负溢出)

那应该怎么用呢?

 

题目

做一道题练手汇编。

A:8048dlc

B:8048CEE

 8048CF0

C:80489D2

D:ff 25表示的是简介跳转,因为读取的地址需要4字节,又因为是小端法,所以是e0 a2 04 08。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值