导航菜单
首页 >  r语言期末考试必备100题  > 王爽《汇编语言》期末考试题库(附答案)

王爽《汇编语言》期末考试题库(附答案)

(注:部分答案解析由gpt生成,仅供参考)

单选题

第一章

PC机的最小信息单位是( )。

A. bit     B. 字节    C. 字长       D. 字

A PC机的最小信息单位是比特(bit),常用来表示一位二进制数字(0或1)。字节(byte)是计算机中常用的数据单位,一个字节由8个比特组成。字长(word)是指一个CPU可以一次处理的二进制数的位数。字是在汇编、编程等场合中用来表示数据长度的单位。

一个CPU的寻址能力是8KB,那么它的地址总线的宽度为( )位。

A. 8      B. 3     C. 12     D. 13

一个CPU的寻址能力是8KB,即CPU可以寻址的内存空间大小为8KB。一个字节是8位,因此8KB等于8 x 1024字节,即8192字节。CPU的地址总线宽度决定了CPU可以寻址的内存空间大小,因此,地址总线宽度为log2(8192) = 13位。因此,答案为D。

1个CPU的寻址能力为16KB,那么它的地址总线的宽度为 (   )位。

A. 11                   B. 12                   C. 13                   D. 14

一个CPU的寻址能力为16KB,即CPU可以寻址的内存空间大小为16KB。因为CPU使用地址总线来寻址内存,所以地址总线的宽度就是CPU可以寻址的最大内存空间大小的二进制位数。16KB的二进制表示为2^14,所以地址总线的宽度为14位,答案为D。

1MB的存储器的地址编号从(   )到(   )

A.0~3ff H           B. 1~400 H           C.  0~fffff H    D.  1~100000H

1MB的存储器地址编号从0到0xFFFFF H,因为1MB等于1024KB,而1KB等于1024字节,所以1MB等于1024 x 1024字节,即1,048,576字节。每个字节需要一个地址编号,因此1MB的存储器地址编号从0到1,048,575,用16进制表示即为0x00000到0xFFFFF H。选项A、B、D的地址范围都小于1MB,不符合实际情况。

1TB是 (  ) 个Byte。

A. 2^40     B. 2^30      C. 2^20               D. 2^10

1TB是1万亿字节(10^12 bytes),而1个字节是8位(即1 byte = 8 bits),因此1TB等于8 x 10^12 bits。在计算机中,2的幂次方是常用的计量单位,因此将8 x 10^12 bits转换为2的幂次方,可以得到1TB等于2^40 bytes。因此,答案是A. 2^40。

1MB是(   ) 个Byte。

A. 2^40      B. 2^30      C. 2^20     D. 2^10

1MB是指1兆字节,其中1兆等于2的20次方,即2^20,因此1MB等于2^20个Byte,答案为C。

1KB的存储器的地址编号从(   )到(   )

A. 0~3ff H                   B. 1~400 H          C.  0~fffff H           D.  1~100000H

1KB的存储器共有1024个存储单元,每个存储单元占用1个字节,因此总共有1024个地址编号。由于地址编号是从0开始的,因此该存储器的地址编号从0到1023,用十六进制表示为0x000到0x3FF。因此,选项A是正确的答案。选项B、C、D的地址编号范围都超出了1KB存储器的地址编号范围。

1KB的存储器的可以存储(    )个bit

A. 1024                B. 8×1024                  C. 1000               D. 8000 

1KB的存储器可以存储1024个字节,1个字节等于8个bit,因此1KB的存储器可以存储1024×8=8192个bit。因此,答案为B 。

1GB是 (  B ) 个Byte。

A. 2^40     B. 2^30      C. 2^20               D. 2^10

1GB是2的30次方Byte,即2^30 Byte。因为1GB等于1024MB,1MB等于1024KB,1KB等于1024Byte,所以1GB等于1024*1024*1024 Byte,即2^30 Byte。

8086的数据总线宽度为16根,从内存中读取20字节的数据,8086至少要读 (   )次。

A. 16                   B. 20           C. 10                   D. 5

8086的数据总线宽度为16根,每次可以传输16位数据,即2个字节。要读取20字节的数据,需要进行10次读取,每次读取2个字节。因此,答案为C. 10。

8386的数据总线宽度为32根。从内存中读取20字节的数据,8386至少要读 (   )次。

A. 32                   B. 20           C. 10                   D. 5

8386的数据总线宽度为32根,每次可以传输32位(4字节)的数据。要读取20字节的数据,需要进行5次传输,即 20字节 ÷ 4字节/次 = 5次。因此,答案为D。

在存储器中,数据和程序以_______形式存放。

A. 二进制          B. 八进制          C. 十进制          D. 十六进制

A 在存储器中,数据和程序通常以二进制形式存放。这是因为计算机中的所有数据和指令都是以二进制形式表示的,即由0和1组成的二进制数。计算机的存储器只能存储二进制数,因此数据和程序都需要以二进制形式存储在存储器中。虽然在编程中也可以使用其他进制表示数据和指令,但最终都需要转换为二进制形式才能在计算机中执行。因此,二进制是计算机中最基本的数制。

8086CPU的地址总线的宽度是20位,数据总线的宽度是16位,则8086CPU的寻址能力为(   )。

A.64KB     B.1MB     C.1GB      D.不确定

B 8086CPU的地址总线宽度为20位,可以寻址的地址数量为2的20次方,即1MB。

80386CPU的地址总线宽度为32根,80386CPU的寻址能力是(   )。

A.64KB    B.1024KB   C.16MB      D.4096MB

 80386CPU的地址总线宽度为32根,可以寻址的物理地址空间大小为2的32次方,即4GB。因此,80386CPU的寻址能力为D. 4096MB。

从内存中读取1024个字节的数据,80386CPU至少需要读256次,则80386的数据总线宽度为(   )位。

A.4       B.8     C.16      D.32

 80386 CPU 的数据总线宽度为 32 位。 

从内存中读取 1024 个字节的数据,每次读取的数据宽度为 1 字节,因此需要读取 1024 次。 

80386 CPU 的数据总线宽度为 32 位,每次可以传输 4 个字节,因此每次可以读取 4 个字节的数据。所以,需要读取 1024 次,即需要传输 1024 * 1 字节的数据,共计 1024 * 1 / 4 = 256 次。

8086中,一个字单元可以存储(   )个bit。

A.1    B.8    C.16     D.32

 8086是16位处理器,一个字单元可以存储16个bit,因此答案是C.16。

一个1KB的存储器包含多少个存储单元?可以存储多少个二进制位?(   )

A. 1024,1024    B. 8192,1024     C. 8192,8192     D. 1024,8192

一个1KB的存储器包含1024个存储单元,因为1KB等于1024字节。每个字节由8个二进制位组成,因此一个1KB的存储器可以存储8 x 1024 = 8192个二进制位。因此,答案是选项D,即一个1KB的存储器包含1024个存储单元,可以存储8192个二进制位。

第2~3章

在Debug中,用“d 075A:110  11F”查看内存,结果如下:

075A:0110  B8  00  00  FF  07  00  B8  4C — CD  21  F3  69  20  8A  03  A1 

那么,字型数据 00B8H对应的地址为( )。

A. 076A:11    B. 076A:16       C. 076B:0        D. 无法确定

C cs+ip 075a+0110=076b,第0个

给定段地址为1234H,仅通过变化偏移地址寻址,8086CPU的寻址范围为_________(物理地址)。

A、 12340H~1234FH                    B、 01234H~F1234H          C、 12340H~2233FH            D、 12340H~FFFFFH

8086CPU中的偏移地址是一个16位的值,需要与段地址相加才能得到物理地址。因此只有通过变化偏移地址进行寻址时,物理地址的范围取决于段寄存器的值。

在这个问题中,给定的地址是1234H,仅通过变化偏移地址寻址,这意味着使用的是DS寄存器(或ES、SS、CS)作为段寄存器。因为在实模式下,段寄存器的值左移4位作为段地址,再加上偏移地址,就可得到物理。

偏移地址变化的范围为0~FFFFH,因此:

物理地址的限为12340H (段地址为1234H,加上偏移地址0H);

物理地址上限为2233FH (地址为1234H,加上偏移地址FFFFH)。

因此,选项C:12340H~2233FH是正确的。

给定段地址101H,仅通过变化偏移地址寻址,8086CPU可以寻址到地址为(  )的内存单元。 

         A. 0     B. 12000H      C. 10000H      D. 1FFFFH

