第3章 指 令 集
3.1 填空题
1.若8086/8088CPU各寄存器的内容为:AX=0000H,BX=0127H,SP=FFC0H,BP= 
FFBEH,SS=18A2H。现执行以下3条指令: 
① PUSHBX 
② MOVAX,[BP] 
③ PUSH AX 
在执行完第①条指令后,SP=( FFBEH )。在执行完指令③后,AX=( 0127H ), 
BX=( 0127H ),SP=( FFBCH )。
解:每执行一次PUSH指令,堆栈指针SP-2。当BP作为简址寄存器时,默认指向堆栈段。
2.从中断服务子程序返回时应使用( IRET )指令。
3.数据段中28A0H 单元的符号地址为VAR,若该单元中内容为8C00H,则执行指令
“LEA AX,VAR”后,AX的内容为( 28A0H )。
解:28A0H 单元的符号地址为VAR,即表示该单元的偏移地址是28A0H。
4.下列程序执行后,BX中的内容为( C02DH )。 
MOV CL,3 
MOV BX,0B7H 
ROL BX,1 
ROR BX,CL。
解:ROL是不带CF的循环左移指令,RORL是不带CF的循环右移指令。改程序的
功能就是将BX=00B7H 循环右移2位。
5.由ARM 指令基本格式可以看出,ARM 指令通常会有( 3个 )操作数。
解:详见主教材3.5.1节。
3.2 简答题
1.设DS=6000H,ES=2000H,SS=1500H,SI=00A0H,BX=0800H,BP=1200H。
请分别指出下列各条指令源操作数的寻址方式,并计算除立即寻址外的其他寻址方式下源

第3章 指令集 11 
操作数的物理地址。
① MOVAX,BX 
② MOVAX,4[BX][SI] 
③ MOVAL,'B' 
④ MOVDI,ES:[BX] 
⑤ MOVDX,[BP] 
解: 
① 寄存器寻址。因源操作数是寄存器,故寄存器BX就是操作数的地址。
② 基址—变址—相对寻址。
操作数的物理地址=DS×16+SI+BX+4=60000H+00A0H+0800H+4=608A4H 
③ 立即寻址。
④ 寄存器间接寻址。
操作数的物理地址=ES×16+BX=20000H+0800H=20800H 
⑤ 寄存器间接寻址。
操作数的物理地址=SS×16+BP=15000H+1200H=16200H 
2.试说明指令“MOVBX,5[BX]”与指令“LEABX,5[BX]”的区别。
解:前者是数据传送类指令,表示将数据段中以(BX+5)为偏移地址的16位数据送寄存
器BX。后者是取偏移地址指令,执行的结果是BX=BX+5,即操作数的偏移地址为BX+5。
3.设DS=202AH,CS=6200H,IP=1000H,BX=1200H,位移量DATA=2,内存数据
图3-1 内存数据段
段BX指向的各单元内容如图3-1所示。试确定下列转移指令
的转移地址。
①JMPBX 
②JMP WORDPTR[BX] 
③JMPDWORDPTR[BX+DATA] 
解:转移指令分为段内转移和段间转移,根据其寻址方式的
不同,又有段内直接转移和间接转移,以及段间直接转移和间接
转移地址。对直接转移,其转移地址为当前指令的偏移地址(即
IP的内容)加上位移量或由指令中直接得出;对间接转移,转移
地址等于指令中寄存器的内容或由寄存器内容所指向的存储单
元的内容。
① 段内间接转移。
转移目标的偏移地址=BX=1200H,段地址=CS=6200H 
② 段内间接转移。
转移目标的偏移地址为BX所指字单元的内容=2211H,段地址=CS=6200H 
③ 段间间接转移。
转移目标为BX+2所指4个字节单元的内容,即偏移地址=4433H,段地址=6655H 
4.比较无条件转移指令、条件转移指令、调用指令和中断指令的异同。
解:无条件转移指令的操作是无条件地使程序转移到指定的目标地址,并从该地址开
始执行新的程序段,其转移的目标地址既可以在当前逻辑段,也可以在不同的逻辑段;条件

12 微型计算机原理与接口技术题解及实验指导(第5版) 
转移指令是在满足一定条件下使程序转移到指定的目标地址,其转移范围很小,只能当前在
逻辑段的-128~+127地址范围内。
调用指令是用于调用程序中常用到的功能子程序,是在程序设计中就设计好的。根据
所调用过程入口地址的位置可将调用指令分为段内调用(入口地址在当前逻辑段内)和段间
调用。在执行调用指令后,CPU 要保护断点。对段内调用是将其下一条指令的偏移地址压
入堆栈,对段间调用则要保护其下一条指令的偏移地址和段基地址,然后将子程序入口地址
赋给IP(或CS和IP)。
中断指令是因一些突发事件使CPU 暂时中止它正在运行的程序,转去执行一组专门
的中断服务程序,并在执行完后返回原被中止处继续执行原程序,它是随机的。在响应中断
后CPU 不仅要保护断点(即INT指令下一条指令的段地址和偏移地址),还要将标志寄存
器FLAGS压入堆栈保存。
5.说明以下程序段的功能: 
STD 
LEA DI,[1200H] 
MOV CX,0F00H 
XOR AX,AX 
REP STOSW 
解:按减地址方向,将附加段中偏移地址为1200H 单元开始的F00H 个字单元清0。
6.x86处理器主要新增了哪些类型指令? 
解:x86的32位指令集在16位指令集基础上,除增强了部分8086指令的功能外,还新
增了包括串输入输出、字节交换、条件传送等指令(详见主教材表3-8)。
x86-64指令集是x86-32指令集的超集,它将操作数扩展为64位,并陆续增加了多媒体
扩展指令集MMX、SSE、SSE2等扩展指令集,增强了处理器的多媒体、图形图像和Internet 
等的处理能力。
7.比较Intel指令集与ARM 指令集指令在格式上的主要区别。
解:相比于Intelx86指令集,ARM 指令集在格式上允许2个或3个操作数,并增加了
条件码和后缀两个可选项。
3.3 编程题
1.按下列要求写出相应的指令或程序段。
(1)写出两条使AX内容为0的指令。
(2)使BL寄存器中的高4位和低4位互换。
(3)屏蔽CX寄存器的11位、7位和3位。
(4)测试DX中的0位和8位是否为1。
解:(1)MOVAX,0 
XORAX,AX ;AX寄存器自身相异或,可使其内容清0 
(2)MOVCL,4

第3章 指令集 13 
ROLBL,CL ;将BX内容循环左移4位,可实现其高4位和低4位的互换
(3)ANDCX,0F777H ;将CX寄存器中需屏蔽的位“与”0 
(4)ANDDX,0101H ;将需测试的位“与”1,其余“与”0屏蔽掉
CMPDX,0101H ;与0101H 比较
JZONE ;若相等则表示b0和b8位同时为1,此时ZF=1,若ZF=1 
转向ONE 
. 
2.编写程序,实现将+46和-38分别乘以2。
解:因为对二进制数,每左移一位相当于乘以2,右移一位相当于除以2。可以用移位
指令或乘、除运算指令实现。为方便理解,这里先将十进制数46和-38转换为十六进制
数,并对-38取补码。
46=2EH,-38=-26H,[-26H]补=11011010B=DAH 
注:第4章学习完变量定义后,可以直接定义变量为十进制数,并可以直接定义为负
数,如-38。数制转换和求补码的工作由汇编程序(汇编语言的编译程序)自动完成。
程序代码如下: 
MOV AL,2EH 
SHL AL,1 ;AL×2→AL 
MOV BL,0DAH 
SAR BL,1 ;BL×2→BL。用算术移位指令实现符号数移位
3.编写程序,统计BUFFER为首地址的连续200个字节单元中0的个数。
解:将BUFFER为首地址的200个单元的数依次与0进行比较,若相等则表示该单元
数为0,统计数加1;否则再取下一个数比较,直到200个单元数全部比较完毕为止。
程序如下: 
LEA SI,BUFFER ;取BUFFER 的偏移地址
MOV CX,200 ;数据长度送CX 
XOR BX,BX ;存放统计数寄存器清0 
AGAIN: MOV AL,[SI] ;取一个数
CMP AL,0 ;与0 比较
JNE GOON ;不为0 则准备取下一个数
INC BX ;为0 则统计数加1 
GOON: INC SI ;修改地址指针
LOOP AGAIN ;若未比较完则继续比较
HLT 
4.写出完成下述功能的程序段。
(1)从地址DS:1200H 中传送一个数据56H 到AL寄存器。
(2)将AL中的内容左移两位。
(3)AL的内容与字节单元DS:1201H 中的内容相乘。
(4)乘积存入字单元DS:1202H 中。
解:(1)MOVDS:BYTEPTR[0012H],56H

14 微型计算机原理与接口技术题解及实验指导(第5版) 
MOVAL,[0012H] 
(2)MOVCL,2 
SHLAL,CL 
(3)MULDS:BYTEPTR[1201H] 
(4)MOVDS:[1202H],AX 
5.设内存数据段中以M1为首地址的字节单元中存放了3个无符号字节数,编写程序, 
求这3个数之和及这3个数的乘积,并将结果分别存放在M2和M3单元中。
解: 
3个数求和: 
LEA SI,M1 
MOV AL,[SI] 
CLC 
MOV CX,2 
L1: INC SI 
ADC AL,[SI] 
LOOP 
MOV M2,AL 
3个数求乘积: 
LEA SI,M1 
XOR BX,BX 
MOV AL,[SI] 
MUL BYTE PTR[SI+1] 
MOV BL,[SI+2] 
MUL BX 
MOV M3,AX 
MOV M3+2,DX 
6.编写程序,利用串操作指令,实现按减地址方向将数据段1000H~1010H 中的内容
传送到附加段从2000H 开始的区域中。
解: 
参考代码如下: 
MOV SI,1010H 
MOV DI,2010H 
STD 
MOV CX,10H 
REP MOVSB 
HLT

第4章 汇编语言程序设计
4.1 填空题
1.将汇编语言源程序转换为机器代码的过程称为( 汇编 ),而要使其能够在计算机
上运行,还需要通过( 链接 )生成可执行文件。
解:所有源程序都需要经过编译和链接才能被CPU 执行。汇编语言源程序的编译称
为汇编。
2.执行下列指令后,AX寄存器中的内容是( 1E00H )。 
TABLE DW 10,20,30,40,50 
ENTRY DW 3 
. 
MOV BX,OFFSET TABLE 
ADD BX,ENTRY 
MOV AX,[BX] 
解:OFFSET是运算符,表示取变量的偏移地址。
3.已知: 
ALPHA EQU 100 
BETA EQU 25 
则表达式ALPHA×100+BETA 的值为( 10025 )。
解:EQU 是符号定义伪指令,含义是用其前边的符号名取代其后表达式的值。
4.执行如下指令后,AX=( 0004 )H,BX=( 0152 )H。 
DSEG SEGMENT 
ORG 100H 
ARY DW 3,4,5,6 
CNT EQU 33 
DB 1,2,CNT+5,3 
DSEG ENDS 
. 
MOV AX,ARY+2 
MOV BX,ARY+10