习题集04程序设计answersWord格式文档下载.docx
《习题集04程序设计answersWord格式文档下载.docx》由会员分享,可在线阅读,更多相关《习题集04程序设计answersWord格式文档下载.docx(91页珍藏版)》请在冰豆网上搜索。
字节(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.阅读下列程序段,说明其功能并画出程序流程图。
BLOCKDB'
ERROR!
'
0DH,0AH,'
$'
stacksegmentstack'
stack'
dw32dup(?
stackends
codesegment
beginprocfar
assumess:
stack,cs:
code
pushds
subax,ax
pushax
MOVAH,1
INT21H
CMPAL,'
a'
JBNEXT
z'
JANEXT
ANDAL,11011111B
MOVDL,AL
MOVAH,02
JMPDONE
NEXT:
LEADX,BLOCK
MOVAH,9
DONE:
ret
beginendp
codeends
endbegin
编程实现将键盘输入的小写字母转换成大写后输出
23.阅读下列程序段,说明其功能并画出程序流程图。
TABDWLAB0
DWLAB1
DWLAB2
DWLAB3
DWLAB4
DWLAB5
DWLAB6
STACKSEGMENTSTACK'
STACK'
DW32DUP(?
STACKENDS
CODESEGMENT
BEGINPROCFAR
ASSUMECS:
CODE,DS:
DATA
A'
JBDONE
G'
JADONE
SUBAL,'
ANDAX,000FH
SHLAX,1
MOVBX,AX
JMPTAB[BX]
LAB0:
LAB1:
LAB2:
LAB3:
LAB4:
LAB5:
LAB6:
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
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单元中。
34.编写一子程序,完成将NUM单元中16位数以十六进制形式显示在当前光标处。
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。
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。
39.已知AL的内容为01101011B,执行指令NEGAL后,再执行CBW,这时AX中的内容为()。
FF9BH
40.下列程序段实现的功能是()。
NEGDX,NEGAX,SBBDX,0
对存放在DX、AX的双字数据求补。
41.下列程序段实现的功能是()。
MOVBX,0;
NEGAX;
SBBBX,DX;
MOVDX,BX.
42.下列程序段实现的功能是()。
MOVBX,0;
MOVCX,0;
SUBBX,AX;
SBBCX,DX;
MOVAX,BX;
MOVDX,CX.
43.下列程序段实现的功能是()。
NEGAX;
NOTDX;
CMC;
ADCDX,0.
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;
(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
INCAX
ADDBX,AX
SHRDX,1
LOOPNEXT
48.程序段执行后,AX、BX、CX和DX寄存器的内容分别是什么?
LOOPENEXT【参考答案】清华温东阳P60
49.程序段执行后,AX、BX、CX和DX寄存器的内容分别是什么?
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]
52.下面是一个定义数据的程序段,设DATA值为1200H,请图示各数据在内存的存放形式。
ORG100H
BUF1DB10H,20H,30H,40H,50H
BUF2DWBUF1
BUF3DDBUF1
COUNTEQUBUF2-BUF1
BUF4DWBUF2-BUF1
【参考答案】清华温东阳P68
5个数据
10
1200:
0100(BUF1)
20
0101
30
0102
40
0103
50
0104
BUF1的有效地址(DW)
00
0105(BUF2)
01
0106
BUF1的逻辑地址(DD)
0107(BUF3)
0108
0109
12
010A
BUF2-BUF1的偏移量相减代表BUF1占用的字节数
05
010B(BUF4)
010C
53.阅读程序并完成填空。
ADDR1开始的单元中连续存放两个双字数据,求其和,并将和存放在ADDR2开始的单元。
(假定和不超过双字)
MOVCX,2
XORBX,BX
CLC
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
关闭文件ABC
56.通过BIOS功能调用,将显示器设置成图形方式(640×
200),并显示彩条,编写程序
(P380例297)
当背景为蓝色,调色板为0
,然后,每行显示一种颜色,每4行(背景色、绿色、红色、棕色)重复一次,直到整个屏幕都显示出彩条。
IBMPC在BIOS中断调用模块中,提供了较多的显示器编程功能,下表给出了部分图形显示模式。
选择适当的功能调用,即可方便地实现各种彩色显示。
表EGA的扩充图形模式
功能号
调用参数及工作模式
(AH=0)
置显示模式
……
(AL)=0DH320×
20016色
(AL)=0EH640×
(AL)=0FH640×
350单色
(AL)=10H640×
3504色(EGA中VRAM=64KB)
640×
35016色(EGA中VRAM≧112KB)
汇编源程序如下:
STACKSEGMENTPARASTACK'
DB32DUP(?
);
堆栈段
CODESEGMENTPARAPUBLIC'
CODE'