汇编语言程序设计教程(第二版)卜艳萍著 下载本文

ADD AL,BYTE PTR [BX][SI]

(3)用寄存器BX实现寄存器相对寻址方式(位移量为100H),将DX的内容和存储单

元中的一个字相加,和放到存储单元中。 ADD 100H[BX],DX (4)用直接寻址方式(地址为0500H)实现将存储器中的一个字与立即数3ABCH相加,和放回该存储单元中。 ADD [0500H],3ABCH

(5)用串操作指令实现将内存定义好的两个字节串BUF1和BUF2相加后,存放到另一

个串BUF3中的功能。 ??

MOV CX,COUNT MOV SI,OFFSET BUF1 MOV DI,OFFSET BUF3 MOV BX,OFFSET BUF2 AGAIN:LODSB ADD AL,[BX] STOSB INC BX DEC CX JNZ AGAIN ??

9. 指出下列指令中,源操作数及目的操作数的寻址方式。

(1)SUB BX,[BP+35] ;寄存器寻址、寄存器相对寻址 (2)MOV AX,2030H ;寄存器寻址、立即寻址

(3)SCASB ;隐含操作数为寄存器寻址和寄存器间接寻址 (4)IN AL,40H ;寄存器寻址、立即寻址 (5)MOV [DI+BX],AX ;基址加变址寻址、寄存器寻址 (6)ADD AX,50H[DI] ;寄存器寻址、寄存器相对寻址 (7)MOV AL,[1300H] ;寄存器寻址、直接寻址

(8)MUL BL ;寄存器寻址、目的操作数为隐含寄存器寻址

10. 已知(DS)= 1000H,(SI)= 0200H,(BX)= 0100H,(10100H)= 11H,(10101H)=

22H,(10600H)= 33H,(10601H)= 44H,(10300H)= 55H,(10301H)= 66H,(10302H)= 77H,(10303H)= 88H,试分析下列各条指令执行完后AX寄存器的内容。 (1)MOV AX,2500H (AX)=2500H (2)MOV AX,500H[BX] (AX)==4433H (3)MOV AX,[300H] (AX)=6655H (4)MOV AX,[BX] (AX)=2211H (5)MOV AX,[BX][SI] (AX)=6655H (6)MOV AX,[BX+SI+2] (AX)=8877H

11. 判断下列指令是否有错,如果有错,说明理由。 (1)SUB BL,BX ;两个操作数的宽度不一样

9

(2)MOV BYTE PTR[BX],3456H ;将16位的立即数传送到一个字节的内存单元 (3)SHL AX,CH ;移位指令的移位位数用CL给出,不能用CH。 (4)MOV AH,[SI][DI] ;不能用两个变址寄存器来实现寻址操作 (5)SHR AX,4 ;只有当移位位数为1时,才能用立即数表达 (6)MOV CS,BX ;不能对CS实现传送操作

(7)MOV 125,CL ;立即数不能做目的操作数

(8)MOV AX,BYTE PTR[SI] ;源操作数限定为字节,与目的操作数宽度不一致 (9)MOV [DI],[SI] ;两个操作数不能同时为内存数

12. 设(DS)= 1000H,(ES)= 2000H,(SS)= 3000H,(SI)= 0080H,(BX)= 02D0H,

(BP)= 0060H,试指出下列指令的源操作数字段是什么寻址方式?它的物理地址是多少?

(1)MOV AX,0CBH 立即寻址

(2)MOV AX,[100H] 直接寻址,物理地址为:10100H (3)MOV AX,[BX] 寄存器间接寻址,物理地址为:102D0H (4)MOV AX,[BP] 寄存器间接寻址,物理地址为:20060H (5)MOV AX,[BP+50] 寄存器相对寻址,物理地址为:200B0H (6)MOV AX,[BX][SI] 基址加变址寻址,物理地址为:10350H

13. 分别说明下列每组指令中的两条指令的区别.

(1) AND CL,0FH 按位相“与”,高4位为“0000”,低4位保留原值;

OR CL,0FH 按位相“或”,高4位为原值,低4位为“1111”。 (2) MOV AX,BX 将BX寄存器的内容传送到AX寄存器中;

