______________________________________________________________________________________________________________
3.9 分别说明下列每组指令中的两条指令的区别。 ① MOV AX, TABLE LEA AX, TABLE ② AND BL, 0FH 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 位物理地址的计算公式为: 物理地址=段基址×16+偏移地址 首字单元的物理地址=70A0H×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×2] 寄存器 基址加比例间址 12 MOV EAX, [ESI×8] 寄存器比例间址 3.2 设DS=1000H, BX=2865H, SI=0120H,偏移量D=47A8H,试计算下列各种寻址 ② MOV AX,TYPE BB AX=( ) 方式下的有效地址,并在右边答案中找出③ MOV CX,LENTH BB CX=( ) 正确答案,将它的序号填入括号内: ④ MOV CX,LENGTH CC CX=( ) ① 使用 D 的直接寻址 ( ) A. 2865H ⑤ MOV BX,SIZE BB BX=( ) ② 使用 BX 的寄存器间接寻址 ( ) B. 答:答案如下: 700DH ① MOV AX,TYPE AA AX=( 0001H ) ③ 使用 BX 和D 的寄存器相对寻址 ( ) C. ② MOV AX,TYPE BB AX=( 0002H ) 47A8H ③ MOV CX,LENTH BB CX=( 000AH ) ④ 使用 BX、SI 和D 的相对基址变址寻址 ④ MOV CX,LENGTH CC CX=( 0001H ) ( ) D. 2985H ⑤ MOV BX,SIZE BB BX=( 0014 H ) ⑤ 使用 BX、SI 的基址变址寻址 ( ) E. 4.15 分析下列程序段,指出在什么情况下712DH 该段程序的执行结果为AH=0? 答: ① (C)② (A)③ (B)④ (E)BEGIN: IN AL,5FH ⑤ (D) TEST AL,80H 3.12 编写一程序段,实现下述要求。 JZ EXIT ① 将存储器中1A00H 单元中的一个字节MOV AH,0 数据传送到1B00H 单元中; JMP DONE ② 使 AX 寄存器的低四位清0,其余位不EXIT: MOV AH,0FFH 变; DONE: HLT ③ 使 AL 寄存器的低四位保持不变,高四4.16 阅读程序并回答问题: 位取反; ① 在(a)(b)处填写与其左边指令等效④ 使 DH 寄存器的低四位为1,高四位不的指令或指令序列; 变。 ② 程序的功能是( ), 答:① MOV AL, [1A00H] 所依据的算式是( )。 MOV [1B00H], AL ③ 程序执行后,DEDT 单元内容为( )。 ② AND AX, 0FFF0H DATA SEGMENT ③ XOR AL, 0F0H BITD DW 128H,64H,32H,16H,8H,4H,④ OR DH, 0FH 2H,1H 3.15 试编写出将内存2500H 开始的256 SOCB DB 0D2H 个字节单元清0 的程序。 DEDT DW ? 答:MOV CX, 256 DATA ENDS MOV AL, 0 CODE SEGMENT MOV BX, 2500H ASSUME CS:CODE,DS:DATA AA: MOV [BX], AL START:MOV AX,DATA INC BX MOV DS,AX LOOP AA MOV BL,SOCB HLT LEA SI,BITD (a) 4.1 将下列左边各项与右边的名词对应起MOV CX,8 来,找出正确答案的序号填入括号中。 MOV AX,0 ① 使计算机执行某种操作的命令 ( )A.L1: SHL BL,1 代码段 JNC L2 ② 表示计算机执行某种操作的符号 ( )ADD AL,[SI] B.源程序 DAA ③ 使汇编程序执行某种操作的命令 ( )MOV DL,AL C.汇编程序 ADC AH,[SI+1] ④ 用汇编语言或高级语言编写的程序 MOV AL,AH ( )D.指令 DAA ⑤ 以机器码指令组成的程序 ( )E.伪指MOV AH,AL 令 MOV AL,DL ⑥ 指出指令在程序中位置的符号地址 L2: ADD SI,2 ( )F.编译程序 LOOP L1 (b) ⑦ 指出数据存储单元的符号地址 ( )G.MOV DEDT,AX 目标程序 MOV AH,4CH ⑧ 将高级语言的程序翻译成机器码程序INT 21H 的实用程序 ( )H.助记符 CODE ENDS ⑨ 存放指令机器码的存储器区段 ( )I.END START 标号 答:①(a)MOV SI, OFFSET BITD ⑩ 将汇编语言程序翻译成机器码程序的(b)LOOPNZ L1 或LOOPNE L1 实用程序 ( )J.变量 (执行 ADD SI,2 指令,ZF 不可能为0,答:⑨④⑩①③⑧⑤②⑥⑦ 因而可用此指令代替。) 4.10 已知: ②程序的功能是:根据给定的逻辑尺0D2H ORG 0200H 对数据区BITD 中BCD 数进行BCD 加法; ARY DW -1,2,-3,-4 所依据的算式是(128H+64H+16H+2H)。 CNT DW $-ARY ③程序执行后,DEDT 单元内容为(210H) VAR DW ARY,$+4 4.20 逐条注释下列两个程序的每条指令,┇ 并说明它们的功能: MOV AX,ARY ① LEA BX,ARRAY ;取数组ARRAY 的偏移MOV BX,OFFSET VAR 地址并存入寄存器BX MOV CX,CNT LEA DI,RESULT ;取数组RESULT 的偏移MOV DX,VAR+2 地址并存入寄存器DI LEA SI,ARY MOV CL,4 ;给寄存器CL 赋初值4 ┇ AGAIN: MOV AL,[BX] ;将数组ARRAY 的此段程序执行后, 第一个数存入寄存器AL AX=( -1 ),BX=(020AH),CX=( 8 ),TEST AL,80H ;测试AL 的最高位 DX=(020AH),SI=(0200H )。 JZ NEXT ;若AL 最高位为0(正数),转4.11 给出符号定义语句如下: 到NEXT FIRST DB ‘ABCD’,3,?,0FH NEG AL ;若AL 最高位为1(负数),对寄SECOND DB ? 存器AL 中的 Y EQU SECOND-FIRST ;数求补 求 Y 的值是多少? NEXT: MOV [DI],AL ;将结果存入REAULT 答:Y 的值是7。 数组 4.14 对于下面的数据定义,写出各条指令INC BX ;BX 值加1,地址指针指向ARRAY 执行后的结果。 数组的下 AA DB ? ;一个数 BB DW 10 DUP(1) INC DI ;DI 值加1,地址指针指向RESULT CC DB ‘1 2 3 4 5’ 数组的下 ① MOV AX,TYPE AA AX=( ) ;一个数
精品资料
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 则退出循环。