汇编语言程序设计复习附答案完整版Word文件下载.docx
《汇编语言程序设计复习附答案完整版Word文件下载.docx》由会员分享,可在线阅读,更多相关《汇编语言程序设计复习附答案完整版Word文件下载.docx(10页珍藏版)》请在冰豆网上搜索。
13.指令JMP
14.下列叙述不正确的是 B
A.在不改变堆栈段寄存器的情况下,堆栈大小为64KB
B.紧跟设置堆栈段寄存器指令可以是设置堆栈指针以外的任何指令
C.中断服务程序的返回地址在堆栈中
D.堆栈中数据存放的特点是先进后出
15.一个有128个字的数据区,它的起始地址为12ABH:
00ABH,请给出这个数据区最末一个字单元的物理地址是 C
A.12CSBH B.12B6BH C.12C59H D.12BFEH
16.在下列指令的表示中,不正确的是 C
A.MOV
AL,[BX+SI]
B.JMP
SHORT
DONI
C.DEC
[BX]
D.MUL
CL
17.在进行二重循环程序设计时,下列描述正确的是 A
A.外循环初值应置外循环之外;
内循环初值应置内循环之外,外循环之内
B.外循环初值应置外循环之内;
内循环初值应置内循环之内
C.内、外循环初值都应置外循环之外
D.内、外循环初值都应置内循环之外,外循环之内
18.条件转移指令JNE的测试条件为 A
A.ZF=0 B.CF=0 C.ZF=1 D.CF=1
19.将DX的内容除以2,正确的指令是 C
20.已知BX=2000H,SI=1234H,则指令MOV
AX,[BX+SI+2]的源操作在(A
)中。
A.数据段中偏移量为3236H的字节
B.附加段中偏移量为3234H的字节
C.数据段中偏移量为3234H的字节
D.附加段中偏移量为3236H的字节
21.执行如下程序:
MOV
AX,0
BX,1
CX,100
A:
ADD
AX,BX
INC
BX
LOOP
A
HLT
执行后(BX)= C
A.99 B.100 C.101 D.102
22.上题的程序执行后(AX)= B
A.5000 B.5050 C.5100 D.5150
23.在下列指令中,__D____指令的执行会影响条件码中的CF位。
A.JMP
NEXT B.JC
NEXT
C.INC
BX D.SHL
AX,1
24.下面指令序列执行后完成的运算,正确的算术表达式应是D
MOV
AL,BYTE
X
SHL
AL,1
DEC
AL
BYTE
Y,AL
A.y=x*2+1 B.x=y*2+1 C.x=y*2-1 D.y=x*2-1
25.在一段汇编程序中多次调用另一段程序,用宏指令比用子程序实现起来。
B
A.占内存空间小,但速度慢
B.占内存空间大,但速度快
C.占内存空间相同,速度快
D.占内存空间相同,速度慢
26.在程序执行过程中,IP寄存器中始终保存的是 B
A.上一条指令的首地址
B.下一条指令的首地址
C.正在执行指令的首地址
D.需计算有效地址后才能确定地址
二、简答
1.假定(DX)=10111001B,(CL)=3,(CF)=1,试确定下列各条指令单独执行后,DX中的值。
(3分)
(1)SHR
(2)RCR
DL,1
(3)RCL
DX,CL
答:
(1)005CH
(2)00DCH(3)05CCH
2.写出完成下述功能的程序段:
(8分)
(1)传送25H到AL寄存器
(2)将AL的内容乘以2
(3)传送15H到BL寄存器
(4)AL的内容乘以BL的内容
并请写出最后(AX)=?
(1)MOVAL,25H
(2)SHLAL,1
(3)MOVBL,15H
(4)MULBL
AX=612H
3.指出下列指令的错误原因。
(14分)
(1)MOVBX,AL操作数类型不同
(2)MOV256,CX
(3)POPCS
(4)MUL45H
(5)MOVDS,2000H
(6)JMPWORDPIRLOO
(7)INAL,3F8H
5.设某数据段:
DATASEGMENT
ORG20H
NUM1=8
NUM2=NUM1+10H
DA1DB'
COMPUTER'
DB0AH,0DH
COUNTEQU$-DA1
DA2DW'
CO'
,'
MP'
UT'
ER'
DATAENDS
试回答:
(1)DA1的偏移地址是什么?
(2)COUNT的值是什么?
(3)DA2+5字节单元的内容是什么?
答:
(1)0020H
(2)002AH-0020H=0AH=10
(3)”U”
6.某程序段如下:
MOVDX,0EFADH
MOVAX,1234H
MOVCL,4
SHLDX,CL
MOVBL,AH
SHLAX,CL
SHRBL,CL
ORDL,BL
上面的程序段执行完后,DX、AX的内容是什么?
DX=FAD0H
AX=2340H
三、填空
1.计算机语言分为机器语言、汇编语言和高级语言。
2.23D=10111B,100101011B=12BH。
3.8086系统的操作数分为立即操作数、寄存器操作数和存储器操作数三种类型。
4.8086CPU内部共有14个16位的寄存器。
5.汇编语言的编译程序一般用Edit,调试程序一般用debug。
四、程序分析
1.现有如下程序段:
DATA
SEGMENT
ORG
0020H
DA1
DW
12H,23H
DA2
DB
11H,21H
DA3
EQU
1234H
DA4
$-DA2
DA5
31H,32H
DATA
ENDS
请回答:
(1)该程序段已占有的存储字节数是多少?
(2)符号名DA4的值是多少?
符号名DA5的值是多少?
(1)
该程序段已占有的存储字节数是8个字节。
(2)
符号名DA4的值为2,符号名DA5的值是0026H。
2.阅读如下程序段,回答所提出的问题,假定X1,X2,XN为无符号数。
ORG
100H
BLOCK
DW
X1,X2,…,XN
COUNT
EQU($-BLOLOK)/2
RESULT
COUNT,?
LEA
BX,BLOCK-2
MOV
CX,RESULT
XOR
AX,AX
GOON:
ADD
BX,2
CMP
AX,[BX]
JAE
NEXT
NEXT:
LOOP
GOON
RESULT+2,AX
程序段执行完,回答下述问题
RESULT+2字存储单元的内容=_MAX(X1,
X2,
…
XN)_____
BX=__100H
+
2×
(COUNT-1)____
程序循环次数=__COUNT____
五、程序填空题
1.在表TABLE处存放着N个无符号字节数,求表中前10个字节数的总和并保存在AX寄存器中。
如果总和值超过AX寄存器的容量,则置AX寄存器内容不变。
请在程序中的空格处填入适当指令使其完整。
LEA
BX,TABLE
CX,10
SUM,AX
MEXT:
(1)ADDAL,[BX]
ADC
AH,0
JNC
DON
(2)MOVAX,SUM
JC
END0
DON:
INC
BX
(3)LOOPNEXT
ENDO:
HLT
2.BEG为起始地址的存储区域中存放有100个字节数据,现将其首、尾颠倒过来,重新排放这100个字节数据。
请在程序中的空格处填入适当的指令使其完整。
CX,32H
LEA
SI,BEG
DI,SI
(1)ADDDI99
DON:
MOV
AL,[SI]
(2)XCHGAL,[DI]
[SI],AL
(3)INCSI
DEC
DI
3.下面程序段完成用单个字符输入的1号功能调用,从键盘输入10个字符,然后用2号功能调用以相反的顺序显示输出这10个字符。
请在空白处添上适当的指令(每一空白处只添一条指令)。
MOVCX,10
LOP1:
MOVAH,1
INT21H
PUSHAX
LOOPLOP1
LOP2:
POPDX
MOVAH,2
LOOPLOP2
4.下面程序段完成将以BUFF为首地址的内存区域全部存储0FFH数据。
BUFFDB20HDUP(?
)
┋
LEDDI,BUFF
MOVAX,0FFFFH
MOVCX,10H
CLD
REPSTOSW
六、编制程序题
1.试编写一个汇编语言子程序,要求将包含任意字符、以0结尾的字符串中的小写字母转换成大写字母。
assumecs:
code,ds:
data
datasgsegment
db'
BeginnersAll-purposeSymbolicInstructionCode.'
0
datasgends
codesgsegment
begin:
movax,data
movds,ax
movsi,0
callletterc
movah,4ch
int21h
letterc:
pushax
s:
moval,[si]
movah,0
movcx,ax
jcxzreturn
cmpal,61h
jbnext
cmpal,91h
janext
andal,11011111b
mov[si],al
next:
incsi
jmpshorts
return:
popax
ret
codesgends
endbegin
2.写一程序段,求双字长数DX∶BX的相反数。
NEG
DX
NEG
AX
SBB
DX,
3.设在内存单元SQTAB首址开始存放了0~15的平方数表。
要求用直接查表法编一程序,求出A单元中给定数(<=15=的平方值送B单元保存。
答:
DATA
SEGMENT
SQTAB
DB
0,1,4,9,16,25,36,49,64,81
100,121,144,169,196,225
A
12
B
DB?
DATA
ENDS
CODE
ASSUME
CS:
CODE,DS:
START
PROC
PUSH
XOR
AX,AX
MOV
AX,DATA
DS,AX
BX,OFFSET
AL,A
XLAT
B,AL
RET
START
ENDP
CODE
ENDS
END
4.编写一个子程序,对两个128位数据相加。
书上221页
5.编写程序求:
X+10H(X<
0))
Y=32X(0≤X≤10)
X-90H(X>
10)
STACKSEGMENTPARASTACK‘STACK’
DB100DUP(0)
STACKENDS
DATASEGMENT
XDW?
YDW?
DATAENDS
CODESEGMENT
ASSUMECS:
CODE,DS:
DATA
START:
MOVAX,DATA
MOVDS,AX
MOVAX,X
CMPAX,0
JGECASE23
ADDAX,10H;
第一种情况的计算结果
JMPRESULT
CASE23:
CMPAX,10D
JGCASE3
MOVBX,30D
IMULBX;
第二种情况的计算结果
JMPRESULT
CASE3:
SUBAX,190H;
第三种情况的计算结果
RESULT:
MOVY,AX;
结果保存到变量Y中
MOVAH,4CH
INT21H
CODEENDS
ENDSTART