C 1010+0~FFFF=1010~1100F

下列寄存器中,(   )是8位寄存器。

A、 AX               B、 BL              C、 CS             D、 DI

下列寄存器中,B. BL 是8位寄存器。

下列寄存器中,(  )是16位寄存器

A、 AX              B、 BL               C、 CH              D、 DL

下列寄存器中,A. AX 是16位寄存器。

下列说法正确的是(  )

A、 AX寄存器不能分为两个8位的寄存器

B、 BP寄存器不能分为两个8位的寄存器

C、 CS可以分为两个8位的寄存器

D、 PSW是一个通用寄存器,可以存放一般性的数据

下列说法正确的是:B

B、 BP寄存器不能分为两个8位的寄存器

BP寄存器(Base Pointer)是一个16位寄存器,不能分为两个8位的寄存器。它通常用于存储堆栈帧的基址。

A、 AX寄存器可以分为两个8位的寄存器。AX寄存器是一个16位寄存器,但可以分为AH(高位)和AL(低位)两个8位寄存器。

C、 CS寄存器不能分为两个8位的寄存器。CS寄存器(Code Segment)是一个16位寄存器,用于存储当前执行指令的代码段的起始地址。

D、 PSW(Program Status Word)并非通用寄存器,它是一种特殊的寄存器,用于存储程序的状态信息,如标志位等。它不能用于存放一般性的数据。

下面指令中,错误的指令是(    )。

A、 MOV  AX,1000                      B、 MOV  AL,BL

C、 MOV  AL,1000                     D、 MOV   DS,AX

错误的指令是:

C、 MOV AL,1000

这指令试图将立即数1000移动到AL寄存器中,但是AL是一个8位寄存器,无法容纳1000这个16位的立即数。正确的写法应该是使用合适的寄存器大小或者有效的立即数。

八位寄存器AL的取值范围是0到255(FFFF H)

下面指令中,错误的指令是(    )。

A、 MOV  AX,100               B、 MOV  BX,AL

C、 MOV  AL,100              D、 ADD  AL,BL

B MOV BX,AL 是错误的指令。由于BX是一个16位寄存器,而AL是一个8位寄存器,无法直接将AL的值移动到BX中。正确的方式应该是使用AX寄存器作为中介,将AL的值先移动到AX,再将AX的值移动到BX。

正确的指令应该是 MOV AX,AL,然后 MOV BX,AX。首先将AL的值移动到AX,然后将AX的值移动到BX

下面指令中,正确的指令是(    )。

A、 MOV  AX,100               B、 MOV  BX,AL

C、 MOV  100,AL            D、 ADD  AL,1234H

A、 MOV AX,100

这条指令将立即数100移动到AX寄存器中,这是有效的。

下面的5条指令执行后,cpu几次修改IP?( )

mov ax,2000H

mov bx,3000h

add ax,bx

sub bx,bx

jmp bx

A、 5                 B、 6                 C、 7                 D、 不确定

指令执行的过程中,CPU会不断地修改IP的值以指向下一条要执行的指令。

执行第 1 条 mov ax, 2000H 指令时,会将下一条要执行的指令地址存储在IP寄存器中,此时IP指向的地址为第2条指令的地址,即 mov bx, 3000h。

执行第 2 条 mov bx, 3000h 指令时,会将下一条要执行的指令地址存储在IP寄存器中,此时IP指向的地址为第3条指令的地址,即 add ax, bx。

执行第 3 条 add ax, bx 指令时,会将下一条要执行的指令地址存储在IP寄存器中,此时IP指向的地址为第4条指令的地址,即 sub bx, bx。

执行第 4 条 sub bx, bx 指令时,会将下一条要执行的指令地址存储在IP寄存器中,此时IP指向的地址为第5条指令的地址,即 jmp bx。

执行第 5 条 jmp bx 指令时,会将下一条要执行的指令地址存储在IP寄存器中,此时IP指向的地址为 bx 中存储的地址,即第2条指令的地址,即 mov bx, 3000h。然而此时bx的值已经为0,因此程序将会无限循环,不再修改IP的值了。

因此,执行这5条指令后,CPU会修改IP 6 次。

代码段寄存器是()

A、 CS               B、 DS               C、 SS               D、 ES

