第4章练习题.docx
- 文档编号:4020145
- 上传时间:2022-11-27
- 格式:DOCX
- 页数:18
- 大小:22.13KB
第4章练习题.docx
《第4章练习题.docx》由会员分享,可在线阅读,更多相关《第4章练习题.docx(18页珍藏版)》请在冰豆网上搜索。
第4章练习题
程序设计
定义段结束的伪指令是______;定义子程序结束的伪指令是____。
伪指令XDB4DUP(6,2DUP(6,8));YDW6800H;设X的偏移地址为2000H,则Y的偏移地址为_____H,若执行指令MOVBL,BYTEPTRY后,则(BL)=________。
标号和变量都是存贮单元的符号地址,但其内容不同,标号是________的符号地址,而变量是________的符号地址。
伪指令VR1DB2DUP(?
3DUP(1,2),5)在存贮器中被分配了________字节。
汇编语言源程序结束伪指令是________。
下面表示段定义结束的伪指令是_____。
A)ENDB)ENDPC)ENDSD)ENDM
变量的类型属性如下,下面错误的类型是_____。
A)字节型B)字符型C)字型D)双字型
设有一程序定义如下:
ORG0024H
AR1DW4,5,$+4…MOVAX,AR1+4
执行以上指令后,AX中的内容正确的是________。
A)0028HB)0032HC)002AHD)002CH
现用数据定义伪指令定义数据:
BUFDB4DUP(0,2DUP(1,0));问定义后,存储单元中有数据0100H的字单元个数是______。
A)4B)3C)8D)12
下列伪指令中定义字节变量的是____。
A)DBB)DWC)DDD)DT
使用DOS功能调用时,子功能号应放在()寄存器中。
A)ALB)AHC)DLD)DH
简述8086汇编语言中,指令语句和伪指令语句的区别和作用。
什么是变量,变量有哪些属性,如何使用这些属性?
试说明为什么有时候必须使用PTR属性操作符?
一个程序中,有下列伪指令:
ARYDB25DUP(3,4,4DUP(?
,1,0))
LENDW$-ARY
问LEN单元存储的值是多少?
什么是汇编语言,什么是汇编?
有一个程序片段如下
MSGDW3DUP(?
2DUP(5,4),3)
MENDW$-MSG┇┇
MOVAX,SEGMEN
MOVDS,AX
MOVAX,MEN
问AX的值最后是多少?
一个程序中,有下列伪指令:
ARYDW35DUP(3,4,4DUP(?
,1,0))
LENDW$-ARY
问LEN单元存储的值是多少?
简述DOS系统功能调用的使用方法?
用汇编语言编程,实现从键盘输入一个不多于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难度为:
一般章节:
程序设计——数据运算分值:
10
有一带符号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中的双字右移四位。
已知有X、Y、Z三个字变量,存放无符号整数,请编一个完整的程序实现公式Z=(X+Y)/(X-Y+600)(不考虑溢出情况)。
编写一个汇编语言程序,要求对键盘输入的小写字母用对应的大写字母显示出来,非小写字母不显示。
如输入'abd'则应显示'ABD',输入字符以回车键结束。
统计从01000H内存单元开始的100个字(WORD)型带符号数中的正数、负数和零的字(WORD)个数。
将LM开始到LM+100的内存区中的一组数据按与原来相反的次序送到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+I单元中,并使字符串的顺序与原来的顺序相反。
求1+2+3+„„的直到和刚好大于1000,保存实际结果到Y中和项数n,画出程序流程图并编程实现。
从00AF0内存单元开始的100个8位带符号数中寻找最大、最小值,结果放在MAX、MIN中,画出程序流程图并编程实现。
现有一个不超过255个大写英文字母组成的字符串,要求编写一个完整的程序,统计A-Z各字符串出现的次数,并分别存入字符串后的以RESULT为首地址的26个字节单元中。
从内存300H开始的单元中顺序存放着40个同学某门课的考试成绩,试编写程序段求该班该门课的总成绩和平均成绩。
用循环程序将物理地址100H到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。
用串操作指令将物理地址100H到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
INT21H
阅读下面一段程序,写出该程序完成什么功能。
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
有一个程序,目的是要在屏幕上显示"WindowsNTWorkstation
3.51",但是程序有错,请指出其错误所在并指出修改方法,源程序如下
CODESEGMENT
ASSUMECS:
CODE,DS:
CODEMOVDX,MSG
MAINPROCMOVAX,9
MSGDW"WindowsNTWorkstation
3.51"INT21H
START:
PUSHESRET
PUSHAXMAINENDS
MOVAX,CSCODEENDP
MOVDS,AXENDMAIN
已知符号函数求值公式为:
-1当X<0
Y=SNG(X)=0当X=0
1当X>0
下列程序段欲求符号函数值Y,试改正其中的错误指令,不允许改变指令和标号位置,假设X已存放在AL中。
ANDAL,AL
JSNEGV
JZZER
MOVY,0
JMPDONE
ZER:
MOVY,-1
JMPDONE
NEGV:
MOVY,1
DONE:
RET
本程序的功能是:
在递增的有序字节数组中插入一个正整数,并按指定的数组个数存入内存区中。
假设数组元素均为正数。
例如,将02H插入下面的数组中:
01H,03H,04H,05H,....,10H,11H
结果为01H,02H,03H,04H,05H,....,10H
运算结果要求从RESULT开始存放。
填空使程序完整,填空处已经用横线标出,每个空白一般只需要填一条指令或指令的一部分(指令助记符或操作数)。
NEQU10
DSEGMENT
MINDB-1
SOURCEDBNDUP(?
)
XEQU2;插入的数
RESULTDBNDUP
(0)
DSEGENDS
CSEGMENT
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
RET
STARTENDP
CSEGENDS
ENDSTART
下列程序的功能是:
内存中连续存放着十个字节数,需对它们进行加密,其方法为:
如某个数(两位十六进制数X1X2表示)的高位十六进制数X1大于或等于低位十六进制数X2,则低位十六进制数X2用X1-X2代替;如某个数的高位十六进制数X1小于低位十六进制数X2,则高位十六进制数X1用X2-X1代替。
将加密后的结果存入内存。
例如:
内存中有41H,46H„
结果43H,26H„
转换结果要求从RESULT开始存放,填空源程序使其完整,填空处已经用横线标出,每个空白一般只需要填一条指令或指令的一部分(指令助记符或操作数)。
NEQU10
DATASEGMENT
SOURCE
RESULT
DATA
CODE
START
AGN1:
AGN2:
G1:
STORE1:
AGN3:
DBNDUP(?
);顺序存放十个字节数
DBNDUP
(0);存放结果
ENDS
SEGMENT
ASSUMECS:
CODE,DS:
DATA
PROCFAR
PUSHDS
XORAX,AX
PUSHAX
MOVAX,DATA
MOVDS,AX
LEADI,RESULT
LEASI,SOURCE
MOVCX,10
MOVAL,[SI]
MOVAH,AL
ANDAL,0FH
ANDAH,0F0H
MOVDX,4
SHRAH,1
________
JNZAGN2
CMPAH,AL
________
MOVBL,AL
SUBBL,AH
MOVAH,BL
JMPSTORE1
MOVBH,AH
SUBBH,AL
MOV___,BH
MOVDX,4
___AH,1
DECDX
JNZAGN3
___AH,AL
MOV[DI],AH
INCDI
INCSI
LOOPAGN1
RET
STARTENDP
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,00H,„。
运算结果要求从RESULT开始存放,填空使程序使其完整(空白已用横线标出,每行空白一般只需一条指令,但采用功能相当的多条指令亦可)。
NEQU10
DATASEGMENT
SOURCEDBN*2DUP(?
)
RESULTDWNDUP
(0)
DATAENDS
CODESEGMENT
ASSUMECS:
CODE,DS:
DATA
STARTPROCFAR
PUSHDS
XORAX,AX
PUSHAX
MOVAX,DATA
MOVDS,AX
________,OFFSETRESULT
MOVBX,0
_________
PRO:
________,SOURCE[BX+N]
________
MOV[DI],AX
ADDDI,2
INCBX
________
JNZPRO
RET
STARTENDP
CODEENDS
ENDSTART
下列程序的功能是:
内存中连续存放着20个ASCII字符,如果是小写字母a至z之间的字符,请把它们转换成相应的大写字母的ASCII字符(否则不作转换)并统计原20个ASCII字符中字符"z"的个数。
转换结果(包括不作转换的a~z之间的原ASCII字符)按序存入内存中,之后存放原20个ASCII字符中为字符"z"的ASCII字符的个数(用一个字节表示)。
例如:
内存中有30H('0'),31H('1'),61H('a'),41H('A'),7AH('z'),„
结果为30H,31H,41H,41H,5AH,„,后跟用一个字节表示的原20个ASCII字符中为字符"z"的个数
运算结果要求从RESULT开始存放,填空使程序完整(空白已用横线标出,每行空白一般只需一条指令,但采用功能相当的多条指令亦可)。
NEQU20
DATASEGMENT
SOURCEDBNDUP(?
)
RESULTDBN+1DUP
(0)
DATAENDS
CODESEGMENT
ASSUMECS:
CODE,DS:
DATA
STARTPROCFAR
PUSHDS
XORAX,AX
PUSHAX
MOVAX,DATA
MOVDS,AX
MOVDI,OFFSETRESULT
MOVBX,0
MOVDL,0
MOVCX,N
PRO:
MOVAL,SOURCE[BX]
CMPAL,61H
__KEEP;<'a'
CMPAL,7AH;>='a'
JNBEKEEP;>'z'
CMPAL,79H;<='y'
JBE__
INCDL
NINC:
SUBAL,___
MOV[DI],AL
INCDI
JMP__
KEEP:
MOV[DI],AL
_________
JUMP:
INCBX
DECCX
JNZPRO
_________
RET
STARTENDP
CODEENDS
ENDSTART
本程序的功能是:
计算10×3矩阵中每一行元素(八位二进制数)之和,并将其存放在指定的内存区中。
例如:
内存中有0,0,0(第1行),1,1,1(第2行),.....,9,9,9(第10行)
结果为00H,0003H,...,001BH
计算结果要求从RESULT开始存放,填空使程序完整,填空处已经用横线标出,每个空白一般只需要填一条指令或指令的一部分(指令助记符或操作数)。
NEQU30
IEQU10
JEQU3
DSEGMENT
SOURCEDBNDUP(?
)
RESULTDWN/3DUP
(0)
DSEGENDS
CSEGMENT
ASSUMECS:
CSEG,DS:
DSEG
STARTPROCFAR
PUSHDS
XORAX,AX
PUSHAX
MOVAX,DSEG
MOVDS,AX
MOVES,AX
LEASI,SOURCE
LEADI,RESULT
MOVBX,1
LPI:
MOVDX,0
MOVCX,1
LPJ:
MOVAL,[SI]
________
ADDDX,AX
INC__
INCCX
CMPCX,__
JBELPJ
MOV[DI],___
ADDDI,___
INCBX
CMPBX,I
JBELPI
RET
STARTENDP
CSEGENDS
ENDSTART
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 练习题