第4章 MASM汇编语言
1、名词解释
指令 伪指令 宏指令 汇编语句 汇编语言 汇编源程序 汇编程序 汇编 连接程序 连接
答:指令:是CPU可以理解并执行的操作命令。
伪指令:是用于为汇编程序编译时理解程序框架、分配空间(数据定义)等的汇编语句。
宏指令:实质上就是有多条指令打包而成的一组指令的集合。
汇编指令:一行只能写一条汇编语句,一条汇编只能写在一行内。
汇编语言:语句中的表达式是在汇编过程中完成计算的,即翻译之后的机器语言程序中
是不包含表达式的。
汇编源程序:主要有四步,录入源程序、汇编、连接、运行、调试运行。(不准确)
汇编程序:编写汇编程序实质上就是在记住程序框架的基础上填写两空,即数据定义部
分和功能程序部分。
汇编:格式:MASM [[盘符][路径]程序基本名[.ASM]] 建议程序基本名不要省略.
连接程序: 编译器和汇编程序都经常依赖于连接程序,它将分别在不同的目标文件中编译或汇编的代码收集到一个可直接执行的文件中。连接程序还连接目标程序和用于标准库函数的代码,以及连接目标程序和由计算机的操作系统提供的资源
连接:LINK [[盘符][路径]程序基本名[.OBJ]]建议程序基本名不要省略。 2、写出三种汇编语句的基本格式并进行说明。
教材P50
3、由用户取名的名字项有哪些?名字项的取名规则如何?
教材P50
4、请计算下列表达式的值。
答(1) 3+6/3*4 mod 3 ;注意运算优先级,值为5
(2) (M GT N) AND N OR M LE N AND M ;M,N中的较小值
(3) 5 GT 3 (作为8位和16位二进制数各为多少) ;0FFH和0FFFFH (4) 20 AND 77(作为8位和16位二进制数各为多少) ;04H和0004H (5) 5 AND-1 :5 (6) 5 OR-1 ;-l (7) NOT 5 (作为8位和16位二进制数各为多少) ;0FAH和0FFFAH,均为-6
(8) 设有定义如下:
A DB 2,4,6,8 B DW 2,4,6,8
C DW 5 DUP(2,4,6,8)
则TYPE A、TYPE B和TYPE C分别为多少? ;1,2,2 LENGTH A、LENGTH B和LENGTH C分别为多少? ;1,1,5 SIZE A、SIZE B和SIZE C分别为多少? ;1,2,10 5、汇编语言中的数据类型与其他高级语言的数据类型相比较有哪些特点?
6、设有如下定义:
A DB 1101B,34,56Q,78H,4 DUP (?),'ABCD?
请画出内存分配示意图并将其改成内存中存放次序相同的DW及DD的等价定义语句。
答:图自己画。
A DW 220DH,782EH,2 DUP(?),4241H,4443H B DD,782E220DH,?,44434241H
7、一个汇编源程序最多可以定义多少个段?段寄存器与所定义的段之间的对应关系是怎样实现的? 答:最多4个段,通过段对应伪指令ASSUME 段寄存器名:段名来实现的对应。 8、设置一个数据段DATA,其中连续存放6个变量,用段定义语句和数据定义语句写出数据段:
(1)A1为字符串变量:?Example?。
(2)A2为数值字节变量:l00,127,-l,80H,35Q,1101110B。 (3)A3为4个0的字变量。 (4)A4为A3的元素个数。 (5)A5为A3占用的字节数。
(6)A6为Al,A2,A3,A4,A5占用的总字节数。 答:DATA SEGMENT
A1 DB ?Example?
A2 DB l00,127,一l,80H,35Q,ll0111013 A3 DW 4 DUP(0)
A4 DW LENGTH A3
A5 DW A4一A3 ;或SIZE A3 A6 DW $一Al DATA ENDS
9、指出下列每一小题中的伪指令表达的操作哪些是错误的?错误在哪里? 自己做。
10、指令OR AX, 0FC8H OR 563FH中,问两个OR操作分别在什么时候进行?有什么区别?用立即数写出此等价指令。
答:第一个OR是CPU执行指令时完成的操作,第二个OR是汇编程序汇编时完成的操作。
用立即数写出的等价指令是OR AX, 5FFFH。 11、指出下列每一对伪指令语句的区别 自己做。
12、请进行宏与子程序的比较。
教材P60
13、请用流程图表示完整汇编程序的上机过程。
教材P61
14、请默写两段程序的基本框架。
教材P60
15、请写出两字节数据相乘保存于字中的宏定义。 答:参考代码如下:
ABM MACRO OPR1,OPR2,OPR3 ;宏定义,三个形参
PUSH AX PUSH BX
MOV AL,OPR1
MOV BL,OPR2 MUL BL
MOV OPR3,AX POP BX POP AX
ENDM ;宏定义结束
第5章 汇编程序设计
1、程序的三种基本结构是什么?请分别画出各自核心部分的流程图。 P66
2、请画出将1字节二进制数据转化成十六进制数显示的流程图。 自己画
3、编程实现两个字节变量相乘送字变量的程序。 答:DATA SEGMENT
A DB l2H B DB 34H C DW ? DATA ENDS
CODE SEGMENT
ASSUME CS:CODE,DS:DATA START:MOV AX,DATA MOV DS,AX MOV AL,A MUL B
MOV C,AX :C=A×B MOV AH,4CH ;返回DOS INT 21H CODE ENDS END START
4、编程实现从键盘接收2个一位十进制数并计算和显示它们的积。(如输入7和9则显示为:7*9=63) 答:CODE SEGMENT
ASSUME CS:CODE
AGAINl:MOV AH,1 ;录入第一位
INT 2lH CMP AL,'0' JB AGAINl CMP AL,'9' JA AGAINl MOV DH,AL SUB DH,30H
MOV DL,'*? ;显示”*” MOV AH,2 INT 21H
AGAIN2:M0V AH,1 ;录入第二位
INT 21H
CMP AL,?0? JB AGAIN2 CMP AL,?9? JA AGAIN2