代码段寄存器是 CS(Code Segment Register),CS寄存器中存储着当前程序代码所在的段地址,用于指向CPU需要执行的程序代码段。程序从CS寄存器指向的第一条指令开始,然后按顺序执行指令直到程序结束。

指令指针寄存器是()

A、 AX              B、 BP               C、 IP                D、 DS

指令指针寄存器是 IP (Instruction Pointer)。IP寄存器中存储着下一条要执行的指令的地址。CPU执行完一条指令后,会自动去IP寄存器中读取下一条指令的地址,然后继续执行。

在debug中,查看、修改CPU的寄存器内容是(  )命令。

A、 T                 B、 A                 C、 E                 D、 R

用R命令查看、改变CPU寄存器的内容 用D命令查看内存中的内容 用E命令改写内存中的内容 用U命令将内存中的机器指令翻译成为汇编指令 用T命令执行一条机器指令 用A命令以汇编指令的格式在内存中写入一条机器指令

在debug中,查看内存中的内容是(  )命令。

A、 T                 B、 A                 C、 D                D、 R

D

在debug中,修改内存中的内容是(  )命令。

A、 T                 B、 E                 C、 D                D、 R

B

在debug中,执行CS、IP指向的内存单元处的指令是(  )命令。

A、 T                 B、 E                 C、 D                D、 R

在debug中,执行CS、IP指向的内存单元处的指令是 T 命令。T命令可以单步执行一条指令,执行完后CPU暂停,等待用户的下一个命令。当执行完当前指令后,可以用R命令查看寄存器的值,L命令查看当前指令执行后的内存状态。

存储单元45A0:7CB9H的物理地址为 (   )

A、 45AB9H               B、 4D6B9H                C、 C259H                  D、 47CB9H

假设存储单元的地址线有16根,那么物理地址应该是 `45A0H` 左移4位得到的,即 `45A00H`。加上偏移量 `7CB9H` 得到真实的物理地址为 `45A0H + 7CB9H = 4D69H`。因此,选项B `4D6B9H` 是正确的。

8086CPU中,任意时刻,CPU将( )指向的内容当作指令来执行。

A. DS、SI     B. CS、IP     C. SS、SP      D. ES、DI

B 8086CPU中,任意时刻,CPU将 CS、IP 指向的内容当作指令来执行,即指令指针寄存器 (IP) 存储下一条指令在代码段内的偏移地址,代码段寄存器 (CS) 存储代码段的基地址。CPU 从代码段基地址加上偏移地址,得到指令的物理地址,然后从内存中读取指令并执行。

下列关于Debug的说法,错误的是( )。

A. R命令可以修改寄存器的内容。     B. E命令可以修改内存单元的内容。

C. T命令每次只执行一条指令。       D. D命令可以查看内存单元的内容。

对于8086CPU,错误的指令是(   )。

A. mov ax,bx     B. mov ax,[bx]     C. mov ds,0      D. mov ax,0

对于8086CPU,错误的指令是 C. mov ds,0。在8086CPU中,DS作为一个寄存器用来存储数据段的地址,通常情况下应该将其设置为一个非零的值,而不是直接将其清零。其他三个指令都是合法的:A. mov ax,bx 表示将BX寄存器中的值拷贝到AX寄存器中;B. mov ax,[bx] 表示将BX所指定的内存单元中的值读入AX寄存器中;D. mov ax,0 表示将AX寄存器中的值清零。

以下指令执行后,寄存器ax的值为(   )。

mov ax, 0095h mov ah, 95h add al, ah

A. 9680H    B. 968AH     C. 962AH      D. 952AH

指令的执行过程如下:

1、将0095h赋值给AX寄存器,此时AX的值为0095h; 2、将95h赋值给AH寄存器,此时AX的值为9595h; 3、将AL寄存器和AH寄存器的值相加(95h + 95h = 12Ah),将结果存储在AL寄存器中,此时AX的值变为952Ah。

因此,选项D是正确答案。

关于8086CPU,下列说法错误的是(   )。

A. 是16位结构的CPU,其能够一次性处理传输暂时存储的信息的最大长度是16bit

B. 采用“段地址×16 + 偏移地址 = 物理地址”的方式生成存储单元的地址

C. 执行push指令和pop指令时,8086CPU从SS:SP中得到栈顶的地址

D. 在编程时,可将长度为1KB的一组地址连续,起始地址为32的倍数的内存单元当成栈空间来使用。

选项 D 中的错误在于“起始地址为32的倍数”,而实际上应该是“起始地址为16的倍数”。

在编程时,可以将一些内存单元用作堆栈空间。可以使用任何一个 16 位寄存器(如 SS)来存储堆栈的段地址,然后使用 SP 寄存器来跟踪堆栈指针。对于 8086 CPU,堆栈指针 SP 应该总是指向一个偶数地址。因此,堆栈的大小应该是偶数,并且堆栈的起始地址应该是 16 的倍数。因此,选项 D 中的“起始地址为32的倍数”是错误的。

正确的说法是:在编程时,可将长度为 1KB 的一组地址连续,起始地址为 16 的倍数的内存单元当成栈空间来使用。

此时ax的值为00C5H,执行完“add al,85H”后,ax中的值是多少?(   )

A.0158H    B.014AH    C.0058H    D.004AH

正确答案是 D,即 004AH。因为“add al,85H”指令的含义是将 al 寄存器的值加上 85H,即 al=al+85H。计算 00C5H+85H=00CAH,而 al 只是 ax 的低 8 位,因此在 ax 中保持不变的是高 8 位 ah 的值(为 00H),而低 8 位 al 的值改变为 0CAH。因此,ax 的值为 0CA00H,即 004AH

关于汇编语言中“段”的概念,以下说法错误的是(   )。

A.用mov、add、sub等指令通过偏移地址访问data段中的数据前,应将data段的段地址放在ds中。

B.一个段,可以既是数据段,又是桟段。

C.一个段,不可以既是代码段,又是数据段。

D.一个段中的内容对CPU来说是指令还是数据,关键在于对相关寄存器的设置。

C.一个段,不可以既是代码段,又是数据段。是错误的说法。

在汇编语言中,一个段可以既是数据段,也可以是代码段。但是,同一时刻一个段只能是数据段或者代码段,不能同时是两种类型。

8086PC机一个段的最大长度为(   )。

A.64Byte    B.64Kbit   C.1MB    D.64KB

 8086PC机一个段的最大长度为64KB (D)

以下关于8086CPU的栈机制的说法,错误的是(   )。

A.任意时刻,SS:SP指向栈顶元素。

B.retf指令不会引起栈空间超界。

C.push和pop实质上是一种内存传送指令。

D.8086CPU的栈机制,没有对避免栈空间超界提供支持。                  

 B 栈空间自主管理

设置10000H~1FFFFH的内存空间为栈段,初始状态栈是空的,此时,SS、SP的值是(   )。

A.SS=1000H、SP=FFFEH               B.SS=0H、SP=FFFEH

C.SS=1000H、SP=0                       D.SS=2000H、SP=0

 而栈是空的,SP应该指向栈底的下一个位置20000,  D.SS=2000H、SP=0

完成同指令XCHG AX ,BX 相同功能的指令或指令序列是(    )

A、 MOV AX,BX 

B、 MOV BX,AX 

C、 PUSH AX

POP BX

D、 MOV CX,AX 

MOV AX,BX

    MOV BX,CX 

XCHG是x86汇编语言中的一个指令,用于交换两个寄存器或内存单元的值。其作用是将两个操作数(可以是寄存器或内存单元)的值进行交换。

例如,执行指令"XCHG AX, BX"会交换AX和BX寄存器中的值。在执行该指令后,AX中包含原来BX的值,而BX中包含原来AX的值。

可以使用 MOV AX, BX 和 XCHG AX, BX 指令组合完成和 XCHG AX, BX 相同的功能,指令序列为:

MOV CX, AX MOV AX, BX MOV BX, CX

这个指令序列将 AX 和 BX 的值互换,实现了 XCHG AX, BX 相同的功能。

堆栈段段寄存器是()

A、 CS               B、 DS               C、 SS               D、 ES

 堆栈是一种数据结构,用来存储程序中的临时数据和返回地址等信息。而堆栈段(segment)是指堆栈所在段,即存放堆栈的物理内存区域。堆栈段由堆栈段地址(Segment Address)和堆栈段偏移地址(Stack Offset)组成。堆栈的段地址由堆栈段寄存器(Stack Segment Register)来存储。

