《汇编语言程序设计》期末复习题 下载本文

内容发布更新时间 : 2024/5/3 4:55:17星期一 下面是文章的全部内容请认真阅读。

汇编语言程序设计 综合复习

yeqianyi ENDP

6.在主程序中,采用调用子程序方式将一组非压缩BCD在屏幕上显示出来。试在下面 程序段中填补上空缺的指令。

? ? ?

MOV BX,OFFSET feiyabcd MOV CX,NN

CALL,DISPLAY

? ? ?

DISPLAY PROC PUSH DX LOP: MOV DL,[BX] ADD DL,30H

MOV AH,02H

INT 21H INC BX LOOP LOP RET

DISPLAY ENDP

7.BUF DW 1,0,0AB1CH,582H,9,3A04H,9,0

? ? ?

LEA DI,BUF MOV CX,8 MOV AX,9 CLD

REPNZ SCASW JNZ K1

SUB DI,OFFSET BUF MOV DX,DI SHR DX,1 ADD DL,30H MOV AH,2 INT 21H K1:??

上述程序执行后 (1)程序完成的功能是 在BUF中找出第一次出现9的元素 ,显示输出的值是 5

8.在以String为首地址的内存区域存放了一个字符串,下面程序段的功能是实现将该串中所有字母字符依次送入BUFF缓冲区,试在程序中填补上空缺的指令。

String DB ‘123ABC051AF??049ADVWS’ N EQU $- String

共28页 第 21 页

汇编语言程序设计 综合复习

BUFF DB N DUP(?)

? ? ?

MOV CX,N MOV BX,0

MOV SI,0

yeqianyi: CMP String[BX], ‘A’ JB NEXT

CMP String[BX], ‘Z’ JA NEXT

MOV AL,String(BX) MOV BUFF[SI],AL INC SI NEXT: INC BX

LOOP yeqianyi HLT

9.下面程序段是将BUFF单元的绝对值送入DAR单元,请将空白处各填上一条指令。

BUFF DW ×××× DAR DW ?

? ? ?

MOV AX,BUFF

TEST AX,8000H JZ NEXT

NEG AX NEXT: MOV DAR,AX

共28页 第 22 页

汇编语言程序设计 综合复习

四、编程题

1.编一程序段将BUF字节单元中的数拆成高低四位,并且将分离出的高四位和低四位分别放于BUF+1和BUF+2字节单元的低四位上。 D:\\ZQL>type exp11.asm

DATA SEGMENT BUF DB 34H,?,? CODE SEGMENT

ASSUME CS:CODE,DS:DATA START:MOV AX,DATA MOV DS,AX MOV AL,BUF 方法二: MOV CL,4 MOV AL,BUF SHR AL,CL MOV BUF+2,AL MOV BUF+1,AL AND BUF+2,0FH MOV AL,BUF MOV CL,4 AND AL,0FH SHR AL,CL MOV BUF+2,AL MOV BUF+1,AL MOV AH,4CH INT 21H CODE ENDS END START

2.编制一子程序,将AL中一位十六进制数转换为对应的ASCII码并用2号DOS功能调用显示出来,输入参数:被转换的十六进制数已在AL中。 方法一: 方法二: D:\\ZQL>type exp12.asm CODE SEGMENT CODE SEGMENT ASSUME CS:CODE ASSUME CS:CODE START:MOV AL,05H START:MOV AL,0DH CALL Liuweipei CALL Liuweipei MOV AH,4CH MOV AH,4CH INT 21H INT 21H Liuweipei PROC Liuweipei PROC CMP AL,10 CMP AL,10 JC K1 共28页 第 23 页

34H 03H 04H BUF BUF+1 BUF+2 ADD AL,37H JMP L2 K1: ADD AL,30H L2: MOV DL,AL 汇编语言程序设计 综合复习

JC K1 ADD AL,7 K1: ADD AL,30H MOV DL,AL MOV AH,2 INT 21H RET Liuweipei ENDP CODE ENDS

END START

3.用字符串指令编制一程序段,把以DAT1为首地址的数据区中的50个字节数据依次传送到以DAT2为首地址的数据区中。要求:在程序中按地址递增方式进行数据传送。 CLD

MOV CX,50 LEA SI,DAT1 LEA DI,DAT2 REP MOVSB

4.在以Block为首地址的字节单元中,存放了06计算(1)班的学生考试成绩。试编制一程序,利用学生的序号来查表得到该学生的成绩,设学生的序号在NUMBER单元,查表结果存入RESULT单元中。 DATA SEGMENT

Block DB X1, X2, X3,??,X50 NUMBER DB X RESULT DB ?

相关知识见59面 DATA ENDS

CODE SEGMENT

ASSUME CS:CODE,DS:DATA START: MOV AX,DATA MOV DS,AX LEA BX, Block

MOV AL, NUMBER XLAT

MOV RESULT, AL MOV AH,4CH

INT 21H

CODE ENDS

END START 5.在南昌市的湖坊乡,约有人口45000 ,试编写一程序统计一下该乡超过100岁以上的老人有多少,并将统计结果存放在SUM单元中。

DATA SEGMENT

AGE DB 25,31,6,101,90,71,116, … CONT EQU $-AGE SUM DB ?

共28页 第 24 页 和打印出的第5章第四大题的第3小题一样! 汇编语言程序设计 综合复习

DATA ENDS CODE SEGMENT

ASSUME CS:CODE,DS:DATA NEXT: INC BX START: MOV AX,DATA LOOP LOP MOV DS,AX MOV AH,4CH MOV CX,CONT INT 21H MOV BX,0 CODE ENDS LOP: CMP AGE[BX],100 END START JB NEXT INC SUM

6.设有DX:AX构成一个32位数据,从AX的低位(第0位)开始,逐位向高位和DX置1,置1的个数由CX的内容确定( 已知 CX<32 )。试编制一程序段,实现上述要求。 XOR AX,AX

XOR DX,DX CF D15 DX D0 CF D15 AX D0 LOP: STC RCL AX,1 RCL DX,1 LOOP LOP

7.编写程序段,用DOS的1号功能调用通过键盘输入一字符,并判断输入的字符。如字符是“Y”,则转向YES程序段;如字符是“N”,则转向NO程序段;如果是其它字符,则转向DOS功能调用,重新输入字符。(考生勿需写出源程序格式,只需写出与试题要求有关的指令序列) KEY:MOV AH,1 (YES和NO分别是两程序段入口处的标号) INT 21H

CMP AL,‘Y’ JE YES

CMP AL,‘N’ JE NO JMP KEY

8. 在以STRING为首地址的存储区域存放了一个字符串,串的长度为50,查找其中是否有字符$,若有将SIGN单元置1,反之,将SIGN单元置0(只需写出有关的指令序列)

(1) 用比较条件转移指令实现。 (2)用重复操作前缀串搜索指令实现。

(1) MOV CX,50 (2) MOV CX,50 MOV BX,0 LEA DI,STRING N: CMP STRING[BX],’$’ CLD

JZ DONE MOV AL,’$’

共28页 第 25 页

DI STRING A B C $ D