3.9分别说明下列每组指令中的两条指令的区别。
①MOV AX, TABLE
LEA AX, TABLE
②AND BL, OFH
OR BL, 0FH
③JMP SHORT L1
JMP NEAR PTR L1
④MOV AX, [BX]
MOV AX, BX
⑤SUB DX, CX
CMP DX, CX
⑥MOV [BP][SI] , CL
MOV DS: [BP][SI] , CL
答:①第一条指令将变量名TABLE确定的
一个字数据传送到AX中;
第二条指令取变量名TABLE的16位有效
地址值传送到AX中。
②第一条指令将BL中的内容和立即数
0FH相与,结果回送到BL中;
第二条指令将BL中的内容和立即数0FH 相或,结果回送到BL中。
③第一条指令为段内无条件短程转移,跳
转的范围不得超过带符号的8位二进制数
表示的字节范围;
第二条指令为段内无条件近程转移,跳转的范围不得超过带符号的16位二进制
数表示的字节范围。
④第一条指令源操作数为存储器,将BX 的内容确定的相邻两个存储单元中的内容传送到AX 中;
第二条指令源操作数为寄存器,将BX的
内容传送到AX中。
⑤第一条指令将DX的内容减去CX的内容,结果回送到DX中;
第二条指令只是将DX的内容和CX的内容相减作大小比较,不回送结果。
⑥第一条指令将CL的内容传送到堆栈段中由
BP+SI确定的单元中;
第二条指令将CL的内容传送到数据段中
由BP+SI确定的单元中
2.6什么是逻辑地址?什么是物理地址?在实模式下,如何求存储器的物理地址?设一
个16字的数据存储区,它的起始地址为70A0H DDF6H.。写出这个数据区的首字单元和
末字单元的物理地址。
答:(1)逻辑地址由段基址(存放在段寄存器中)和偏移地址(由寻址方式提供)两部分构成,它们都是无符号的16位二进制
数。逻辑地址是用户进行程序设计时采用的地址。(2)物理地址是1M内存空间中每个存储
单元惟一的地址,由20位二进制数构成。物理地址是CPU访问内存时使用的地址。
当用户通过编制程序将16位逻辑地址送
入CPU
的总线接口部件BIU时,地址加法器通过地址运算变换为20位的物理地址。
(3)20位物理地址的计算公式为:
物理地址=段基址x 16+偏移地址
首字单元的物理地址=70A0HX 16+DDF6H
=7E7F6H
末字单元的物理地址=7E7F6H+20H- 2
=7E816H-2
=7E814H
3.1分别指出下列指令中源操作数和目标操作数的寻址方式。
①MOV SI, 100 寄存器立即数
②MOV CX, DATA[SI]寄存器寄存器间接
③ADD AX, [BX][DI] 寄存器基址加间址
④SUB AH, DH寄存器寄存器
⑤AND DL, [BX+SI+20H] 寄存器基址加
间址
⑥MOV [BP+1054H], AX 基址寄存器寄存
器
⑦OR [DI+3000H], BX寄存器间接寄存器
⑧XOR [BP+SI], AL 基址加间址寄存器
⑨MOV EAX, EBX寄存器寄存器
⑩MOV EAX, [ECX][EBX] 寄存器基址加间
址
11 MOV EAX, [ESI][EDX X 2]寄存器基址加比例间址
12 MOV EAX, [ESI X 8]寄存器比例间址
3.2 设DS= 1000H, BX= 2865H, SI =
0120H,偏移量D= 47A8H,试计算下列各种寻址方式下的有效地址,并在右边答案中找出正确
答案,将它的序号填入括号内:
①使用D的直接寻址()A. 2865H
②使用BX的寄存器间接寻址()B.
700DH
③使用BX和D的寄存器相对寻址()C.
47A8H
④使用BX、SI和D的相对基址变址寻址()D.
2985H
⑤使用BX、SI的基址变址寻址()E.
712DH
答:①(C)②(A)③(B)④(E)⑤(D)
3.12编写一程序段,实现下述要求。
①将存储器中1A00H单元中的一个字节数据传送
到1B00H单元中;
②使AX寄存器的低四位清0,其余位不变;
③使AL寄存器的低四位保持不变,高四
位取反;
④使DH寄存器的低四位为1,高四位不变。
答:①MOV AL, [1A00H]
MOV [1B00H], AL
②AND AX, 0FFF0H
③XOR AL, 0F0H
④OR DH, 0FH
3.15试编写出将内存2500H开始的256
个字节单元清0的程序。
答:MOV CX, 256
MOV AL, 0
MOV BX, 2500H
AA: MOV [BX], AL
INC BX
LOOP AA
HLT
4.1将下列左边各项与右边的名词对应起来,找出
正确答案的序号填入括号中。
①使计算机执行某种操作的命令()A.
代码段
②表示计算机执行某种操作的符号()
B. 源程序
③使汇编程序执行某种操作的命令()
C. 汇编程序
④用汇编语言或高级语言编写的程序
( )D.指令
⑤以机器码指令组成的程序()E.伪指
令
⑥指出指令在程序中位置的符号地址
( )F.编译程序
⑦指出数据存储单元的符号地址()G.
目标程序
⑧将高级语言的程序翻译成机器码程序
的实用程序()H.助记符
⑨存放指令机器码的存储器区段()I.
标号
⑩将汇编语言程序翻译成机器码程序的
实用程序()J.变量
答:⑨④⑩①③⑧⑤②⑥⑦
4.10已知:
ORG 0200H
ARY DW -1, 2, -3 , -4
CNT DW $— ARY
VAR DW ARY $+ 4
MOV AX ARY
MOV BX OFFSET VAR
MOV CX CNT
MOV DX VAR+2
LEA SI , ARY
此段程序执行后,
AX= (-1 ) , BX= (020AH), CX= (8 ),
DX=(020AH) , SI =(0200H )
4.11给出符号定义语句如下:
FIRST DB ' ABCD , 3 , ? , 0FH
SECOND DB ?
Y EQU SECON—FIRST
求Y的值是多少?
答:Y的值是7。
4.14对于下面的数据定义,写出各条指令执行后的
结果。
AA DB ?
BB DW 10 DUP (1)
CC DB ' 1 2 3 4 5 '
①MOV AX, TYPE AA AX=()
②MOV AX, TYPE BB AX=()
③MOV CX, LENTH BB CX=()
④MOV CX, LENGTH CC CX=()
⑤MOV BX, SIZE BB BX=()
答:答案如下:
①MOV AX, TYPE AA AX= ( 0001H )
②MOV AX, TYPE BB AX= ( 0002H )
③MOV CX, LENTH BB CX= ( 000AH )
④MOV CX, LENGTH CC CX=( 0001H )
⑤MOV BX, SIZE BB BX= ( 0014 H )
4.15分析下列程序段,指出在什么情况下该段程序
的执行结果为AH=0?
BEGIN: IN AL , 5FH
TEST AL , 80H
JZ EXIT
MOV AH 0
JMP DONE
EXIT : MOV AH , 0FFH
DONE HLT
4.16阅读程序并回答问题:
①在(a) ( b)处填写与其左边指令等效的指令或
指令序列;
②程序的功能是(),所依据的算式是()。
③程序执行后,DEDT单元内容为( )
DATA SEGMENT
BITD DW 128H , 64H , 32H, 16H , 8H , 4H ,
2H , 1H
SOCB DB 0D2H
DEDT DW ?
DATA ENDS
CODE SEGMENT
ASSUME CS CODE DS: DATA
START MOV AX DATA
MOV DS AX
MOV BL, SOCB
LEA SI , BITD (a)
MOVCX 8
MOV AX 0
L1 : SHL BL , 1
JNC L2
ADD AL, [SI]
DAA
MOV DL AL
ADC AH [SI+1]
MOV AL, AH
DAA
MOV AH AL
MOV AL, DL
L2 : ADD SI , 2
LOOP L1 (b)
MOV DEDT AX
MOV AH 4CH
INT 21H
CODE ENDS
END START
答:①(a)MOV SI, OFFSET BITD
(b)LOOPNZ L1 或LOOPNE L1
(执行ADD SI , 2指令,ZF不可能为0,
因而可用此指令代替。)
②程序的功能是:根据给定的逻辑尺0D2H
对数据区BITD中BCD数进行BCD加法;所依据的
算式是(128H + 64H + 16H+ 2H)。
③程序执行后,DEDT单元内容为(210H)4.20
逐条注释下列两个程序的每条指令,并说明它们的
功能:
①LEA BX, ARRAY;取数组ARRAY的偏移
地址并存入寄存器BX
LEA DI , RESULT;取数组RESULT的偏移
地址并存入寄存器DI
MOV CL 4 ;给寄存器CL赋初值4 AGAIN: MOVAL ,
[BX];将数组ARRAY的第一个数存入寄存器AL
TEST AL , 80H ;测试AL的最高位
JZ NEXT ;若AL最高位为0 (正数),转到NEXT
NEGAL ; 若AL最高位为1 (负数),对寄
存器AL 中的
;数求补
NEXT MOV [DI], AL ;将结果存入REAULT
数组
INC BX ; BX值加1, 地址指针指向ARRAY
数组的下
;一个数
INC DI ; DI值加 1
,
地址指针指向RESULT
数组的下
;一个数
DEC CL ;寄存器CL值减1
JNZ AGAIN ;若CL值不为0 ,转向AGAIN继续执行
程序段功能:将数组ARRAY中的4个字节数求补,
结果存入数组RESULT中
②MOV AL , 0 ;将寄存器AL清0
MOV SI , - 1 ;给寄存器SI赋初值-1
MOV CX 100 ;给寄存器CX赋初值100
LOP: INC SI ; SI 力口1
MOV AL, A1[SI];将数据缓冲区A1中的数存入寄存
器AL
ADD AL, A2[SI];将数据缓冲区A2中的相应数与
AL相加
MOV SUM [SI] , AL ;将结果存入数据缓冲区SUM
中
LOOPNZ LOP; 若CX- 1 主 0 且ZF= 0 ,转向
LOP继续执行
JZ NEXT ;若ZF= 1,转向NEXT继续执行ZERO
RET ;子程序返回
NEXT INC CX ;寄存器CX值加1
JMP ZERO ;无条件转向ZERO继续执行程序段功
能:将长度均为100的数据缓冲
区A1和A2中的相应数相加,结果存入数据
缓冲区SUM的相应位置,若相加结果为0
则退出循环。
精品资料