因此,答案是C、SS(Stack Segment Register)。

堆栈指针寄存器是()

A、 BP              B、 SP               C、 SS               D、 IP

 堆栈指针(Stack Pointer)寄存器是用来指示当前堆栈的栈顶地址的寄存器。它指向当前堆栈顶部的下一个空闲单元。在访堆栈时,堆栈指针先减1,然后将数据压入堆栈中;在取出数据时,先从堆栈中取出数据,然后堆栈指针再加1。

因此,堆栈指针寄存器的名称是B、SP(Stack Pointer)。

执行一次PUSH指令,SP寄存器将(  )

A、 加1            B、 减1            C、 加2            D、 减2

 执行一次PUSH指令,SP寄存器将减2(D)。因为在8086CPU中,每个栈元素占用两个字节,所以在执行PUSH指令时,先将栈顶指针SP减去2,然后将数据写入到栈顶位置。

执行一次POP指令,SP寄存器将(  )

A、 加1            B、 减1            C、 加2            D、 减2

 执行一次POP指令,SP寄存器将加2(C)。因为在8086CPU中,每个栈元素占用两个字节,所以在执行POP指令时,先将栈顶元素弹出并写入到目标操作数中,然后将栈顶指针SP加上2,指向下一个栈元素。

关于8086CPU堆栈,以下说法不正确的是(    )

A、 操作对象是字                                          B、 堆栈的长度是没有限制

C、 任何时刻,SS:SP指向栈顶元素            D、 堆栈位于内存中

B  个堆栈最大只能设置为64KB

下面指令正确的是(  )

A、 POP  AX             B、 POP  126CH                C、 PUSH  AL           D、 PUSH  AX,BX

 A  

8086系统中,一个堆栈最大可以设置为多少?()

A、 1MB           B、 1KB             C、 64KB           D、 64MB

 8086系统中,一个堆栈最大只能设置为64KB,因为8086只有16位的寻址能力,每个内存地址最大只能表示64KB的内存空间,而堆栈是存储在内存中的,所以一个堆栈的大小最大只能是64KB。所以答案是C、64KB。

如果要将20000h~21001h这段空间设置为堆栈,初始状态栈是空的,应该选择程序段()。

A、MOV  SS,20000H

MOV  SP,21001H

B、MOV  AX,2000H

MOV  SS,AX

MOV  SP,1001H

C、 MOV  AX,2000H

MOV  SS,AX

MOV  SP,1002H

D、 MOV  AX,2000H

MOV  SS,AX

MOV  SP,1000H

 C SS需要用通用寄存器中转,栈空指向栈顶下一位置

设 SP初值为2000H,执行指令"PUSH AX"后,SP的值是()

A、 1FFFH                   B、1998H           C、 2002H                   D、1FFEH

PUSH指令将寄存器或内存单元中的数据压入堆栈中,同时SP的值减2,指向下一个空闲的堆栈单元。

执行指令"PUSH AX"后,将将AX寄存器的值压入堆栈中,同时SP的值减2。因此,最终SP的值应该是2000H-2=1FFEh。所以答案是D、1FFEH。

在debug中,用“d 1000:0  0f”查看内存,结果如下。

1000:0000   89 85 4C ED 38 7B F8 10 -29 8D 44 9D 3E 75 A8 20

若DS=1000H,AX=0,那么汇编指令“MOV   AL,[0008H]”执行完后AX 的值为

A、 0H         B、 2900H               C、 0029H                  D、 0010H

 在debug中,用“d 1000:0  0f”查看内存,结果如下。 1000:0000   89 85 4C ED 38 7B F8 10 -29 8D 44 9D 3E 75 A8 20

若DS=1000H,AX=0,那么汇编指令“MOV   AL,[0008H]”执行完后AX 的值为 D、 0010H。

汇编指令“MOV AL, [0008H]”是将偏移地址为0008H的数据读入AL寄存器中。由于DS=1000H,因此要访问的内存单元地址应该为DS:0008H,也就是10008H。根据给出的内存内容,可以知道10008H处存储的数值为10H,因此执行完“MOV AL, [0008H]”指令后,AL的值为10H,而AX寄存器的高位则保持不变,即为00H。

因此,AX的值为0010H。

