汇编语言程序设计复习附答案完整版 2.docx
《汇编语言程序设计复习附答案完整版 2.docx》由会员分享,可在线阅读,更多相关《汇编语言程序设计复习附答案完整版 2.docx(15页珍藏版)》请在冰点文库上搜索。
汇编语言程序设计复习附答案完整版2
一、选择
1.下面指令执行后,改变AL寄存器内容的指令是(D)。
A.TESTAL,02HB.ORAL,AL
C.CMPAL,BLD.ANDAL,BL
2.对寄存器AX的内容乘以4的正确指令序列是(B)。
A.SHRAX,1/SHRAX,1B.SHLAX,1/SHL,AX,1
C.ROLAX,1/ROLAX,1D.RCRAX,1/RCRAX,1
3.设DS=8225H,DI=3942H,指令NEGBYTEPTR[DI]操作数的物理地址是(A)
A.85B92HB.86192HC.BB690HD.12169H
4.指令JMP FAR PTR DONE属于C
A.段内转移直接寻址
B.段内转移间接寻址
C.段间转移直接寻址
D.段间转移间接寻址
5.将DX的内容除以2,正确的指令是 C
A.DIV 2 B.DIV DX,2 C.SAR DX,1 D.SHL DX,1
6.编写分支程序,在进行条件判断前,可用指令构成条件,其中不能形成条件的指令有(D)。
A.CMPB.SUBC.ANDD.MOV
7.汇编语言源程序中,每个语句由四项组成,如语句要完成一定功能,那么该语句中不可省略的项是(B)。
A.名字项B.操作项C.操作数项D.注释项
8.假设执行ADD指令后AX=006EH,再执行AAA指令,AX中的值是(B)
A.14HB.0104HC.74HD.04H
9.用MOV指令将十进制数89以非压缩BCD码格式存入AX,可使用的指令是(D)
A.MOVAX,89B.MOVAX,0809
C.MOVAX,89HD.MOVAX,0809H
10.下列语句中能与“DA1DB32H,34H”语句等效的是(A)
A.MOVDA1,32HB.MOVDA1,32
C.MOVWORDPTRDA1,3234HD.MOVWORDPTRDA1,‘24’
MOVDA1+1,34HMOVDA1+1,34
11.使用DOS功能调用时,子程序的编号应放在寄存器中(A)
A.AHB.ALC.AXD.任意指定
12.下列语句中能实现留空8个字节单元的语句是(D)
13.A.DA1DT?
B.DA2DW?
,?
C.DA3DD?
D.DA4DQ?
13.指令JMP FAR PTR DONE属于C
A.段内转移直接寻址
B.段内转移间接寻址
C.段间转移直接寻址
D.段间转移间接寻址
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
A.DIV 2 B.DIV DX,2 C.SAR DX,1 D.SHL DX,1
20.已知BX=2000H,SI=1234H,则指令MOV AX,[BX+SI+2]的源操作在(A )中。
A.数据段中偏移量为3236H的字节
B.附加段中偏移量为3234H的字节
C.数据段中偏移量为3234H的字节
D.附加段中偏移量为3236H的字节
21.执行如下程序:
MOV AX,0
MOV BX,1
MOV 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 PTR X
SHL AL,1
DEC AL
MOV BYTE PTR 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 DX,1
(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 EQU $-DA2
DA5 DB 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 DW COUNT,?
LEA BX,BLOCK-2
MOV CX,RESULT
XOR AX,AX
GOON:
ADD BX,2
CMP AX,[BX]
JAE NEXT
MOV AX,[BX]
NEXT:
LOOP GOON
MOV 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
MOV CX,10
MOV 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个字节数据。
请在程序中的空格处填入适当的指令使其完整。
MOV CX,32H
LEA SI,BEG
MOV DI,SI
(1)ADDDI99
DON:
MOV AL,[SI]
(2)XCHGAL,[DI]
MOV [SI],AL
(3)INCSI
DEC DI
LOOP DON
HLT
3.下面程序段完成用单个字符输入的1号功能调用,从键盘输入10个字符,然后用2号功能调用以相反的顺序显示输出这10个字符。
请在空白处添上适当的指令(每一空白处只添一条指令)。
MOVCX,10
LOP1:
MOVAH,1
INT21H
PUSHAX
LOOPLOP1
MOVCX,10
LOP2:
POPDX
MOVAH,2
INT21H
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, 0
3.设在内存单元SQTAB首址开始存放了0~15的平方数表。
要求用直接查表法编一程序,求出A单元中给定数(<=15=的平方值送B单元保存。
4.
答:
DATA SEGMENT
SQTAB DB 0,1,4,9,16,25,36,49,64,81
DB 100,121,144,169,196,225
A DB 12
B DB?
DATA ENDS
CODE SEGMENT
ASSUME CS:
CODE,DS:
DATA
START PROC FAR
PUSH DX
XOR AX,AX
PUSH AX
MOV AX,DATA
MOV DS,AX
MOV BX,OFFSET SQTAB
MOV AL,A
XLAT
MOV B,AL
RET
START ENDP
CODE ENDS
END START
4.编写一个子程序,对两个128位数据相加。
5.
6.答:
书上221页
7.
8.
9.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