习题集04程序设计answers.docx
- 文档编号:6255054
- 上传时间:2023-01-04
- 格式:DOCX
- 页数:91
- 大小:941.34KB
习题集04程序设计answers.docx
《习题集04程序设计answers.docx》由会员分享,可在线阅读,更多相关《习题集04程序设计answers.docx(91页珍藏版)》请在冰豆网上搜索。
习题集04程序设计answers
1.指令语句有哪几部分组成?
伪指令语句有哪几部分组成?
【参考答案】
指令语句:
[标号:
]助记符[操作数][;注释]
伪指令语句:
[名字]定义符[操作数][;注释]
2.什么是指令语句?
什么是伪指令语句?
它们之间有什么区别?
【参考答案】
指令语句:
与机器代码一一对应,一条指令语句对应机器的一种操作,汇编时产生一组目标代码。
伪指令语句:
没有对应的机器代码,它只为汇编程序提供汇编时所产生的信息。
3.什么是标号和名字?
它们之间有什么区别?
【参考答案】
标号:
是某条指令所在单元的符号地址,必须后跟冒号“:
”,它是可供选择的标识符。
一个标号可以作为JMP指令或CALL指令的一个操作数。
名字:
是给某伪指令取的名称,它不能后跟冒号“:
”,它可以是变量名、段名、过程名、符号名等。
标号/名字应符合以下规定:
由字母、数字或某些特殊字符(?
·@-$)等组成;
不能用数字开头。
第一个字符必须是字母或某些特殊字符(?
号不能单独使用,“·”号必须放在开头,不能放在其它位置);
有效长度为31个字符;
保留字(关键字)不能作标识符。
4.什么是助记符?
【参考答案】
助记符:
是指令的操作码,规定某指令语句的操作类型。
5.在MASM86中,什么是定义符?
【参考答案】
定义符:
是由MASM-86规定的符号,是种汇编命令,规定变个伪指令的伪操作功能给程序员编写汇编语言源程序提供方便。
6.指令语句的操作数与伪指令语句的操作数各有什么特点?
【参考答案】
指令语句的操作数的个数:
0个,1个,2个等;最大不超过两个,操作数之间必须用逗号“,”分隔;有的操作数可以用表达式来表示。
伪指令语句的操作数的个数:
随不同的伪指令而相差悬殊;有的伪指令不允许有操作数;有的允许带多个操作数,其间用逗号“,”分隔;有的操作数也可用表达式表示。
7.变量名是用来表示操作数所在存储器单元地址的符号,它有哪几个属性?
在编程使用时应注意什么?
【参考答案】
属性:
段属性(SEGMENT)、偏移地址属性(OFFSET)、类型属性(TYPE)
类型属性:
字节(BYTE)、字(WORD)、双字(DWORD)、四字(DQ)、五字(DT)
注意:
在程序中变量名的定义只允许出现一次。
8.标号是某条指令所在单元的符号地址,它表明该指令在存储器中的位置,可以作为转移指令和调用指令的目的操作数。
它有哪几个属性?
【参考答案】
段属性:
段基址总是在代码段寄存器CS中。
偏移属性:
16位无符号数。
代表从段起始地址到定义标号的位置之间的偏移量。
距离属性:
NEAR或FAR。
NEAR:
只需改变IP值,不改变CS值。
默认属性。
FAR:
改变IP和CS的值。
9.伪指令EQU的功能是什么?
使用时有哪些注意事项?
【参考答案】
功能:
可以把符号名字定义为一个常量、一个表达式的值、其它符号名或保留字。
注意:
(1)EQU伪指令中如果有变量或标号的表达式,则它们应在该伪指令前已定义过的,否则汇编程序将指示出错。
(2)经EQU伪指令定义的符号名在同一程序模块中不允许重新定义,否则必须用清除指令PURGE将原有符号名清除后,才能用EQU伪指令重新定义。
10.伪指令“=”与“EQU”有什么异同点?
【参考答案】
=与EQU具有相同的功能,区别仅在于用等号语句定义的符号名可以再定义。
11.定义如下数据段,
DATASEGMENT
FIRSTDB66H
SECONDDW–6,100H
THIRDDD5*20
ONEDB‘ABC’,’OK’
TWODW‘OK’
ABDB0,?
?
0
CDDW?
66H,?
DATAENDS
试画出这些变量代表的数据在内存的存储方式。
【参考答案】
12.定义如下数据段,
DATASEGMENT
TAB1DB2DUP(0,1)
TAB2DW2DUP(1110H,?
)
TABDB2DUP(0SDUP(1,2),6)
DATAENDS
试将这三个变量展开成字节存放的形式。
【参考答案】
TAB1DB00,01,00,01,10,11,-,-,10,11,-,-
TABDB00,01,02,01,02,06,00,01,02,01,02,06
13.假定标号ONE和TWO处于同一代码段内,CS=1000H,其偏移地址分别为0200H和0400H;变量A和B处于同一数据段内,DS=4000H,其偏移地址分别为0600H和0800H。
试写出如下伪指令的结果。
【参考答案】
14.段定义伪指令有哪几种定位类型?
【参考答案】
PARA,BYTE,WORD,PAGE
15.段定义伪指令有哪几种组合类型?
【参考答案】
NONE,PUBLIC,COMMON,AT,STACK,MEMORY.
16.段定义伪指令有哪几种类别?
【参考答案】
代码段“CODE”;数据段“DATA”;堆栈段“STACK”。
17.伪指令ASSUME使用时应注意哪些要点?
【参考答案】
ASSUME伪指令必须放在代码段的开始处,用来告诉汇编程序当前有哪能几个逻辑段分别被定义为代码段、数据段、堆栈段和附加段。
段寄存器是CS、DS、SS和ES中的任意一个。
段寄存器后要用冒号,各段寄存器之间要用逗号分隔。
段名必须由SEGMENT伪指令定义过的段名。
一行写不下时,可另起一行,但必须再以ASSUME伪指令开头。
18.过程定义格式是怎样的?
使用时应注意哪些事项?
【参考答案】
过程名PROCNEAR(FAR)
….
RET
….
过程名ENDP
注意:
PROC和ENDP必须成对出现;在一个过程内部至少要设置一条返回指令RET作为过程的出口点;前后过程名应该一致;过程和段可以嵌套,但不可以交叉覆盖。
19.过程有哪三个属性?
【参考答案】
段属性、偏移地址属性和距离属性。
20.系统功能调用子程序总入口为INT21H,试说明其使用方法?
【参考答案】
传送入口参数到指定的寄存器中;
把要调用功能的功能号送入AH寄存器中;
用INT21H指令转入子程序入口;
相应的子程序运行完后,可以按规定取得出口参数。
21.在程序设计中,有哪几种常用的基本结构?
【参考答案】
分支程序设计:
简单分支程序、复杂分支程序
循环程序设计:
单重循环程序、多重循环程序
子程序设计
22.阅读下列程序段,说明其功能并画出程序流程图。
DATASEGMENT
BLOCKDB'ERROR!
',0DH,0AH,'$'
DATAENDS
stacksegmentstack'stack'
dw32dup(?
)
stackends
codesegment
beginprocfar
assumess:
stack,cs:
code
pushds
subax,ax
pushax
MOVAH,1
INT21H
CMPAL,'a'
JBNEXT
CMPAL,'z'
JANEXT
ANDAL,11011111B
MOVDL,AL
MOVAH,02
INT21H
JMPDONE
NEXT:
LEADX,BLOCK
MOVAH,9
INT21H
DONE:
ret
beginendp
codeends
endbegin
【参考答案】
编程实现将键盘输入的小写字母转换成大写后输出
23.阅读下列程序段,说明其功能并画出程序流程图。
DATASEGMENT
TABDWLAB0
DWLAB1
DWLAB2
DWLAB3
DWLAB4
DWLAB5
DWLAB6
DATAENDS
STACKSEGMENTSTACK'STACK'
DW32DUP(?
)
STACKENDS
CODESEGMENT
BEGINPROCFAR
ASSUMECS:
CODE,DS:
DATA
pushds
subax,ax
pushax
MOVAH,1
INT21H
CMPAL,'A'
JBDONE
CMPAL,'G'
JADONE
SUBAL,'A'
ANDAX,000FH
SHLAX,1
MOVBX,AX
JMPTAB[BX]
LAB0:
JMPDONE
LAB1:
JMPDONE
LAB2:
JMPDONE
LAB3:
JMPDONE
LAB4:
JMPDONE
LAB5:
JMPDONE
LAB6:
JMPDONE
DONE:
RET
BEGINENDP
CODEENDS
ENDBEGIN
【参考答案】
接收单键命令‘A’—‘G’,根据命令进行相应的处理,否则不作处理。
24.试画出REPEAT-UNTIL结构的程序流程图。
【参考答案】
25.试画出WHILE-DO结构的程序流程图。
【参考答案】
26.子程序设计过程中有哪些要点?
【参考答案】
(1)子程序定义时过程名应一致,PROC与ENDP成对出现,至少有一条RET指令;
(2)子程序的距离属性:
FAR或NEAR;(3)子程序的调用和返回,入口参数和出口参数;(4)子程序与主程序之间的参数传递方法;(5)现场保护与恢复
27.设A,B,C均为无符号字节数据,编程计算Y=(A+B)*C.
【参考答案】
分析:
由题设条件知A,B,C均为无符号字节数据,那么A+B则在无符号字数据范围内,求出(A+B)后,基结果与C相乘得到最终结果。
DSEGSEGMENT
NUMDB200,238,196
YDW2DUP(?
)
DSEGENDS
CSEGSEGMENT
ASSUMECS:
CSEG,DS:
DSEG
MAINPROCFAR
MOVAX,DSEG
MOVDS,AX
MOVDI,OFFSETNUM
MOVAX,0
MOVBX,AX
MOVAL,[DI]
MOVBL,[DI+1]
ADDAX,BX
MOVBL,[DI+2]
MULBX
MOVDI,OFFSETY
MOV[DI],AX
MOV[DI+2],DX
MOVAH,4CH
INT21H
MAINENDP
CSEGENDS
ENDSTART
28.编程计算无符号字节数之和。
无符号字节数的长度及其所求的和都存放在存储器的数据段中。
无符号字节数串从NUM单元开始存放,长度存放在COUNT单元,和存放在SUM单元。
假设和数小于256.
【参考答案】重点难点P100
29.编制一个数据块移动程序,要求完成如下任务:
(1)给内存数据段(DATA)中偏移地址为N1开始的连续32个字节单元转入数据00H,01H,…,1FH;
(2)将内存数据段(DATA)中偏移地址为N1的数据传送到偏移地址为N2开始的连续内存单元中。
【参考答案】
30.在显示器上显示“HELLO”字符串。
【参考答案】P111
31.编写一段程序完成从键盘输入一个字符串(最多20个字符)到数据段指定的区域(CHAR_BUF)。
【参考答案】P112
32.已知A,B,若A大于B,则显示“GREAT”;否则,显示“LESS”。
【参考答案】P121
33.求数据段中从DATE1开始的100个字节数之和,将其存放在SUM单元中。
【参考答案】P121
34.编写一子程序,完成将NUM单元中16位数以十六进制形式显示在当前光标处。
【参考答案】P121
35.下列程序片段完成的功能是:
(1)SALAX,1;RCLDX,1--()
(2)SALAX,1;RCLDX,1;ADCAX,0—()
(3)SHRDX,1;RCRAX,0–()
(4)SARDX,1;RCRAX,1;JNCNEXT;ORDX,80H;NEXT:
…()
【参考答案】清华温东阳P49
(1)双字逻辑左移一位;
(2)双字循环左移一位;
(3)双字逻辑右移一位;
(4)双字循环右移一位;
36.指令LEABX,TAB执行后,其结果是:
(A)将TAB的内容送BX;(B)将TAB的段基址送BX;(C)将TAB的偏移地址送BX;(D)将TAB所指的存储单元的内容送BX。
【参考答案】
(C)将TAB的偏移地址送BX;
37.下列指令中哪条指令是正确的?
(A)MOVDS,0200H;(B)MOVAX,[SI][DI];(C)MOVBP,AX;(D)MOVBYTEPTR[BX],1000.
【参考答案】
(C)MOVBP,AX;
38.已知BL=08H;DL=E2H;执行XORDL,BL指令后,DL中的数为()。
(A)132;(B)20H;(C)00H;(D)EAH。
【参考答案】
(D)EAH。
39.已知AL的内容为01101011B,执行指令NEGAL后,再执行CBW,这时AX中的内容为()。
【参考答案】
FF9BH
40.下列程序段实现的功能是()。
NEGDX,NEGAX,SBBDX,0
【参考答案】
对存放在DX、AX的双字数据求补。
41.下列程序段实现的功能是()。
MOVBX,0;NEGAX;SBBBX,DX;MOVDX,BX.
【参考答案】
对存放在DX、AX的双字数据求补。
42.下列程序段实现的功能是()。
MOVBX,0;MOVCX,0;SUBBX,AX;SBBCX,DX;MOVAX,BX;MOVDX,CX.
【参考答案】
对存放在DX、AX的双字数据求补。
43.下列程序段实现的功能是()。
NEGAX;NOTDX;CMC;ADCDX,0.
【参考答案】
对存放在DX、AX的双字数据求补。
44.有如下程序段,设寄存器初值(AX)=20BCH,(DX)=45A2H,按下面要求写出连续执行相应指令后寄存器的内容:
指令
结果
(1)MOVCL,04H;
(2)SHLDX,CL;
(DX)=()
(3)MOVBL,AH;
(4)SHLAX,CL;
(AX)=()
(5)SHRBL,CL;
(BL)=()
(6)XORDL,BL;
(DX)=()
【参考答案】
指令
结果
(7)MOVCL,04H;
(8)SHLDX,CL;
(DX)=(5A20H)
(9)MOVBL,AH;
(10)SHLAX,CL;
(AX)=(0BC0H)
(11)SHRBL,CL;
(BL)=(02)
(12)XORDL,BL;
(DX)=(5A22H)
45.对于指令“XCHGBX,[BP+SI]”,如果指令执行前,(BX)=6F30H,(BP)=0200H,(SS)=2F00H,(2F246H)=4154H,则执行指令后:
(BX)=(),(2F246H)=().
【参考答案】
(BX)=(4154H),(2F246H)=(6F30H).
46.设CS=1200H,IP=0100H,SS=5000H,SP=0400H,DS=2000H,SI=3000H,BX=0300H,(20300H)=4800H,(20302H)=00FFH,TABLE=0500H,PROG-N标号的地址为1200:
0278H,PROG-F标号的地址为3400:
0ABCH.说明下列每条指令执行完后,程序将分别转移到何处执行。
(1)JMPPROG-N;
(2)JMPBX
(3)JMP[BX]
(4)JMPFARPROG-F
(5)JMPDWORDPTR[BX]
【参考答案】清华温东阳P60
47.程序段执行后,AX、BX、CX和DX寄存器的内容分别是什么?
START:
MOVAX,01H
MOVBX,02H
MOVCX,03H
MOVDX,04H
NEXT:
INCAX
ADDBX,AX
SHRDX,1
LOOPNEXT
【参考答案】清华温东阳P60
48.程序段执行后,AX、BX、CX和DX寄存器的内容分别是什么?
START:
MOVAX,01H
MOVBX,02H
MOVCX,03H
MOVDX,04H
NEXT:
INCAX
ADDBX,AX
SHRDX,1
LOOPENEXT【参考答案】清华温东阳P60
49.程序段执行后,AX、BX、CX和DX寄存器的内容分别是什么?
START:
MOVAX,01H
MOVBX,02H
MOVCX,03H
MOVDX,04H
NEXT:
INCAX
ADDBX,AX
SHRDX,1
LOOPNENEXT【参考答案】清华温东阳P60
50.设定(SS)=2000H;(SP)=0250H;在执行5次压栈操作后,(SP)=()。
A.0255H,B.025AH,C.0246H,D.0240H.
【参考答案】清华温东阳P62
C.0246H,
51.下列指令中有语法错误的是()。
A。
MOV[SI],[DI];B.INAL,DX;C.JMPWORDPTR[BX+8];D.PUSHWORDPTR20[BX+SI-2]
【参考答案】清华温东阳P62
A。
MOV[SI],[DI];
52.下面是一个定义数据的程序段,设DATA值为1200H,请图示各数据在内存的存放形式。
DATASEGMENT
ORG100H
BUF1DB10H,20H,30H,40H,50H
BUF2DWBUF1
BUF3DDBUF1
COUNTEQUBUF2-BUF1
BUF4DWBUF2-BUF1
DATAENDS
【参考答案】清华温东阳P68
5个数据
10
1200:
0100(BUF1)
20
0101
30
0102
40
0103
50
0104
BUF1的有效地址(DW)
00
0105(BUF2)
01
0106
BUF1的逻辑地址(DD)
00
0107(BUF3)
01
0108
00
0109
12
010A
BUF2-BUF1的偏移量相减代表BUF1占用的字节数
05
010B(BUF4)
00
010C
53.阅读程序并完成填空。
ADDR1开始的单元中连续存放两个双字数据,求其和,并将和存放在ADDR2开始的单元。
(假定和不超过双字)
MOVCX,2
XORBX,BX
CLC
NEXT:
MOVAX,[ADDR1+BX]
ADCAX,
(1)
MOV[ADDR2+BX],AX
INCBX
(2)
(3)NEXT
【参考答案】
(1)[ADDR1+4+BX];
(2)INCBX;(3)LOOP
54.编写BIOS的调用程序
【参考答案】P282例227
用BIOS功能调用(INT13H),把B驱动器中0面5道3扇区内容读入内存,放在INBUF开始的缓冲区中。
在计算机的ROM-BIOS中,有一软盘I/O驱动程DISKETTE-IO,它提供了访问5.25in软盘驱动器的6种功能,用INT13H调用。
其中一种AH=2,读指定扇区到内存,其入口条件如下:
入口参数:
ES:
BX=内存缓冲区首址
DL=盘号(0~3)
DH=磁头号
CH=磁道号
CL=扇区号
Al=扇区数
根据题目要求和INT13H功能调用,程序如下:
MOVAH,02;读扇区
MOVAL,01;读一个扇区
MOVDL,01;B盘
MOVDH,00;磁头0(0面)
MOVCL,03;第3扇区
LEABX,INBUF;附加段偏移地址ES:
BX
INT13H;BIOS功能调用
INT3;暂停(用于DEBUG的断点指令)
调用返回时,AL中实际读取的扇区数,DS、BX、CX和DX内容不变。
55.编写DOS的调用程序
【参考答案】P283例228
用DOS功能调用将内存数据区首地址OUTBUF的256B数据写到磁盘上,磁盘文件代号为ABC。
IBMPC磁盘操作系统(DOS)提供了一组DOS磁盘存储功能。
使用这组功能调用可以很方便地从磁盘上读取某个文件(程序或数据)或把某一个文件写到磁盘中去。
文件代号存取方式使用DOS的INT21H功能调用。
其中功能之一是写文件,入口条件和返回结果如下:
AH=40,写文件
入口条件:
DS=数据缓冲区段地址
DX=数据缓冲区偏移地址
BX=文件代号
CX=写入的字节数
返回结果:
CF=0,操作成功,AX=实际写入的字节数
CF=1,出现错误,AX=错误代码
根据题目要求和INT21H功能调用,本例的程序如下:
…
ABCDW?
OUT
DB256DUP(?
)
BUF
MOVAH,40H;DOS“写文件”功能号
MOVCX,256;写入字节数
MOVBX,ABC;文件代号
LEADX,OUTBUF;内存数据区地址
INT21H;DOS功能调用
JCERROR1;写入出错转ERROR1
CMPAX:
256;实际写入字节数与设定值比较
JNEERROR2;不等错误转ERROR2
MOVAH,3EH;DOS“关闭文件”功能号
MOVBX,ABC
INT21H;关闭文件ABC
56.通过BIOS功能调用,将显示器设置成图形方式(640×200),并显示彩条,编写程序
【参考答案】(P380例297)
当背景为蓝色,调色板为0
,然后,每行显示一种颜色,每4行(背景色、绿色、红色、棕色)重复一次,直到整个屏幕都显示出彩条。
IBMPC在BIOS中断调用模块中,提供了较多的显示器编程功能,下表给出了部分图形显示模式。
选择适当的功能调用,即可方便地实现各种彩色显示。
表EGA的扩充图形模式
功能号
调用参数及工作模式
(AH=0)
置显示模式
……
(AL)=0DH320×20016色
(AL)=0EH640×20016色
(AL)=0FH640×350单色
(AL)=10H640×3504色(EGA中VRAM=64KB)
640×35016色(EGA中VRAM≧112KB)
汇编源程序如下:
STACKSEGMENTPARASTACK'STACK'
DB32DUP(?
);堆栈段
STACKENDS
CODESEGMENTPARAPUBLIC'CODE'
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 习题集 04 程序设计 answers