在debug中,用“d 1000:0  0f”查看内存,结果如下。

1000:0000   89 85 4C ED 38 7B F8 10 -29 8D 44 9D 3E 75 A8 20

DS=1000H,AX=0,那么汇编指令“MOV   AX,[0008H]”执行完后AX 的值为

A、 1029H                 B、 298DH                 C、 2910H                  D、 8D29H

 C  

在debug中,用“d 1000:0  0f”查看内存,结果如下。

1000:0000   89 85 4C ED 38 7B F8 10 -29 8D 44 9D 3E 75 A8  20

1000:0010   79 87 C4 EF 25 66 F7 40 -A9 BD C4 5D 6E 7F A1 2B

1000:0020   81 15 4D ED 83 B7 8F 1A -89 7D B6 9C 3E 73 A2 21

执行前DS=0,AX=0,BX=0,那么执行下列汇编指令,完后AX 的值为(      )

MOV  AX,1002H

MOV  DS,AX

MOV  AX,[0]

A、 8589H                 B、 8779H                  C、 1581H                  D、 8985H

C  DS:IP 1000:20 

在debug中,用“d 1000:0  0f”查看内存,结果如下。

1000:0000   89 85 4C ED 38 7B F8 10 -29 8D 44 9D 3E 75 A8  20

1000:0010   79 87 C4 EF 25 66 F7 40 -A9 BD C4 5D 6E 7F A1 2B

1000:0020   81 15 4D ED 83 B7 8F 1A -89 7D B6 9C 3E 73 A2 21

执行前DS=0,AX=0,BX=0,那么执行下列汇编指令,完后AX 的值为(      )

MOV  AX,1000H

MOV  DS,AX

MOV  AX,[0]

A、 8589H                 B、 8779H                  C、 1581H                  D、 8985H

 A

有以下几条指令(debug下的指令格式):       mov ax,1000          mov ss,ax          mov sp,0100          mov ax,5CCA          push ax       指令“push ax”执行后,sp的值和修改的内存单元的地址是(   )。 A. 0100H,1000H:0100H      B. 00feH,1000H:00feH    C. 0100,1000:0100    D. 98,1000:98

B sp-2

如果将10000H~1FFFFH这段内存空间当做是栈空间,假设SS=1000H,则下列说法正确的是(   )。  

A.栈空的时候,SP的值为FFFeH         B.栈满的时候,SP的值为0

C.这段栈空间的大小为4KB              D.使用这段栈空间,有可能会出现栈越界

 D. 使用这段栈空间,有可能会出现栈越界:由于栈是向下生长的,在使用栈的过程中,如果向栈中压入的数据超出了栈的大小,就会出现栈溢出(stack overflow)的情况,从而导致程序异常终止。因此,在使用这段栈空间时,有可能会出现栈越界的问题。

给定段地址为1001h,则8086CPu可以寻址到物理地址为(   )的内存单元。

A.0      B.20000H       C.10000H         D.20010H

CPU传递到地址总线上的地址是(   )。

A.逻辑地址     B.偏移地址    C.物理地址     D.段地址

CPU传递到地址总线上的地址是物理地址。

在使用分段机制的8086处理器中,CPU产生的地址有两个部分,一个是段地址,另一个是偏移地址,它们通过一定的计算得出最终的物理地址。但是,当CPU需要访问内存时,会将最终得到的物理地址直接传递到地址总线上,由内存控制器根据物理地址来确定要访问的实际内存单元。因此,CPU传递到地址总线上的地址是物理地址。

关于8086CPU的几个寄存器,正确的说法是(   )。

A.可将BX当成两个8位寄存器,在偏移地址范围为0~255时,可以用“mov ax,[bl]”来实现将内存中的数据读到ax中

B.可以用“byte ptr”实现将SI当成两个8位寄存器使用

C.可将AX、BX、CX、DX当成8个8位寄存器使用

D.AX、ah、al是不同的寄存器,指令“add al,bl”的执行不会影响AX的值

B 可以用“byte ptr”实现将SI当成两个8位寄存器使用。

在x86汇编语言中,可以使用“byte ptr”、“word ptr”、“dword ptr”等关键字作为指令操作数的前缀,以确定所需访问的数据类型。因此,可以使用“byte ptr”将SI寄存器视为单独的8位寄存器来使用。

