汇编语言学习-第三章-指令系统与寻址方式

前言:最近在学习汇编语言,使用教材为《汇编语言》(第2版),郑晓薇著。下文的内容为对应章节的练习题、测试题答题记录。只做了部分。

第三章 指令系统与寻址方式

3.1 名词解释:零地址指令,一地址指令,二地址指令。

指令格式为:操作码字段 操作数字段

操作数字段可以有一个、两个或三个、分别称为单操作数指令、双操作数指令、三操作数指令。由于指令执行时要指出操作数的地址,因此又分别称为一地址指令、二地址指令和三地址指令。如果只有操作码,没有操作数,则称为零地址指令。

3.2 分别写出与数据有关的7种寻址方式并举例说明。

  • 立即寻址方式(immediate addressing)

    例:MOV AX,3036H

  • 寄存器寻址方式(register addressing)

    例:MOV AX,BX

  • 直接寻址方式(direct addressing)

    例:MOV AX,DS:[2000H]

  • 寄存器间接寻址方式(register indirect addressing)

    例:MOV AX,[BX]

  • 寄存器相对寻址方式(register relative addressing)

    例:MOV AX,[BX + 1234H]

  • 基址变址寻址方式(based indexed addressing)

    例:MOV AX,[BX + SI]

  • 相对基址变址寻址方式(relative based indexed addressing)

    例:MOV AX,[BX + SI + 1234H]

3.3 已知(BX)=1290H,(SI)=348AH,(DI)=2976H,(BP)=6756H,(DS)=2E92H,(ES)=4D82H,(SS)=2030H,请指出下列指令的寻址方式,并求出有效地址EA和物理地址:

MOV AX,BX
MOV AX,1290H
MOV AX,[BX]
MOV AX,DS:[1290H]
MOV AX,[BP]
MOV [DI][BX],AX
MOV ES:[SI],AX      

解:

MOV AX,BX               # 源操作数为寄存器寻址,EA 无,物理地址 无
MOV AX,1290H            # 立即寻址,EA 无,物理地址 无
MOV AX,[BX]             # 寄存器间接寻址,EA=1290H, 物理地址=2FBB0H
MOV AX,DS:[1290H]       # 直接寻址,EA=1290H, 物理地址=2FBB0H
MOV AX,[BP]             # 寄存器间接寻址,EA=6756H, 物理地址=26A56H
MOV [DI][BX],AX         # 目的操作数为基址变址寻址,EA=3C06H, 物理地址=32526H
MOV ES:[SI],AX          # 寄存器间接寻址,EA=348AH, 物理地址=50CAAH

3.4 寄存器间接寻址方式可以使用哪些寄存器作为间址寄存器?

8086CPU只允许BX、BP、SI、DI这四个寄存器作为间址寄存器

3.5 立即寻址方式和寄存器寻址方式的操作数有物理地址吗?

没有

3.6 什么是段超越?段超越前缀代表什么?

在与内存有关的寻址方式中,操作数的段地址默认为数据段。80X86规定数据除了存放在数据段外还可以存放在其他三种段中。如果操作数载其他段中存放,称为段超越,需要在指令中用段超越前缀指出,即操作数前加上段寄存器名和冒号表示。

3.7 请指出下列指令的错误:

MOV AX,[CX]
MOV AL,1200H
MOV AL,BX
MOV [SI][DI],AX
MOV ES:[DX],CX
MOV [AX],VALUE
MOV COUNT,[SI]      

解:

MOV AX,[CX]         # 错。CX不能为间址寄存器
MOV AL,1200H        # 错。立即数超出8位寄存器范围
MOV AL,BX           # 错。两个操作数不匹配
MOV [SI][DI],AX     # 错。两个变址寄存器不能在一起
MOV ES:[DX],CX      # 错。DX不能为间址寄存器
MOV [AX],VALUE      # 错。AX不能为间址寄存器
MOV COUNT,[SI]      # 错。两个操作数不能都是存储单元

3.8 根据题目要求,写出相应的汇编指令:

(1) 把BX寄存器的值传送给AX
(2) 将立即数15送入CL寄存器
(3) 用BX寄存器间接寻址方式将存储单元中的字与AX寄存器的值相加,结果在 AX中
(4) 把AL中的字节写入用基址变址寻址的存储单元中
(5) 用SI寄存器和位移量VALUE的寄存器相对寻址方式,从存储单元中读出一个字送入寄存器AX。
(6) 将AX中的数与偏移地址为2000H存储单元的数相减,结果在AX中

解:

(1) MOV AX,BX           
(2) MOV CL,15           
(3) ADD AX,[BX]     
(4) MOV [BX+SI],AL      
(5) MOV AX,VALUE[SI]    
(6) SUB AX,DS:[2000H]

3.9 写出用下列寻址方式将存储单元X中的第3个字取出, AX与其相加再放入Y单元的指令序列。

(1)直接寻址
(2)寄存器相对寻址
(3)基址变址

解:

(1)

assembly
ADD AX,[X+4]
MOV Y,AX

(2)

assembly
MOV BX,4
ADD AX,X[BX]
MOV Y,AX

(3)

assembly
MOV BX,4
MOV SI,OFFSET X
ADD AX,[BX+SI]
MOV Y,AX

3.10 在数据寻址方式中,哪种寻址方式的操作数与指令一起存放在代码段?

立即寻址方式中操作数(立即数)和指令一起存放在代码段中

说点什么

This site uses Akismet to reduce spam. Learn how your comment data is processed.

  Subscribe  
提醒