4、程序段的功能是依次产生0~9的10个ASCII码,并存入BUF1数据区,请在空白处填上指令(每一空白处仅填一条指令)。 BUF1 DB 10 DUP(?) ┇
LEA BX, BUF1 MOV CX,10 XOR AL,AL
LOP: MOV AH,AL ADD AL,30H A.______ INC BX B.______ INC AL LOOP LOP
5、下面程序段是判断寄存器AH和AL中第3位是相同,如果相同,AH置0,否则AH置全1。试把空白处填上适当指令。
_____________________ AND AH,08H
_____________________ MOV AH,OFFH JMP NEXT
ZERO:MOV AH,0 NEXT:??
6、以BUF为首址的字节单元中,存放了COUNT个无符号数,下面程序段是找出其中最大数并送入MAX单元中。
BUF DB 5,6,7,58H,62,45H,127,??
COUNT EQU $-BUF ;COUNT等于变量BUF的字节数 MAX DB? ┇
MOV BX,OFFSET BUF MOV CX,COUNT-1 MOV AL,[BX] LOP1:INC BX
_____________________ JAE NEXT
MOV AL,[BX] NEXT:DEC CX
_____________________ MOV MAX,AL
7、在表TABLE处存放着N个无符号字节数,求表中前10个字节数的总和并保存在AX寄存器中。如果总和值超过AX寄存器的容量,则置AX寄存器内容不变。请在程序中的空格处填入适当指令使其完整。
LEA BX,TABLE
MOV CX,10
MOV SUM,AX
NEXT:(1)
ADC AH,0 JNC DON JC ENDO
(2)
DON:INC BX
(3)
ENDO:HLT
8、BEG为起始地址的存储区域中存放有100个字节数据,现将其首、尾颠倒过来,重新排放这100个字节数据。请在程序中的空格处填入适当的指令使其完整。 MOV CX,32H LEA SI,BEG MOV DI,SI (1)
DON:MOV AL,[SI] (2)
MOV [SI],AL (3) DEC DI LOOP DON
HLT
9、下列程序段求数组FLD的平均值,结果在AL中。请将程序填写完整(不考虑溢出) FLD DW 10, -20, 30, -60, -71, 80, 79, 56 _______
21
MOV CX, 8 XOR AX, AX R1:_______ ADD SI, 2 LOOP R1 MOV CL, 8 IDIV CL HLT 10、已知数据段DAT单元存放某一数N(-6≦N≦6)下面的程序段用查表法求数N的平方值,结果送SQR单元,请将程序填写完整。
TABLE DB 0,1,4,9,16,25 DAT DB N SQR DB ?
LEA BX, TABLE MOV AL, DAT _______ JGE NEXT _______
NEXT:XLAT HLT
11、设AX,BX中的数一个为正数,一个为负数,下面程序段完成将正数送到PLW单元中存放,请将程序中所缺指令语句补上。 TEST AX,8000H MOV PLW,BX JMP DONE
K1: DONE:
12、现有下列数据段: DATA SEGMENT
STR1 DB ?ABCDEFGHIJKL? COUNT EQU $-STR1 BUF DB COUNT DUP(0) DATA ENDS
下面程序段是实现把STR1中所有字符逆向传送到BUF缓冲区(即STR1中第一个字符送到BUF的最后一个单元,STR1中最后一字符送到BUF的第一个单元)。试把程序中所空缺的指令填上。 MOV SI,OFFSET BUF-1 MOV DI,OFFSET BUF MOV CX,COUNT LOOP:MOVSB LOOP LOP
13、DA1数据区中有50个字节数据,下面程序段将每个数据的低四位变反,高四位不变,并依次存入DA2数据区中。请将程序补充完整。 MOV CX,50 LEA SI,DA1 LEA DI,DA2
K1:MOV AL,[SI] ___________ MOV [DI],AL INC SI INC DI DEC CX ___________
14、下面程序段完成将存储单元A1中一个压缩型BCD码拆成二个非压缩型BCD码,高位BCD码存放在A3单元,低位BCD码存放在A2单元,再分别转换为对应的ASCⅡ码。请将程序补充完整。 MOV AL,A1 MOV CL,4 ___________ OR AL,30H MOV A3,AL MOV AL,A1 ___________ OR AL,30H MOV A2,AL
15、下面程序段是判断寄存器AH和AL中第3位是相同,如相同,AH置0,否则AH置全1。试把空白处填上适当指令。
_____________________
22
AND AH,08H
_____________________ MOV AH,OFFH JMP NEXT
ZERO:MOV AH,0 NEXT:??
16、程序段的功能是依次产生0~9的10个ASCII码,并存入BUF1数据区,请在空白处填上指令(每一空白处仅填一条指令)。
BUF1 DB 10 DUP(?) ??
LEA BX, BUF1 MOV CX,10 XOR AL, AL
LOP: MOV AH,AL ADD AL,30H ____________ INC BX ____________ INC AL LOOP LOP
17、下面程序执行后,AL的内容为ARRAY数组中的最小数,请在空白处各填上一条指令。 ARRAY DB 3,5,- 3,- 2,4,5,- 8,6
?? MOV CX,7 MOV DI,0
MOV AL,ARRAY A1: INC DI
JLE A2
MOV AL,ARRAY [DI]
18、下面程序段的功能是把DA1数据区的数0-9转换为对应的ASCII码,并存入ASCI数据区。试完善本程序段。
DA1 DB 00H,01H,02H,03H,04H,05H,06H,07H,08H,09H ASCI DB 10 DUP(?) CUNT = ASCI-DA1
??
LEA SI,DA1 LEA DI,ASCI
LOP1:MOV AL,[SI]
MOV [DI],AL INC SI INC DI
LOOP LOP1 六、编制程序题
1、设在数据段中有X,Y两变量(字节单元),试编写程序段计算(只写有关程序功能的指令):
Y= X 当X >=0 Y= 0 当X<0
2、A1单元开始定义了一长度为N的字符串,找出其中所有的小写字母并存放到以A2单元开始的存储区中。统计出小写字母的个数,存放到SL单元中。请编一完整的源程序。
3、已知DAT1字节单元有一个数据,试编制一程序段将该数据的低4位变为1010B,最高位(第7位)置1,其余3位不变,结果送DAT2字节单元。
4、在N1和N2两数据区中,分别有10H个带符号数。试编制一源程序,找出对应项中较小的数据,并将这些较小的数据存入N3数据区中(要求:对应项比较时必须用CMPS指令)。 DATA SEGMENT N1 DB ××,××,××,?? N2 DB ××,××,××,?? N3 DB 10H DUP(0) DATA ENDS
5、加密移动字符串,设缓冲区SBUFF中有20个小写字母a,将每个a加上它相对于缓冲区的位移量后传送到缓冲区DBUFF。
6、在BUF1和BUF2两个数据区中,各定义有10个带符号字数据,试编制一完整的源程序,求它们对应项的和,并将和数存入以SUM为首址的数据区中。
DATA SEGMENT
BUF1 DW -56,24,54,-1,89,-8,?? BUF2 DW 45,-23,124,345,-265,??
23
SUM DW 10 DUP(0) DATA ENDS
7、试编写一个汇编语言程序,要求对键盘输入的小写字母用大写字母显示出来。
8、设在内存单元SQTAB首址开始存放了0~15的平方数表。要求用直接查表法编一程序,求出A单元中给定数(<=15 =的平方值送B单元保存。
9、已知存储器中有一个首地址为ARRAY的100个字数组,现要求把数组中的每个数加1(不考虑溢出的可能性),试编制完成此功能的程序段。
10、.编写一段程序,如果字节变量TESTONE和TESTTWO相等,则调用子程序,显示?#?;否则调用NOTSAME子程序,显示?!?。
11、已定义了两个整数变量A和B,试编写程序完成下列功能: A.若两个数中有一个是奇数,则将奇数存入A中,偶数存入B中。 B.若两个数均为奇数,则将两数均加1后存回原变量。 C.若两个数均为偶数,则两个变量均不改变。 (要求各段定义完整,并画出程序流程图) 12、假设DATAX和DATAX+2单元存放双字P,DATAY和DATAY+2单元中存放双字Q,编程计算2P-Q,差在DX,AX中。若OF=1,程序转OVERFLOW,否则转NOOVER。(只写与试题要求有关的指令语句) 13、已知在数据区BUF1和BUF2分别存放20个字节数据。编程检查两数据区中的数据是否相同。若完全一致,则将标志单元FLAG置FFH,否则置0,并将第一次出现的不同数据的地址分别存放在ADDR1和ADDR2单元中。
要求:源程序格式完整。
14、设 X、Y、Z、W为十六位有符号数编程计算: W ←(X + Y * Z)/8 -Y 除法余数丢弃 若ZF=1 ,程序转EQ;否则转NOT_EQ。
15、已知在以ARRAY为首地址的数据区中存放10个带符号字数据: ARRAY DW 1,2,-1,3,4,-2,-3,4,5,-6
编程将ARRAY分成两个数组:正数数组P_ARY和负数数组N_ARY,并分别显示正数项个数和负数项个数。
要求:源程序格式完整。
16、X,Y,Z三个字节存储单元中各有一个无符号数,其中有两个数据相等,找出不相等的哪个数,并存入W单元中,试编写完成上述功能的程序段(只编写有关代码部分,勿需书写源程序格式)。
17、在数据段偏移量为100H开始的存储空间内连续存放着10个字节型无符号二进制数,编写一段程序,求出该10个数之和,并将结果存放在寄存器AX中。
18、试编写一个汇编语言程序,要求对键盘输入的小写字母用大写字母显示出来。
2.已知有256个字节整数A1、A2、A3、??、A256 存放在以NUMBER为首址的数据区中,编写一完整源程序将其中的负数去除后剩下的正数重新排序存放在以PLUS开始的数据区中。
19、在数据段中有一个首地址为array的未排序的50D字节的正整数数组,请编写一程序,找出其中的最大数和最小数及最大数和最小数的个数。
20、A1单元开始定义了一长度为N的字符串,找出其中所有的小写字母并存放到以A2单元开始的存储区中。统计出小写字母的个数,存放到SL单元中。请编一完整的源程序。数据段如下: DATA SEGMENT
A1 DB ???? N EQU $ -A1
A2 DB N DUP(?) SL DB ? DATA ENDS
24