🏷️ 知识点:大小端

共 9 道相关题目

模拟卷 年第 13 题 组成原理 选择题

设机器数字长 16 位,有一个 C 语言程序段如下:

A. 50DBH B. BD05H C. A1B6H D. D0DBH

大小端

[tag_link]

正确答案:A

首先,程序中的 `int n = 0xAlB6;` 可能存在笔误,十六进制数字应为 0-9 和 A-F,因此合理推测为 `0xA1B6`。 机器数字长 16 位,因此 `int` 和 `unsigned int` 均为 16 位。

`n` 的初始值为 `0xA1B6`,二进制表示为 `1010 0001 1011 0110`。 作为有符号整数,其最高位为 1,表示负数,但赋值给无符号整数 `m` 时,位模式保持不变,`m` 的初始值同样为 `0xA1B6`(无符号解释为 41398)。

执行 `m = m >> 1;` 时,由于 `m` 是无符号整数,右移操作为逻辑右移,高位补 0。 原始二进制 `1010 0001 1011 0110` 右移一位后变为 `0101 0000 1101 1011`,转换为十六进制为 `0x50DB`。

机器采用大端方式存储,即高位字节在低地址,低位字节在高地址,但内存中的字节顺序不影响值的十六进制表示。 因此,`m` 在内存中的结构对应十六进制值 `50DBH`,与选项 A 一致。


模拟卷 年第 13 题 组成原理 选择题

若数据在存储器中以小端方式存放,则十六进制数 12345678H 按字节地址从小到大依次为( )。

A. 78563412H B. 87654321H C. 12345678H D. 21436587H

大小端

[tag_link]

正确答案:A

小端方式(Little-endian)存储规则为:多字节数据中,最低有效字节存放在最低地址,最高有效字节存放在最高地址。 对于十六进制数 12345678H,这是一个 32 位数据,占 4 个字节,从高到低字节依次为 12H、34H、56H、78H。 按小端方式存放时,地址从小到大依次存储最低有效字节到最高有效字节,即 78H、56H、34H、12H,组合起来即为 78563412H。 因此选项 A 正确。


2016 年第 14 题 组成原理 选择题

某计算机字长为32位,按字节编址,采用小端 (Little Endian) 方式存放数据,假定有一个double型 变量,其机器数表示为1122334455667788H存放在00008040H 开始的连续存储单元中,则存储单0000 8046H中存放的是()。

A. 22H B. 33H C. 66H D. 77H

[tag_link]

正确答案:A

大端模式 :一个字中的高位字节(Byte)存放在内存中这个字区域的低地址处。小端方式:一个字中的低位字节(Byte)存放在内存中这个字区域的低地址处。依此分析,各字节的存储分配如下表所示。

地址00008040H00008041H00008042H00008043H00008044H00008045H00008046H00008047H
内容88H77H66H55H44H33H22H11H

从而存储单元 0000 804 6H 中存放的是 22H。


2020 年第 14 题 组成原理 选择题

在按字节编址,采用小端方式的32位计算机中,按边界对齐方式为以下 C 语言结构型变量 a 分配存储空间。

struct record {
    short x1;
    int x2;
} a;

若 a 的首地址为 2020FE00H,a 的成员变量 x2 的机器数为 12340000H,则其中 34H 所在存储单元的地址是( )。

A. 2020FE04H B. 2020FE07H C. 2020FE05H D. 2020FE06H

[tag_link]

正确答案:C

在 32 位计算机中,按字节编址,根据 小端序 和按 边界对齐 的定义,给出变量 a 的存放方式如下:

2018_Q7_3


2018 年第 15 题 组成原理 选择题

某32位计算机按字节编址,采用小端 ( Little Endian) 方式。若语令“int i=0” 对应指令的机器代码 为“C745FC 00000000”,则语句“int i=-64” 对应指令的机器代码是()。

A.C745 FC C0 FF FF FF

B.C745 FC 0C FF FF FF

C.C745 FC FF FF FF C0

D.C745 FC FF FF FF 0C

[tag_link]

正确答案:A

按字节编址,采用 小端序 ,低位的数据存储在低地址位、高位的数据存储在高地址位,并且按照一个字节相对不变的顺序存储。由题意知机器代码的地址是递减的,存储 0 的位数是后 32 位,那么我们只需要把 -64 的补码按字节存储在其中即可,而 -64 表示成 32 位的十六进制数是 FFFFFF CO, 根据小端方式的特点,高字节存储在低地址,就是 CO FF FF FF, 故选 A。


2019 年第 15 题 组成原理 选择题

某计算机采用大端方式,按字节编址。某指令中操作数的机器数为1234FF00H, 该操作数采用基址寻 址方式,形式地址(用补码表示)为FF12H, 基址寄存器内容为F0000000H, 则该操作数的LSB ( 最低 有效字节)所在的地址是()。

