8086的组成
寄存器位数,数据存储最小单位
关于 8086/8088 微机系列,下列说法哪个是正确的( D )
A. 一个存储单元由 16 个二进制位组成,简称字。
B. 当存储一个字数据时,低字节放高地址位,高字节放低地址位。
C. 在内存中,可以无限分配段,且段的大小不受限制
D. 段与段之间可以邻接,也可以重叠。
解析:
A. 错误:8086/8088微处理器的存储单元是8位的,即一个字节,而不是16位。16位通常指的是数据总线宽度,即一次可以处理16位数据。
- 8086中寄存器位数是16位,但是存储单元中的最小可寻址单元(也叫内存编址的最小单元)是一个字节,是8位,寄存器位数和最小可寻址存储单元位数不同
- 8086中机器存储的最小单位是位,内存编址的最小单位是字节
B. 错误:低地址放低字节,高地址放高字节
C. 错误:在8086/8088微处理器的内存管理中,段的大小是有限制的。段的大小不能超过64KB,这是由于段寄存器(如CS、DS、ES、SS)是16位的,因此段内偏移量的最大值为0xFFFF,即64KB - 1。
D. 正确:在8086/8088微处理器的内存模型中,段与段之间可以邻接,也可以重叠。这是因为段的基地址和偏移量是独立的,段的基地址由段寄存器确定,而偏移量则是由指令或数据操作指定的。因此,不同的段可以设置不同的基地址,并且段内的偏移量可以是任意的,从而允许段与段之间的邻接或重叠。
所以,正确答案是D。
寄存器的种类
IP指令指针寄存器是属于( ) a. 通用寄存器 b. 段寄存器 c. 变址寄存器 d. 控制寄存器
解析:
D
8086的寻址方式
BP寄存器
题1
下列指令中段默认为堆栈段的是( C )
A. MOV AX, [BX+SI+10] B. ADD AX,ES:[SI]
C. SUB BX, [BP][DI] D. MOV DX,[1000H]
A.
MOV AX, [BX+SI+10]
:这是一个使用基址加变址加偏移的寻址方式,但没有指定段寄存器,因此它使用的是默认的数据段寄存器(DS)。
B.
ADD AX, ES:[SI]
:这条指令明确指定了段寄存器ES,因此它使用的是额外段寄存器ES。
C.
SUB BX, [BP][DI]
:这条指令使用了BP和DI寄存器,并且没有明确指定段寄存器。在8086/8088中,当使用BP寄存器作为基址寄存器时,如果没有指定段寄存器,那么默认使用的是堆栈段寄存器(SS)。
D.
MOV DX, [1000H]
:这条指令使用的是立即数寻址方式,直接访问物理地址1000H,没有使用段寄存器。
题2
MOV AX ,[BP+100H][SI]这种虽然同时出现BP(默认SS)和SI(默认DS),但是以SS作为段地址
基址寄存器2个:BP和BX二选一
变址寄存器2个:SI和DI二选一
不同寻址方式
题1
MOV AX, ES:[1000H] 源操作数的寻址方式是( C )
A.立即寻址 B.寄存器寻址 C. 直接寻址 D.基址寻址
解析:
注意汇编中寻址方式与计组中区分,汇编中是七种
题2
设 (DS)=2000H, (BX)=0200H, (SI)=0002H, (20200H)=12H, (20201H)=FFH,(20202H)= 56H,(20203H)= 78H, (21200H)= 2AH, (21201H)= 00H,(21202H)=B7H,(21203H)=65H,试说明下列各条指 令执行完后AX 寄存器中的内容是多少? (1)MOV AX,0400H (AX)=___________ (2)MOV AX,BX (AX)=___________ (3)MOV AX,[BX] (AX)=___________ (4)MOV AX,[BX+1000H] (AX)=___________ (5)MOV AX,[BX+SI] (AX)=___________
解析:
- 注意段地址
- 注意是传1个字节还是1个字
0400H
0200H
(3)、(4)、(5)有坑
FF12H
002AH
7856H
题3
15、写出把首地址为BLOCK的字数组的第6个字送到DX寄存器的指令。要求使用以下几种寻址方式:
寄存器间接寻址
寄存器相对寻址
基址变址寻址
解析:
寄存器间接寻址:寄存器中存放的就是偏移地址
寄存器相对寻址:寄存器中存放的是一个数组的第一个元素的偏移地址,要获得这个数组其他元素需要加上相对偏移距离或者寄存器中存放这个数组其他元素相对于第一个元素的偏移距离,然后加上第一个表示
基址变址寻址:以BX记录基址,DI/SI记录偏移地址
1 | (1) |
注意word ptr
用位移量为0524H的直接寻址方式把存储器中的一个字与数2A59H相加,并把结果送回存储单元中。
解析:
MOV WORD PTR [0524H], 2A59H
寻址中label的使用
MOV AX, WORD PTR NAMES + 1
比如NAMES DB 'HELLO WORLD'
将NAMES汇编成NAMES这个数组的首地址,指令执行完会得到NAMES数组中的第二个元素E
相当于下面两条指令
LEA SI, NAMES
MOV AX, [SI]
不同寄存器的限制
INC [AX] ()
解析:
错误,能在寻址的时候使用的寄存器只用两个基址寄存器BX/BP,两个变址寄存器DI/SI
概念判断
- 汇编语言是用符号表示的面向机器的语言,因此它是机器语言。 ( )
错误
汇编语言是一种低级别的编程语言,它使用助记符(例如,MOV
、ADD
)来表示机器指令,这些指令直接对应于计算机的操作码。机器语言是计算机硬件直接能够理解和执行的二进制指令。
- 汇编语言是一种高级语言,其程序源代码必须编译成目标代码,程序才能执行。
错误
这个说法是错误的。汇编语言实际上是一种低级别的编程语言,而不是高级语言。让我来解释一下:
- 汇编语言:
- 汇编语言是一种符号化的机器语言。它使用助记符(例如,
MOV
、ADD
)来表示机器指令,这些指令直接对应于计算机的操作码。 - 程序员编写的汇编程序源代码需要经过汇编器的处理,将其转换为机器码(目标代码)。这个过程称为汇编。
- 汇编语言程序不需要像高级语言那样进行完整的编译过程,因为它们已经接近于底层的机器指令。
- 汇编语言是一种符号化的机器语言。它使用助记符(例如,
- 高级语言:
- 高级语言(例如C、Java、Python)是相对于汇编语言的概念。它们更接近人类自然语言,具有更高的抽象级别。
- 高级语言的程序源代码需要经过编译器的处理,将其转换为机器码。这个过程称为编译。
- 高级语言程序的执行不需要直接生成机器码,而是通过解释器或虚拟机来执行。
因此,汇编语言不是高级语言,它不需要完整的编译过程,而是通过汇编器将源代码转换为机器码。高级语言的编译过程更复杂,需要将源代码转换为目标代码,然后再执行。
- 汇编语言是最快最有效的计算机语言,在自动控制、通信与接口中是必不可少的。 ( )
正确
- 汇编语言与机器低层关系不大,所以它具有很好的移植性。 ( )
错误
虽然汇编语言相对于高级语言来说较低级,但它与机器的关系非常密切,因此移植性并不总是很好
- 将汇编语言源代码转换成机器目标代码的过程称为编译。 ( )
错误
将汇编语言源代码转换成机器目标代码的过程称为汇编,而不是编译。让我来解释一下:
- 编译:
- 编译是将高级语言(例如C、Java)源代码转换为机器目标代码的过程。
- 编译器将高级语言源代码分析、优化,并生成与目标平台(计算机体系结构和操作系统)兼容的目标代码。
- 目标代码可以直接在目标平台上执行,而不需要进一步的转换。
- 汇编:
- 汇编是将汇编语言源代码转换为机器目标代码的过程。
- 汇编器将汇编语言源代码翻译成机器码(操作码),这些指令直接对应于计算机硬件的操作。
- 汇编语言程序员编写的源代码需要经过汇编器处理,生成可执行的目标代码。
因此,编译是高级语言到目标代码的过程,而汇编是汇编语言到目标代码的过程。