第4章练习题文档格式.docx
- 文档编号:22184171
- 上传时间:2023-02-02
- 格式:DOCX
- 页数:24
- 大小:25.35KB
第4章练习题文档格式.docx
《第4章练习题文档格式.docx》由会员分享,可在线阅读,更多相关《第4章练习题文档格式.docx(24页珍藏版)》请在冰豆网上搜索。
MOVAX,MEN
问AX的值最后是多少?
ARYDW35DUP(3,4,4DUP(?
LENDW$-ARY
简述DOS系统功能调用的使用方法?
用8086/8088汇编语言编程,实现从键盘输入一个不多于60个元素的无序8位无符号数数组,输入结束符为非数字字符。
然后对该数组用气泡排序法排序,最后用折半查找法在该数组中查找元素66,若查找到,显示'
FOUND!
'
,若找不到,则显示'
NOTFOUND!
从BUFF单元起有一个字符串(长度小于65535),以'
*'
结束,编写一个完整程序求该字符串长度存入LENT单元,并统计字符串中含有大写英文字符的个数并存入COUNT单元。
要求源程序具备必要的伪指令和段说明。
试题编号:
A0285难度为:
容易章节:
程序设计——数据运算分值:
10
已知在DAT至DAT+2单元中分别有八位无符号数a、b和c,试编写一个程序段计算表达式(a*b+c)/a,商和余数分别存入RES和RES+1单元。
A0284难度为:
一般章节:
有一带符号8位数X存于DAT单元.编一个程序段判断该数,若x小于0则将0FFH送MARK单元;
若X等于0则将MARK+1单元置0FFH;
若X大于0则置MARK+2单元为0FFH。
已知有X、Y、Z三个字变量,存放无符号整数,请编一个完整的程序实现公式Z=(X+Y)/(X-Y+600)(不考虑溢出情况)。
通过键盘输入一串不长于100个字符的字符串,以回车键为结束符,统计该字符串中的小写字母数存放于CX寄存器中。
AX寄存器中存放着4位十六进制数。
试编写一个汇编语言程序,将这4位十六进制数分别转换为相应的ASCII码,并依次存放到RESULT数组的4个字节中去,要求用调用子程序的方法实现。
写出对存放在DX和AX中的双字长数求补的指令序列。
设有两个等长字符串。
试编写一个汇编语言程序,比较它们是否完全相同;
若相同,则将字符"
Y"
送入AL中,否则,将字符"
N"
送入AL中。
写出程序段,把DX,AX中的双字右移四位。
编写一个汇编语言程序,要求对键盘输入的小写字母用对应的大写字母显示出来,非小写字母不显示。
如输入'
abd'
则应显示'
ABD'
,输入字符以回车键结束。
统计从01000H内存单元开始的100个字(WORD)型带符号数中的正数、负数和零的字(WORD)个数。
将LM开始到LM+100的内存区中的一组数据按与原来相反的次序送到PM到PM+100的内存区。
从ARY开始存放着100个字型带符号数,寻找其中的最大值,结果放在MAX单元,只要写出实现功能的程序段即可。
实现两个十六位二进制数的加法。
要求加数放在FIRST开始单元,被加数放在SECOND开始单元,和数放在SUM单元。
编写一汇编语言程序,实现将数据段中首地址为1000H(偏移地址)的100个连续存放的字节型数据搬移至该段内首地址为1050H(偏移地址)的连续的100个内存单元中。
编写一个完整的8086汇编语言程序,从附加段中首地址为ADR1(变量名)连续存放的100个字型无符号整数中找出最大数,并将此数及其偏移地址分别放入变量MAX和MAXM中。
在数据区从BLOCK开始有若干个非0字型带符号数,并以0结尾,编程统计其中共有多少个数,其中正数有多少个,负数有多少个,分别存放在ALL,PLUS,MINUS三个字单元中。
比较AX,BX,CX中带符号数的大小,将最大的数放在AX中。
试编写此程序段。
已知(AX)=4BD5H,统计AX中1的个数和0的个数,并分别放在BL和DL中。
编写程序段实现该功能。
试编写程序,要求能从键盘接收一个个位数N,然后响铃N次(响铃的ASCII码为07H)。
有一个首地址为ARRAY的N个字的数组,请编程序使该数组中的数按照从大到小的次序排序。
(采用冒泡排序算法)
分别用移位指令和循环程序编写程序段完成(AX)*10,并将结果存入AX条件:
-32768〈=(AX)*10〈=32767。
已知32位数存放在DX:
AX中。
试编写一个汇编语言程序将32位数左移4位,并将高4位存入CH。
已知在N到N+I的存储区中有一组ASCII码字符串(共I+1个),试编写一个汇编语言程序,将此字符传送到NI到NI+I单元中,并使字符串的顺序与原来的顺序相反。
求1+2+3+……的直到和刚好大于1000,保存实际结果到Y中和项数n,画出程序流程图并编程实现。
从00AF0内存单元开始的100个8位带符号数中寻找最大、最小值,结果放在MAX、MIN中,画出程序流程图并编程实现。
现有一个不超过255个大写英文字母组成的字符串,要求编写一个完整的程序,统计A-Z各字符串出现的次数,并分别存入字符串后的以RESULT为首地址的26个字节单元中。
从内存30000H开始的单元中顺序存放着40个同学某门课的考试成绩,试编写程序段求该班该门课的总成绩和平均成绩。
用循环程序将物理地址10000H到100FFH单元清零。
设当前数据段寄存器的内容为1B00H,在数据段的偏移地址2000H单元内,含有一个内容为0FF10H和8000H的指针,它们是一个16位变量的偏移地址和段地址,试写出把该变量装入AX的指令序列。
试编写程序段查找从地址ASCII_STR开始的顺序256个单元的内容中是否有字符'
若有程序转向FOUND,若没有则转向NOT_FOUND。
编写完整程序,功能是将VARW中的4位BCD码表示的一个十进制数分拆成4个一位的BCD码,每个占一个字节,存放到变量VARB中。
要求数的高位BCD码占高地址,低位占低地址。
编写一个程序,将变量ABC中的16位无符号数,用"
除十取余"
的方法转换成十进制数,要求结果用压缩BCD码保存在RESULT单元中。
编写一个完整程序计算365AH+9E6CH,结果存放于原被加数的位置。
要求写出完整的汇编语言程序
将一个16位二进制数转换为非压缩的BCD码,并将结果显示出来(16位二进制数在0~65535之间)。
从DATA1地址起有50个字节的带符号数,求其平均值并将结果存于AV单元,求出正数和负数之和,分别存于NP和NM字单元中。
编写一个完整的汇编程序(必要的段定义和伪指令),已知在数据段从BUFMEM开始的单元中连续存放着100个8位带符号数,寻找其中最小的数,结果存放到MINNUM单元中。
编写一个子程序(过程),将AL中存放的8位二进制数转换为ASCII码表示的等值字符串,并存放到DX寄存器中。
要求写出完成过程定义和流程图。
例如:
AL=5FH,则转换后的等值字符串为“5F”,且DH=‘5’,DL=‘F’。
判断STRING1和STRING2两个等长字符串是否相等,如相等在RESULT单元中置1,如不相等在RESULT单中置0,要求用串比较指令。
利用移位等指令实现将BL寄存器内容乘以10,乘积保存在BX。
用串操作指令将物理地址10000H到100FFH单元清零。
阅读下面一段程序,写出该程序完成什么功能。
XORDX,DX
L1:
MOVAH,1
INT21H
CMPAL,'
$'
JZBACK
CMPAL,30H
JBL1
CMPAL,39H
JAL1
ANDAL,0FH
ADDDL,AL
ADCDH,0
JMPL1
BACK:
HLT
BUF1DB-1,2,-3,4,-5,6,-7,8,-9
┇
XORBX,BX
MOVSI,0
MOVCX,9
LOP:
MOVAL,BUF1[SI]
TESTAL,80H
JZK
INCBH
JMPKK
K:
INCBL
KK:
INCSI
LOOPLOP
①上述程序的功能是
②当上述指令执行完后(BL)=_________H;
(BH)=_________H
MOVCX,10
MOVBX,1
ANDAX,0
NEXT:
ADDAX,BX
INCBX
LOOPNEXT
MOVDX,AX
②当上述指令执行完后(DX)=________H;
(CX)=________H
MOVAX,1000H
MOVDS,AX
MOVSI,2000H
MOVCX,100
MOVAL,[SI]
LP:
CMPAL,[SI+1]
JGENEXT
MOVAL,[SI+1]
NEXT:
INCSI
LOOPLP
MOV[2100H],AL
MOVAX,4C00H
ASCIISDB6DUP(?
)
MOVBX,OFFSETASCIIS
MOVAL,46H
MOVCX,6
LOP:
MOV[BX],AL
DECAL
INCBX
LOOPLOP
程序运行后从ASCIIS开始的6个字节中依次序放的什么数据?
与这些数据对应的ASCII码字符是什么?
阅读下面一段程序,写出该程序执行后AX寄存器中的内容。
TABDW10H,20H,30H,40H
ENTRYDW3
.
LEABX,TAB
ADDBX,ENTRY
MOVAX,[BX]
(AX)=________
MOVCL,4
SHLDX,CL
MOVBL,AH
SHLAX,CL
SHRBL,CL
ORDL,BL
阅读下面一段程序
MOVAX,SEGBUFFER1
MOVDS,AX
MOVSI,OFFSETBUFFER1
MOVDI,OFFSETBUFFER2
MOVCX,10
AGAIN:
MOVAX,[SI]
ADD[DI],AX
ADC[DI+2],0
ADDSI,2
LOOPAGAIN
请问:
(1)本程序实现的功能是什么?
(2)结果在哪里存放?
PUSHDS
POPES
CLD
MOVSI,OFFSETSOURCE
MOVDI,OFFSETDEST
MOVCX,100
AGAIN:
MOVSW
DECCX
JNZAGAIN
HLT
有一个程序,目的是要在屏幕上显示"
WindowsNTWorkstation3.51"
,但是程序有错,请指出其错误所在并指出修改方法,源程序如下
CODESEGMENT
ASSUMECS:
CODE,DS:
CODEMOVDX,MSG
MAINPROCMOVAX,9
MSGDW"
START:
PUSHESRET
PUSHAXMAINENDS
MOVAX,CSCODEENDP
MOVDS,AXENDMAIN
已知符号函数求值公式为:
-1当X<
Y=SNG(X)=0当X=0
1当X>
下列程序段欲求符号函数值Y,试改正其中的错误指令,不允许改变指令和标号位置,假设X已存放在AL中。
ANDAL,AL
JSNEGV
JZZER
MOVY,0
JMPDONE
ZER:
MOVY,-1
NEGV:
MOVY,1
DONE:
RET
本程序的功能是:
在递增的有序字节数组中插入一个正整数,并按指定的数组个数存入内存区中。
假设数组元素均为正数。
例如,将02H插入下面的数组中:
01H,03H,04H,05H,....,10H,11H
结果为01H,02H,03H,04H,05H,....,10H
运算结果要求从RESULT开始存放。
填空使程序完整,填空处已经用横线标出,每个空白一般只需要填一条指令或指令的一部分(指令助记符或操作数)。
NEQU10
DSEGSEGMENT
MINDB-1
SOURCEDBNDUP(?
XEQU2;
插入的数
RESULTDBNDUP(0)
DSEGENDS
CSEGSEGMENT
ASSUMECS:
CSEG,DS:
DSEG
STARTPROCFAR
PUSHDS
XORAX,AX
PUSHAX
MOVAX,DSEG
MOVDS,AX
MOVES,AX
LEABX,SOURCE
MOVSI,N-2
ADDBX,SI
MOVSI,0
MOVAL,X
LP:
CMP__,[BX+SI]
JGEINS
MOVDL,[BX+SI]
MOV[BX+SI+1],___
DEC_____________
JMPLP
INS:
MOV_________,AL
CLD
LEASI,SOURCE
LEADI,RESULT
MOVCX,N
___MOVSB
STARTENDP
CSEGENDS
ENDSTART
下列程序的功能是:
内存中连续存放着十个字节数,需对它们进行加密,其方法为:
如某个数(两位十六进制数X1X2表示)的高位十六进制数X1大于或等于低位十六进制数X2,则低位十六进制数X2用X1-X2代替;
如某个数的高位十六进制数X1小于低位十六进制数X2,则高位十六进制数X1用X2-X1代替。
将加密后的结果存入内存。
例如:
内存中有41H,46H…
结果43H,26H…
转换结果要求从RESULT开始存放,填空源程序使其完整,填空处已经用横线标出,每个空白一般只需要填一条指令或指令的一部分(指令助记符或操作数)。
DATASEGMENT
);
顺序存放十个字节数
RESULTDBNDUP(0);
存放结果
DATAENDS
CODE,DS:
DATA
PUSHDS
XORAX,AX
PUSHAX
MOVAX,DATA
MOVDS,AX
MOVCX,10
AGN1:
MOVAL,[SI]
MOVAH,AL
ANDAH,0F0H
MOVDX,4
AGN2:
SHRAH,1
________________
JNZAGN2
CMPAH,AL
MOVBL,AL
SUBBL,AH
MOVAH,BL
JMPSTORE1
G1:
MOVBH,AH
SUBBH,AL
MOV___,BH
STORE1:
AGN3:
___AH,1
DECDX
JNZAGN3
___AH,AL
MOV[DI],AH
INCDI
LOOPAGN1
CODEENDS
下列程序其功能是:
内存中连续存放着两个无符号字节数序列Ak和Bk(k=0,…,9),求序列Ck,Ck=Ak×
Bk(Ck以字的形式按C0,…,C9的顺序连续存放)。
序列Ak为FFH,80H,7FH,00H,…;
序列Bk为FFH,80H,01H,02H,…。
则结果Ck为FE01H,4000H,007FH,0000H,…。
运算结果要求从RESULT开始存放,填空使程序使其完整(空白已用横线标出,每行空白一般只需一条指令,但采用功能相当的多条指令亦可)。
DATASEGMENT
SOURCEDBN*2DUP(?
RESULTDWNDUP(0)
DATAENDS
CODESEGMENT
STARTPROCFAR
________________,OFFSETRESULT
MOVBX,0
_________________
PRO:
________________,SOURCE[BX+N]
MOV[DI],AX
ADDDI,2
_______________
JNZPRO
ENDSTART
下列程序的功能是:
内存中连续存放着20个ASCII字符,如果是小写字母a至z之间的字符,请把它们转换成相应的大写字母的ASCII字符(否则不作转换)并统计原20个ASCII字符中字符"
z"
的个数。
转换结果(包括不作转换的a~z之间的原ASCII字符)按序存入内存中,之后存放原20个ASCII字符中为字符"
的ASCII字符的个数(用一个字节表示)。
例如:
内存中有30H('
0'
),31H('
1'
),61H('
a'
),41H('
A'
),7AH('
z'
),…
结果为30H,31H,41H,41H,5AH,…,后跟用一个字节表示的原20个ASCII字符中为字符"
的个数
运算结果要求从RESULT开始存放,填空使程序完整(空白已用横线标出,每行空白一般只需一条指令,但采用功能相当的多条指令亦可)。
NEQU20
RESULTDBN+1DUP(0)
CODE,DS:
MOVDI,OFFSETRESULT
MOVDL,0
MOVAL,SOURCE[BX]
CMPAL,61H
__KEEP;
<
CMPAL,7AH;
>
='
JNBEKEEP;
CMPAL,79H;
y'
JBE____
INCDL
NINC:
SUBAL,___
MOV[DI],AL
JMP____
KEEP:
__________________
JUMP:
DECCX
计算10×
3矩阵中每一行元素(八位二进制数)之和,并将其存放在指定的内存区中。
内存中有0,0,0(第1行),1,1,1(第2行),.....,9,9,9(第10行)
结果为0000H,0003H,...,001BH
计算结果要求从RESULT开始存放,填空使程序完整,填空处已经用横线标出,每个空白一般只需要填一条指令或指令的一部分(指令助记符或操作数)。
NEQU30
IEQU10
JEQU3
RESULTDWN/3DUP(0)
XORAX,AX
PUSHAX
MOVDS,AX
MOVES,AX
MOVBX,1
LPI:
MOVDX,0
MOVCX,1
LPJ:
MOVAL,[SI]
_____________
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 练习题