A. F000FF12H B. F000FF15H C. EFFFFF12H D. EFFFFF15H

[tag_link]

正确答案:C

注意,内存地址是无符���数。操作数采用基址寻址方式,EA=(BR)+A,基址寄存器 BR 的内容为 F000 0000H,形式地址用补码表示为 FF12H,即 1111 1111 0001 0010B,因此有效地址为 F000 0000H +(-00EEH) = EFFF FF12H。计算机采用 大端方式 编址,故低位字节存放在字的高地址处,机器数一共占 4 字节,该操作数的 LSB 所在的地址是 EFFF FF12H + 3 = EFFF FF15H,所以选 D。


2025 年第 15 题 组成原理 选择题

某32计算机按字节编址,采用小端方式存放数据,编译器按边界对齐方式为下列 C 语言结构型数组 变量 employee 分配储存空间。

struct record{

int id;

char name[10];

int salary;

}employee[ 200];

数组 employee 的起始地址为0000A0BOH,employee[1].id 的机器数为12345678H, 问 5 6H 的地址是多 少 ? ( ) 。

A.0000 A0C3H

B.0000 A0C4H

C.0000 A0C5H

D.0000A0C6H

[tag_link]

正确答案:C

在 小端方式 下,数据的存放顺序是从最低有效字节到最高有效字节。例如,对于一个 4 字节的整数 12345678H,存放顺序为 78H 56H 34H 12H。首先,我们需要计算 struct record 的大小。根据定义: int id ; 占用 4 字节。char name[10] ; 占用 10 字节。int salary ; 占用 4 字节。总共需要 18 字节。然而,由于编译器按 边界对齐 方式分配存储空间,通常会对齐到最接近的 4 字节边界。因此,struct record 实际上会占用 20 字节(因为 18 需要向上对齐到 20)。数组 employee 的起始地址为 0000A0B0H。employee[1] 的起始地址为 0000A0B0H + 20 = 0000A0C4H 在 employee[1] 中, id 的值为 12345678H,存储在小端模式下: 地址 0000A0C4H ��放 78H 地址 0000A0C5H 存放 56H 地址 0000A0C6H 存放 34H 地址 0000A0C7H 存放 12H 因此,56H 的地址是 0000A0C5H。


2023 年第 44 题 组成原理 综合题

上题中 C 程序段在计算机 M 上的部分机器级代码如下,每个机器级代码行中依次包含指令序号、虚拟地址、机器指令和汇编指令。

for (i = 0; i < 24; i++)
1   00401072  C7 45 F8 00 00 00 00              mov[ebp-8], 0
2   00401079  EB 09                             jmp 00401084h
3   0040107B  8B 55 F8                          mov eax, [ebp-8]
    ...       ...                               ...
7   00401088  7D 32                             jge 004010bch
    for (j = 0; j < 64; j++)
8   0040108A  C7 45 FC 00 00 00 00              mov[ebp-4], 0
    ...       ...                               ...
        a[i][j] = 10;
    ...       ...                               ...
19  004010AE  C7 84 82 00 20 42 00 0A 00 00 00  mov[ecx+edx*4+00422000h], 0Ah
20  ...       ...

请回答下列问题。

(1) 第 20 条指令的虚拟地址是多少?

(2) 已知第 2 条 jmp 和第 7 条 jge 都是跳转指令,其操作码分别是 EBH 和 7DH,跳转地址分别为 0040 1084H、0040 10BCH,这两条指令都采用什么寻址方式?给出第 2 条指令 jmp 的跳转目标地址计算过程。

(3) 已知第 19 条 mov 指令的功能是“a[i][j]←10”,其中 ecx 和 edx 为寄存器名,0042 2000H 是数组 a 的首地址,指令中源操作数采用什么寻址方式?已知 edx 中存放的是变量 j,ecx 中存放的是什么?根据该指令的机器码判断计算机 M 采用的是大端还是小端方式。

(4) 第一次执行第 19 条指令时,取指令过程中是否会发生缺页异常?为什么?

指令寻址方式 大小端 缺页异常

[tag_link]

1)第 20 条指令的虚拟地址为 0040 10B9H。

2)第 2 条 jmp 和第 7 条 jge 指令都采用相对寻址方式。第 2 条指令 jmp 的跳转目标地址 = 0040 1079H+2+09H = 0040 1084H。

3)第 19 条指令中源操作数采用立即(数)寻址方式。根据汇编指令中给出的计算公式 ecx+edx*4+00422000h 可知,ecx 中存放的是 i×256。M 采用小端方式。

4)第一次执行第 19 条指令时,取指令过程中不会发生缺页异常。因为第 19 条指令所在的程序段都在页号为 00401H 的同一个页面中,执行第 19 条指令时,该页已在主存,因而取指令过程中不会发生缺页异常。


2024 年第 44 题 组成原理 综合题

对于题 43 中的计算机 M,C 语言程序 P 包含的语句 sum+=a[i];,在 M 中对应的指令序列 S 如下:

