3. 试编写一程序段,要求把BL中的数除以CL中的数,并把其商乘以2,最后的结果存入DX寄存器中。
4. 试编写一程序段,要求在长度为100H字节的数组ARRAY中,找出大于42H的无符号数的个数并存入字节单元UP中;找出小于42H的无符号数的个数并存入字节单元DOWN中。
5. 试编写一个程序求出双字节数的绝对值。双字长数在A和A+2单元中,结果存放在B和B+2单元中。
6. 编写程序段,把字符串STRING中的第一个‘&’字符用空格符代替。 STRING DB ‘The date is FEB&03’
7. 下列ASCⅡ码串(包括空格符)依次存储在起始地址为CSTRING的字节单元中: CSTRING DB ‘BASED ADDRESSING’
请编写指令将字符串中的第1个和第7个字符传送给DX寄存器。
8. 若地址偏移量为2000H~2003H有一个4字节的数,现要把该数左移1位,写出完成该操作的程序段。(要求不超过5条指令)
9. 写出对存放在DX和AX中的双字长数求负的指令序列。
10. 用其他指令完成和下列指令一样的功能。
(1) REP MOVSB (2) REP STOSB (3) REPNE SCASB (4) REPE CMPSB
11. 已知一个关于数字“0~9”的ASCⅡ码表,其首地址是当前数据段的TABLE,现要找出数字“3”的ASCⅡ码,试写出用指令XLAT进行转换的指令序列。
12. 编写一程序段,比较两个5字节的字符串OLDS和NEWS,如果OLDS字符串不同于NEWS字符串则执行NEW_LESS;否则顺序执行程序。
13. 已知在N到N+I的存储区中有一组ASCⅡ码字符串(共I+1个),试编写一个汇编语言程序,将此字符串传送到NI到NI+I单元中,并使字符串的顺序与原来的顺序相反。
14. 请说明JMP DI和JMP [DI]指令的区别。
15. 内存数据段存放了100个16位带符号数,首地址为AREA1,要求将各数取绝对值后存入以AREA2为首地址的内存区。试写出程序段。
16. 已知DATA单元为一个16位带符号数的原码形式,试用补码形式表示该数。
17. 在内存的数据段中存放了若干个8位带符号数,数据块的长度为COUNT(不超过255),首地址为TABLE,试统计其中正元素、负元素及零元素的个数,并分别将个数存入PLUS、MINUS和ZERO单元中。
18. 编写程序将ELEMS中的100个字节数据的位置颠倒过来(即第一个字节和第100个字节的内容交换,第二个字节和第99个字节的内容交换??)。
六、程序设计题
1.在A1和A2的字单元中为一个带符号的双字长数据,试求出该双字长数的绝对值,存
入B1和B2的字单元中。
2.测定ALPHA字节变量单元中的ASCⅡ码字符,进行如下操作: (1)若为数字字符,送入NUM字节单元中。
(2)若为大写字母字符,送入BIGCHR字节单元中。 (3)若为小写字母字符,送入SMLCHR字节单元中。 编写出程序段。
3.设在变量单元A、B和C中存放有三个数,若三个数都不为零,则求出三个数之和存入D中;若有一个数为零0,则将其他两个单元也清零,请编写此程序段。
4.若需对某单位职工人数中的男性和女性人数分别进行统计。在人口属性统计表中,男性用“0”表示,女性用“1”表示,要求编程实现。
5.已知两个整数变量A和B,试编写完成下述操作的程序:
(1)若两个数中有一个是奇数,则将奇数存入ABUF单元,偶数存入BBUF单元中。 (2)若两个数均为奇数,则两数分别加1,并存回原变量处。 (3)若两个数均为偶数,则两变量不变。
6.编写一循环结构程序段,完成从LETTER字节存储单元开始,连续存放‘A’-‘Z’共26个字母(数据定义伪指令只定义存储空间,不指定值)。
7.定义一数组GRADE存放有100个学生某门功课的考试成绩,要求编一程序,统计各分数段的人数。即统计90~100分,80~89分,70~79分,60~69分,以及60分以下的各有多少人。
8.试编写一个程序,比较两个字符串STRING1和STRING2所含字符是否完全相同,若相同则显示‘MATCH’,若不同则显示‘NO MATCH’。
9.试编写一个程序段,求出首地址为DATA的100个字数组中的最小偶数,并把它存放于AX中。
10.试编写一个程序段,从键盘上接收一个4位的十六进制数,并在终端上显示出与它等值的二进制数。
11.编写一个汇编语言程序,统计变量X中的值有多少位为1,并记入ONE变量中。
12.设有两个数组A和B,其元素个数均为20个,两数组中的数据都按自小而大的顺序存放,现在要将这两个数组合并成一个数组C,使C数组的数据也按自小而大的顺序存放。
13.试定义宏指令,要求把存储区中的一个用‘$’字符结束的字符串,传送到另一个存储区中。
14.编写宏指令DISPLAY,能显示已存放在数据区的信息MESSAGE。
15.编写一段程序,使汇编程序根据SIGN中的内容分别产生不同的指令。如果(SIGN)=0,则用字节变量DIVD中的无符号数除以字节变量SCALE;如果(SIGN)=1,则用字节变量DIVD中的带符号数除以字节变量SCALE。商都存放在字节变量RESULT中。
16. (1) 将一字节压缩BCD码转换为两个ASCⅡ码。
(2)将存放在字节变量BCD1中的两个十进制数的ASCⅡ码合并为一字节压缩的BCD码,存入字节变量BCD2中。
17. 试编写一段程序,要求比较数组ARRAY中的三个16位有符号数。根据比较结果,置FLAG标志。
(1)如果三个数都不相等,则置FLAG为零。 (2)如果三个数有两个相等,则FLAG为1。 (3)如果三个数全相等,则FLAG为2。
18. 从XX单元开始的30个连续单元中存放有30个无符号数,从中找出最大者送入yy单元中。
19. 一个以BUF1为首址的数据区存放了N个字节数据,编制程序完成将数据块搬家至BUF2为首址的存储区中。要求:
(1)用一般数据传送指令MOV实现; (2)用数据串传送指令MOVSB实现; (3)用数据串指令LODSB/STOSB实现。
20. 在A1单元开始定义了一长度为N的字符串,找出其中的小写字母并存放到A2单元开始的存储区中。统计出小写字母的个数,存放到SL单元中。
21. 设在ADRM和ADRN单元中分别存放两个正整数M、N。编一程序求M和N的最大公约数,并将结果存入RESULT单元中。要求:求最大公约数用子程序实现。
22. 使用DOS功能调用0AH从键盘输入40个字符的字符串并将其送入一输入缓冲区。在按下Enter键后,显示这些字符。
23. 设有两个带符号整数变量A和B,求A和B之差并判断结果是否溢出。
24. 在首地址为TABLE的数组中按递增次序存放着100个16位补码数,试编写一个汇编语言程序把出现次数最多的数及其出现次数分别存放于AX和CX中。
25. 请用宏指令定义一个可显示字符串:
GOOD DB ‘Good students:class X NAME’ 其中X和NAME在宏调用时给出。
26. 定义宏指令并展开宏调用:
宏指令JOE把一串信息“MESSAGE NO.K”存入数据存储区XK中。 宏调用:
I=0
JOE TEXT,I JOE TEXT,I JOE TEXT,I
七、综合应用题
1.阅读如下8086宏汇编程序,回答所提问题。 (1)该程序中定义了几个宏指令?宏指令名是什么?主程序中有几次宏调用?宏调用时的实际参数是什么?
(2)该程序数据区占用了多少个存储器单元(Byte)? (3)该程序完成了哪几个主要工作?
(4)该程序在宏调用之前,寄存器BH,BL,DH,DL中分别存放的内容是什么(不要求具
体数据)?
(5)该程序中宏指令完成了什么功能? (6)该程序运行的结果是什么? 源程序如下:
2.根据16位逻辑变量L的内容对内存单元中连续存放的16个字符的数组SOURCE作如下处理:
(1)L的第i位为1,将SOURCE[i]的最高位置加偶校验位。 (2)L的第i位为0,SOURCE[i]不变 例如:L=005转换之前67H,61H,4EH,38H? 转换之后:E7H,61H,4EH,38H? LEA SI,SOURCE LAE DI,RESULT MOV CX,N
MOV DX, (1) L0: MOV AL,[SI] (2) L,DX JZ STORE AND AL,AL (3) STORE (4)
STORE: MOV [DI],AL INC SI INC DI (5)
LOOP L0
3.请编制程序PROG1.ASM,其功能是:内存中连续存放10个字,分别对每个字的高位字节和低位字节进行逻辑与运算及逻辑或运算。运算结果以字的形式按序连续存放(低位字节存入逻辑与运算的结果,高位字节存放逻辑或运算结果)。 例如:
内存中有AA55H结果为FF00H
MOV DI,OFFSET RESULT MOV CX,N MOV BX,00
PRO: MOV AX, (1) MOV DX,AX
AND (2) ,DH (3) AH,AL MOV AL,DL ADD BX,2 (4)
ADD DI,2 (5) JNZ PRO
相关推荐: