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 LENGTHA3
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
13 / 29
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
14 / 29
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 SUB AL,30H
MUL DH ;相乘
AAM ;分离十位和个位 MOV DH,AL ;暂存个位 MOV DL,AH :显示十位 ADD DL,30H MOV AH,2 INT 21H
MOV DL,DH ;显示个位 ADD DL,30H INT 21H
MOV AH,4CH INT 21H CODE ENDS
END AGAINl
5、编程实现从键盘接收两位十六进制数并将其转化为等值的十进制数显示出来(如输入7CH=124,要求至少设计一个子程序)
自己写
6、编程实现三个变量值的排序(分别用无符号数和有符号数处理)。 答:实现A、B、C三个变量从小到大排序的程序如下。 DATA SEGMENT
A DB l2H B DB 34H C DB 23H DATA ENDS
CODE SEGMENT
ASSUME CS:CODE,DS:DATA START:MOV AX,DATA
MOV DS,AX MOV AL,A CMP AL,B
JBE NEXTl ;无符号,有符号用JLE XCHG AL,B
15 / 29
MOV A,AL NEXTl:CMP AL,C
JBE NEXT2 :无符号,有符号用JLE XCHG AL,C MOV A,AL NEXT2:MOV AL,B
CMP AL,C
JBE NEXT3 ;无符号,有符号用JIE XCHG AL,C MOV B,AL
NEXT3:MOV AH,4CH ;返回DOS
INT 21H CODE ENDS
END START
7、编程实现任意个有符号字节数据之和(和要求用字变量存放)。 答:DATA SEGMENT
A DB ………….;任意个字节数据 N EQU $-A ;元素个数 SUM DW ? DATA ENDS
CODE SEGMENT
ASSUME CS:CODE,DS:DATA STAR:MOV AX,DATA MOV DS,AX LEA SI,A XOR DX,DX MOV CX,N AGAIN:MOV AL,[SI】
CBW
ADC DX,AX LOOP AGAIN MOV SUM,DX
MOV AH,4CH:返回DOS INT 21H CODE ENDS
END START
8、编写一个菜单选择处理程序。 自己写
9、编写一子程序实现从某字数组中选出最大值。
答:求数组元素最大值过程名MAX,数组首址为Sl,元素个数为CX,最大值由AX带出。
MAX PROC NEAR PUSH SI PUSH CX
16 / 29