slli r4, r2, 2  // R[r4] <- R[r2]<<2
add r4, r3, r4  // R[r4] <- R[r3]+R[r4]
lw r5, 0(r4)    // R[r5] <- M[R[r4]+0]
add r1, r1, r5  // R[r1] <- R[r1]+R[r5]

已知变量 isum 和数组 a 都为 int 型,通用寄存器 r1 - r5 的编号为 01H-05H。请回答下列问题。

2018_Q7_3

(1)根据指令序列 s 中每条指令的功能,写出存放数组 a 的首地址、变参 isum 的通用寄存器编号(3 分)

(2)已知 M 为小端方式,计算机采用页式存储管理方式。页大小为 4KB。若执行到指令序列 s 中第 1 条指令时,i=5r1r3 的内容分别为 0000 1332H0013 DFF0H。从地址 0013 DFF0H 开始存储单元内容如题 44 图所示。则执行 sum+=a[i]; 语句后。a[i] 的地址、a[i]sum 的机器数分别是什么(用十六进制表示)?a[i] 所在页的页号是多少?在此次执行中,数据组 a 至少存放在几页中?(5 分)

(3)指令 slli r4, r2, 2 的机器码是什么(用十六进制表示)?若数组 a 改为 short 类型,则指令序列存到 S 中 slli 指令的汇编形式应是什么?

汇编代码 虚拟页式管理 大小端

[tag_link]

【答案】

1)a 的首地址存放在 r3i 存放在 r2sum 存放在 r1

2)a[i] 的地址为 0013 E004Ha[i] 的机器数为 FFFF ECDCHsum 的机器数为 0000 000EHa[i] 所在页的页号是 0013EH;数组 a 至少存放在 2 页中。

3)指令机器码为 0021 2213H。汇编形式是 slli r4, r2, 1。【解析】

1)add r4,r3,r4:这条指令将寄存器 r3 和 r4 的值相加,结果存储在寄存器 r4 中。这对应于计算数组元素的内存地址(即&a[i])。因此,我们可以推断出寄存器 r3 存储的是数组 a 的首地址,即 a 的寄存器编号为 03H。slli r4,r2,2:这条指令将寄存器 r2 的值左移 2 位,2 结果存储在寄存器 r4 中。在 C 语言中,这对应于数组索引的计算(即 i*4,因为每个 int 类型占 4 字节)。因此,我们可以推断出寄存器 r2 存储的是变量 i 的值,即的寄存器编号位 02H。add r1,rl,r5:这条指令将寄存器 r1 和 r5 的值相加,结果存储在寄存器 r1 中。这对应于累加操作(即 sum+=a[i])。因此,我们可以推断出寄存器 r1 存储的是变量 sum 的值,即 sum 的寄存器编号为 01H。所以,数组 a 的首地址、变量 i 和 sum 的通用寄存器编号分别为 03H、02H 和 01H。

2)执行 sum+=a[i] 语句后,i 保持不变即 i = 5,每个数组元素占用四个字节

  • i=0 时,a[0] 占据存储单元 FF FF FF 7C
  • i=1 时,a[1] 占据存储单元 70 FE FF FF
  • i=2 时,a[2] 占据存储单元 00 00 00 00
  • i=3 时,a[3] 占据存储单元 3C 02 01 FF
  • i=4 时,a[4] 占据存储单元 FF FF FF 7C
  • i=5 时,a[5] 占据存储单元 F0 F1 00 00
  • i=6 时,a[6] 占据存储单元 DC EC FF FF所以 a[i] 的地址 = 首地址 + 偏移量 = 0013 E000 + 4 * (5-1) = 0013 E004H。a[i]的机器数按照小端编址,所以 DC 作为最低位放在最右边,以此类推可得:a[i] 的机器数 = FFFF ECDCH。sum 的机器数 = 0000 1332H + FFFF ECDCH = (1) 0000 000EH。由于只有 32 位,所以最高位舍掉后答案为 0000 000EH。页大小为 4KB =212 B,所以页内地址占 12 位,去掉后 12 位剩余的则是 20 位页号,a[i] 所在页页号 = 0013EH。我们有 20 位页号,根据题目可知数组跨页号了 0013E 和 0013D,所以数组 a 至少存放在 2 页中。

3)slli r4,r2,2 // R[r4]←R[r2]<<2通用寄存器 r1→r5 的编号位 01H→05H。

  • 6~0:由表可得:0010011
  • 11~7:rd = r2 = 00010
  • 14~12:由表可知为 010
  • 19~15:rd = r4 = 00100
  • 24~20:shamt = 2,可以为 2420:
  • 31~25:由表可知为 000 0000机器码 = 0000 0000 0010 0001 0010 0010 0001 0011B = 0021 2213H。若 a 改为 short 类型,slli 指令的汇编形式应该是 slli r4, r2, 1