例如,在8086处理器中,MOV AL,[SI]指令可以用来从存储在DS:SI处的内存单元中读取一个字节。如果想要让SI寄存器被当作两个8位寄存器来处理,可以这样编写指令:

MOV AL, [BYTE PTR SI] MOV AH, [BYTE PTR SI + 1]

这样就可以通过指定“BYTE PTR”前缀,让SI寄存器被视为两个独立的8位寄存器,分别对应着存储在DS:SI和DS:SI+1处的内存单元。

下列与8086CPU寻址相关的说法,错误的是(   )。

A.8086CPU有20根地址总线,它的寻址能力为1MB

B.一个物理地址可以对应多个段地址与偏移地址

C.因为段寄存器是16位,所以一个段最大为64KB

D.CPU内部有一个能合成20位地址的地址加法器

B选项与8086CPU寻址相关的说法是错误的。一个物理地址只能对应唯一的段地址与偏移地址。

A选项是正确的,8086CPU有20根地址总线,它的寻址能力为1MB。

C选项是正确的,因为8086CPU在实模式下采用分段机制,每个段最大可以寻址64KB的空间。

D选项是正确的,CPU内部有一个能合成20位地址的地址加法器,用于将段地址和偏移地址组合成物理地址。

以下说法是错误的:

B.一个物理地址可以对应多个段地址与偏移地址。

每个物理地址都只会对应唯一的一个段地址和偏移地址。由于8086CPU使用了分段寻址机制,因此同一个物理地址可能会被不同的段地址和偏移地址组合得到。但是反过来,一个物理地址只有唯一的一个值。

A、C、D三个选项的说法均正确:

A. 8086CPU有20根地址总线,它的寻址能力为1MB。其中,20根地址总线可以寻址2^20个内存单元,即1MB的内存空间。

C. 因为段寄存器是16位,所以一个段最大为64KB。由于使用分段机制时,一个段的大小由段寄存器的值决定,因此,使用16位的段寄存器时,一个段的大小最大为64KB。

D. CPU内部有一个能合成20位地址的地址加法器。在8086CPU中,物理地址由段地址和偏移地址组成,这两个部分经过地址加法器相加后形成20位物理地址。这个地址加法器可以将分段寻址的地址转换为实际物理地址。

以下指令执行后,SP的值为(   )。

mov sp,0

push ss

A.0      B.0fffeh       C.2        D.内存ss:0处的数据的值

 B

执行 mov sp, 0 指令后,SP寄存器的值被赋为0。

接着执行 push ss 指令,将SS寄存器中的值压入栈中。由于在8086CPU中,栈是向下生长的,所以压栈会使SP的值减2。因此,此时SP的值为-2(0xFFFF FFFEH)。

选项B:0fffeh即为上述计算得到的结果,因此答案为B。

用debug的e命令向b810:0010处写入数据,接着用d命令查看,发现b810:0010处并没有刚刚写入的数据,其原因是(   )。

A.此处用于存储系统时间,一直在自动更新

B.debug存在延时,第二次查看即可看到用e命令写入的数据

C.此处处于ROM空间,不可以被改变

D.此处处于显存空间,当屏幕刷新时,此处的数据被更新了

 C

8086CPU中,如果某内存单元的物理地址为4FCE0,其段地址和偏移地址一定不会是(   )。

A.4FC0:00E0    B.4CE0:2EE0    C.40CE:0F00    D.40C0:F0E0

 B 加起来

以下指令执行后,AX寄存器的值是(   )。

mov ax,017ch

add al,0b4h

A.0130H     B.0230H     C.012FH     D.022FH

A 只看低位 7c+b4

第4~6章

一个汇编源程序,从写出到最后被CPU执行,依次经历了哪几步?(   )

A.编译、加载、连接、执行        B.加载、编译、连接、执行

C.连接、编译、加载、执行        D.编译、连接、加载、执行

正确的答案是 D. 编译、连接、加载、执行。

下面是每个步骤的解释:

编译:首先,源程序需要通过编译器进行编译,将高级语言的源代码翻译成机器语言的目标代码。编译过程将源代码转化为可执行的二进制文件。

连接:连接器将编译生成的目标代码与其他必要的库函数或模块进行

相关推荐: