程序执行完后,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
MOV WORD PTR[BX],50H
(2)请编写指令将数据FFH传送给数据为0的单元。 ADD BX,4
MOV WORD PTR[BX],FFH
7. 下面是一个数据段的定义,请用图表示它们在内存中存放的形式。 DATA SEGMENT
A1 DB 25H,35H,45H A2 DB 3 DUP(5) A3 DW 200,3AB6H A4 DW 3000H,6A6FH DATA ENDS
A1 25H
35H 45H A2 05H 05H 05H A3 00H 02H B6H 3AH A4 00H 30H 6FH
6AH
8. 说明下列语句所分配的存储空间及初始化的数据值。
(1)BYTE_VAR DB ‘BYTE’,21,-42H,3 DUP(0,?,2 DUP(2,3),?) (2)WORD_VAR DW 5 DUP(4,2,0),?,-8,‘BY’,‘TE’256H
BYTE_VAR 42H WORD_VAR 04H 59H 00H
54H 02H 45H 00H 15H 00H 10111110B 00H 0 04H — 00H 2 02H 3 00H 2 00H 3 00H — 04H
0
00H 13
— 2 3 2 3 — 0 — 2 3 2 3 —
02H 00H 00H 00H 04H 00H 02H 00H 00H 00H 04H 00H 02H 00H 00H 00H — — 11111000B 11111111B 42H 59H 54H 45H 56H 02H
9. 在下列数据传送程序段中有些使用不当的语句,请改正之。 A DB 10H,20H,‘OPQ’,4FH B DB N DUP(?) ;改为B DB 6 DUP(?)
MOV DI,A ;改为MOV DI,OFFSET A MOV SI,B ;改为MOV SI,OFFSET B
MOV CX,LENGTH A ;改为MOV CX,LENGTH B CC: MOV AX,[DI]
MOV [SI],AX
INC SI
INC DI
DEC CX ;去掉该句 LOOP CC
10. 以下程序段落拟实现在同一个段内的调用过程,试判断可行性,如不能实现,请改
正。 CODE SEGMENT
14
ASSUME CS:CODE BEGIN:
┇ CALL SUB1 ┇ CALL SUB2 ┇ SUB1 PROC FAR MOV AX,X MOV BX,Y MUL BX RET SUB1 ENDP CODE ENDS
END START
SUB1应为NEAR型,过程SUB2并未定义,应定义SUB2。程序段落改为:CODE SEGMENT
ASSUME CS:CODE BEGIN: ┇ CALL SUB1 ┇ CALL SUB2 ┇ SUB1 PROC NEAR MOV AX,X MOV BX,Y MUL BX RET SUB1 ENDP SUB2 PROC NEAR ?? RET SUB2 ENDP
CODE ENDS
END BEGIN
11. 有一个数据段定义了如下6个变量,请写出该数据段。 (1)BUF1为十进制数字节变量:64; (2)BUF2为字符串变量:‘Teacher’; (3)BUF3为十六进制数字节变量:2FH; (4)BUF4为双字变量:657AH; (5)BUF5为字变量:657AH;
(6)BUF6为二进制数字节变量:10101101B。
15