MOV AX,[BX] 将BX寄存器所指的内存单元的内容送AX寄存器中。

(3) SUB BX,CX BX寄存器内容减去CX寄存器的内容,结果送回到BX; CMP BX,CX BX内容减去CX内容,但结果不送回,而根据标志位的情

况做进一步的动作。

(4) AND AL,01H AL内容与01H相“与”,结果为“0000000x”送回AL寄存器;

TEST AL,01H AL内容与01H相“与”,结果为“0000000x”不送回AL寄存器,而根据标志位(ZF)情况做进一步的动作。

(5) JMP NEAR PTR NEXT NEXT所指指令在当前指令的同段内(16位地址范围);

JMP SHORT NEXT NEXT所指指令在当前指令的8位地址范围内。

(6) ROL AX,CL 循环左移,进位标志位不参与循环;

RCL AX,CL 循环左移,进位标志位参与循环。 (7) PUSH AX 将AX内容存入栈顶指针处,即进栈操作;

POP AX 将栈顶内容弹出装入AX寄存器中,即出栈操作。

14. 试分析以下程序段执行完后BX的内容为何?

MOV BX,1030H

MOV CL,3 SHL BX,CL DEC BX

10

程序执行完后,BX=817FH,执行过程如下。

15. 写出下列指令序列中每条指令的执行结果,并在DEBUG环境下验证,注意各标志位的

变化情况。

MOV BX,126BH ADD BL,02AH MOV AX,2EA5H ADD BH,AL SBB BX,AX ADC AX,26H SUB BH,-8

第4章 8086/8088汇编语言

1. 8086汇编语言指令由几部分组成?各部分的作用是什么? [名字] 指令操作符 [操作数] [;注释]

11

名字可以是常量名、变量名、过程名、段名等标识符等,起标识和标记的作用;指令操作符字段说明指令的功能;操作数字段提供指令操作所需要的源数据和目的数据;注释字段用于程序员对语句或程序段落进行解释说明,增加可读性。

2. 请解释变量和标号的含义,两者有何区别?

所定义内存单元的名称为变量,可进行读、写操作,一般为数据区。

标号是某条指令的地址标记,在代码段。 3. 试描述汇编语言源程序的一般结构。 STACK SEGMENT STACK DW 256 DUP(?) STACK ENDS DATA SEGMENT

??

DATA ENDS

CODE SEGMENT

ASSUME CS:CODE,SS:STACK,DS:DATA START:??

??

CODE ENDS

END START

4. 开发汇编语言源程序的主要步骤有哪些? 首先用EDIT等编辑程序产生汇编语言的源程序,源程序是用汇编语言的语句编写的且不能为机器所识别的程序,所以要经过汇编程序加以翻译,因此汇编程序的作用就是把源文件转换成用二进制代码表示的目标文件(称为OBJ文件)。在转换的过程中,如果源程序中有语法错误,则汇编结束后,汇编程序将指出源程序中的错误信息,如非法格式,未定义的助记符、标号,漏掉操作数等。用户还可以用编辑程序来修改源程序中的错误,最后得到无语法错误的目标文件。目标文件虽然已经是二进制文件,但它还不能直接上机运行,必须经过连接程序(LINK)把目标文件与库文件或其他目标文件连接在一起形成可执行文件(EXE文件),才可以在机器上运行。

5. 数值返回运算符有哪几种?简述LENGTH与SIZE的区别。

数值返回运算符有TYPE、LENGTH、SIZE、OFFSET和SEG5种。这些操作符把一些特征或存储器地址的一部分作为数值回送,但不改变原操作数的属性。其中:

TYPE是类型操作符。

LENGTH是分配单元长度操作符。 SIZE是分配字节操作符。 OFFSET是偏移量操作符。 SEG是段基址操作符。

且有关系:SIZE=TYPE*LENGTH。

6. 在BUF1变量中依次存储了5个字数据,接着定义了一个名为BUF2的字单元,表

示如下:

BUF1 DW 8765H,6CH,0,1AB5H,47EAH

BUF2 DW ?

(1)设BX中是BUF1的首地址,请编写指令将数据50H传送给BUF2单元。 ADD BX,10

12