习题五
1.汇编程序和汇编语言源程序有什么区别?两者的作用是什么?
答:汇编程序是对汇编源程序进行编译的系统程序;汇编源程序是编程人员利用汇编语言为解决某些问题而编写的程序。汇编程序用来对汇编源程序进行编译,从而产生目标代码的;而汇编源程序是用来执行程序动作的语句。
2.汇编语言源程序的语句有哪几种?各自的作用是什么?
答:汇编语言源程序是由指令语句、伪指令语句、宏指令语句组成。
指令语句:产生目标代码,是CPU可以执行的能够完成特定功能的语句。
伪指令语句:在汇编程序对源程序汇编期间由汇编程序处理的操作,它可以完成如处理器选择、定义数据、分配存储区、指示程序结束等功能,但不产生目标代码。
宏指令语句:宏指令语句的目的在于简化汇编语言源程序的书写,不能缩小目标代码文件。
3.标号和变量都有什么属性?各属性的作用是什么?
答:有段属性、偏移地址属性和类型属性。
① 段属性:段属性定义了标号和变量的段起始地址,其值是在某一段寄存器中。
② 偏移地址属性:该属性表示标号和变量相距段起始地址的字节数,是一个16位无符号数。
③ 类型属性:对于标号而言:用于指出该标号是在本段内引用还是在其它段中引用。标号的类型有NEAR(段内引用)和FAR(段间引用)两种;对变量而言:其类型属性由定义变量的伪指令DB(定义字节型)、DW(定义字型)、DD(定义双字型)等确定。
4.试叙述汇编语言源程序的上机过程。
答:分四步进行 ① 编辑、②汇编、③ 连接、 ④ 调试。
编辑:用编辑程序(例如EDIT.COM)建立扩展名为.ASM的汇编语言源程序文件。
汇编:用汇编程序(例如MASM.EXE)将汇编语言源程序文件汇编成目标程序文件,其扩展名为.OBJ。如果在汇编过程中出现语法错误,根据错误信息提示(如错误位置、错误类
型、错误说明),用编辑软件重新调入源程序文件进行修改,直至没有出现语法错误,再进行连接程序。
连接:用连接程序(例如LINK.EXE)把目标程序文件转化成可执行文件,其扩展名为.EXE。
调试:用调试程(例如 DEBUG.EXE)序对可执行文件进行调试,直到无错误为止。
此时的可执行文件在DOS命令下直接执行。
5.已知数据段DATA从存储器02000H单元开始,DATA段的定义如下:
DATA SEGMENT
mingmen VAR1 DB 2 DUP(0,1,?)
VAR2 DW 50 DUP(?)
VAR3 DB 10 DUP(0,1,2 DUP(3),4)
DATA ENDS
试求出三个变量经SEG、OFFSET、TYPE、LENGTH、SIZE运算的结果。
答:运算结果如下表所示:
回送符 变量 | SEG | OFFSET | TYPE | LENGTH | SIZE |
VAR1 | 0200H | 0000H | belief1H | 2H | 2H |
VAR2 | 0200H | 0006H | 2H | 32H | 64H |
VAR3 | 0200H | 006AH | 英语四级分值 1H | 0AH | 0AH |
| | | | | |
6.已知数据段定义如下,试采用图示说明各变量在内存的分配情况以及数据的预置情况。
DATA SEGMENT
A1 DB 50,100,2 DUP(0,1)
A2 DB 2 DUP(2,3 DUP(?),10H)
A3 DB ‘happy new year!’
A4 DW 0,2000H
A5 DW ?,‘AB’
DATA ENDS
答:
7.试采用图示说明各变量在内存的分配情况以及数据的预置情况。
DATA SEGMENT
ORG 0100H
B1 DB ?
B2 DW 100
watchguard
B3 DW 2 DUP (0)
COUNT EQU 5
B4 DB COUNT DUP(0,1)
B5 DW ‘12’,‘34’,‘56’
DATA ENDS
答:内存的分配情况以及数据的预置情况见右图
8.已知变量VAR1、VAR2、VAR3定义如下,试分析下面的指令是否正确,若有错误,请进行改正。
DATA SEGMENT
VAR1 DB ?
VAR2 DB 10
VAR3 EQU 100
DATA ENDS
(1) MOV VAR1,AX
(2) MOV VAR3,AX
(3) MOV BX,VAR1
MOV [BX],10
(4) CMP VAR1,VAR2
(5) VAR3 EQU 50
答:(1)类型不匹配,该为:MOV VAR1,AL
(2)立即数不能作为目的操作数,该为:MOV AX,VAR3
(3)第一句类型不匹配,改为:MOV BL,VAR1
第二句未指明存储器操作数的类型,改为:MOV BYTE PTR[BX],10
朋友英文(4)两个存储器操作数之间不能直接作比较,改为:
MOV AL,VAR1
CMP AL,VAR2
(5)符号VAR3 已被定义,不能重复定义,应去掉。
9.假设VAR1和VAR2为字变量,LAB为标号,试指出下面指令的错误之处,并加以改正。
(1)ADD VAR1,VAR2
答:两存储器操作数之间不能直接相加,改为:MOV AX,VAR1
ADD AX,VAR2
(2)SUB AL,VAR2
答:两操作数类型不匹配,改为:SUB AX,VAR2
(3)MOV CL,VAR1
答:两操作数类型不匹配,改为:MOV CX,VAR1
(4)JMP LAB[SI]
答:相对寄存器寻址,相对位移量不能为标号,因为数据值。改为:JMP 5[SI]
(5)JNZ VAR1
答:条件转移指令转移的目标地址,只能是标号或8位位移量。改为:JNZ LAB
10.试说明下面指令中哪些需要进行PTR说明。
VAR1 DB 10H,100
VAR2 DW 1000
平方英尺(1)MOV AL,VAR1
(2)MOV DH,[BX]
(3)ADD [BX],2
(4)MOV CL,VAR2
(5)SUB AL,VAR1+1
答:(3)、(4)条指令需要进行PTR说明
11.选择题
(1)在顺序结构的流程图中,不包含有( C )。
A)起始框 B)终止框 C)判断框 D)处理框
(2)设AL=0A8H,CX=2,CF=1,执行RCL AL,CL指令后,AL=(无正确选项)。
A)51H B)46H C)47H D)0C5H
注:正确的结果为:AL=0A3H
(3)下述指令的执行结果是( C )
MOV AL,0FFH
XOR AL,3FH
A)AL=40H B)AL=20H C)AL=0C0H D)AL=0E0H
12.在AX和DX中存有一个32位带符号数(DX中存放高16位),试编写程序求出它的相反数。
答:程序设计如下:
CODE SEGMENT
ASSUME CS:CODE
START:MOV CX,0
CLC
SBB CX,AX
MOV AX,CX
MOV CX,0
SBB CX,DX
MOV DX,CX
MOV AH,4CH
INT 21H
CODE ENDS
END START
quotations
13.编程实现求S=(X2+Y2)/ Z的值,并将结果放入RESULT单元。(设:X、Y、Z均为字节数,且Z为无符号数)
答:程序设计如下:
DATA SEGMENT
X DB 20H
Y DB 35H
Z DBonaccountof 12H恬不知耻
RESULT DWblindness ?