汇编语言模拟试题及答案 一单项选择题在每小题的四个备选答案中选出一个正确的答案并将其号码填
在题干后的括号内每小题1分共20分
1指令JMP FAR PTR DONE属于 参考答案为:C
A段内转移直接寻址
B段内转移间接寻址
C段间转移直接寻址
D段间转移间接寻址
[解析]略
2下列叙述正确的是 参考答案为:C
A对两个无符号数进行比较采用CMP指令对两个有符号数比较用CMPS指
令
B对两个无符号数进行比较采用CMPS指令对两个有符号数比较用CMP指
令
C对无符号数条件转移采用JAE/JNB指令对有符号数条件转移用JGE/JNL
指令
D对无符号数条件转移采用JGE/JNL指令对有符号数条件转移用JAE/JNB
指令
[解析]对于无符号数和有符号数的比较都采用CMP指令
CMPS指令是串比较指令
对两个无符号数的条件转移指令应是JAE、JNB、JBE、JNA
对两个有符号数的条件转移指令应是JGE、JNL、JLE、JNG。
3一个有128个字的数据区它的起始地址为12ABH00ABH请给出这个数
据区最末一个字单元的物理地址是 参考答案为:C
A12CSBH
B12B6BH
C12C59H
D12BFEH
[解析]末字与首字相隔1281127个字且每个字占用2个字节因此末
字单元的物理地址应为
首字单元的物理地址1281×2
即 12ABH×10H00ABH1281×212C59H。
4在下列指令的表示中不正确的是 参考答案为:C
AMOV AL[BX+SI]
BJMP SHORT DONI
CDEC [BX]
DMUL CL
[解析]当只有一个存储器操作数时这个操作数的类型不明确例如选项C中的
[BX]没有明确的说明访问该存储单元的类型此时存储器操作数就必须需用类型
说明如
DEC BYTE PTR [BX] 或 DEC WORD PTR [BX]
但是在题目的选项C中没有指出存储器操作数类型所以该指令是不正
确的而其它选项中的指令均是正确的。 5在进行二重循环程序设计时下列描述正确的是 参考答案为:A
A外循环初值应置外循环之外内循环初值应置内循环之外外循环之内
B外循环初值应置外循环之内内循环初值应置内循环之内
C内、外循环初值都应置外循环之外
D内、外循环初值都应置内循环之外外循环之内
[解析]循环参数置初值应在进入循环以前给出。
6条件转移指令JNE的测试条件为 参考答案为:A
AZF=0
BCF0
CZF=1
DCF=1
[解析]略。
78086CPU在基址加变址的寻址方式中变址寄存器可以为
参考答案
为:D
ABX或CX
BCX或SI
CDX或SI
DSI或DI
[解析]略
8已知BX=2000HSI=1234H则指令MOV AX[BX+SI+2]的源操作在
中。 参考答案为:A
A数据段中偏移量为3236H的字节
B附加段中偏移量为3234H的字节
C数据段中偏移量为3234H的字节
D附加段中偏移量为3236H的字节
[解析]指令中的源操作数的寻址方式是相对基址变址寻址且由于其中的基址寄
存器采用的是BX所以源操作数是在数据段中其偏移量为
BX+SI+2=2000H+1234H+2=3236H
9执行如下程序
MOV AX0
MOV BX1
MOV CX100
AADD AXBX
INC BX
LOOP A
HLT
执行后BX= 参考答案为:C
A99
B100
C101
D102
[解析]1在进入循环之前有三条指令分别初始化寄存器AX为0、BX为1、
CX为100
2由于循环的控制部分采用的是LOOP指令该指令有使CX减1并判断其是否为0的功能所以可知该循环的执行次数为100次
3循环体的主要功能是每次循环使AX中的内容累加BX的内容并使BX
的内容加1。
4直到最后一次即第100次循环时加到AX中的BX的内容为100
且使BX加1即变为101后退出循环体。所以当执行完该段程序后BX的内容为
101。
5该段程序的功能是AX12……1005050
10上题的程序执行后AX= 参考答案为:B
A5000
B5050
C5100
D5150
[解析]请参看上题中的分析。
正确答案B。
11对于下列程序段
AGAINMOV AL[SI]
MOV ES[DI]AL
INC SI
INC DI
LOOP AGAIN
也可用______指令完成同样的功能。 参考答案为:A
AREP MOVSB
BREP LODSB
CREP STOSB
DREPE SCASB
[解析]该段程序的功能是将SI所指向的数据段中的数据顺序传送给DI所指向的附加段
的一段数据区中并且每次传送一个字节即实现了字节串传送的功能所以也可以使用
REP MOVSB指令来完成同样的功能。
12下面指令序列执行后完成的运算正确的算术表达式应是
MOV ALBYTE PTR X
SHL AL1
DEC AL
MOV BYTE PTR YAL 参考答案为:D
Ay=x2+1
Bx=y2+1
Cx=y2-1
Dy=x2-1
[解析]该段程序的第一条指令的功能是将X传送给AL
第二条指令的功能是将AL的内容左移1位即使得AL的内容扩大2倍
第三条指令的功能是使AL的内容减1
第四条指令的功能是将AL传送给Y
综上所述该程序完成的运算是Y=2X-1。
13在一段汇编
程序中多次调用另一段程序用宏指令比用子程序实现起来。 参
考答案为:B A占内存空间小但速度慢
B占内存空间大但速度快
C占内存空间相同速度快
D占内存空间相同速度慢
[解析]1宏指令简化程序的书写不节省程序存储空间但执行时间比子程序短。
2子程序简化程序的书写也节省程序的存储空间但执行时间比宏指令长。
14在程序执行过程中IP寄存器中始终保存的是 参考答案为:B
A上一条指令的首地址
B下一条指令的首地址
C正在执行指令的首地址
D需计算有效地址后才能确定地址
[解析]在程序运行过程中它始终指向下一条指令的首地址它与CS代码段寄存器联
合确定下一条指令的物理地址。
15PSW寄存器中共有______位条件状态位有______位控制状态位。 参考答
案为:A
A6、3
B3、6
C8、4
D4、8
[解析]PSW有6位条件状态位AF、CF、ZF、PF、SF、OF
PSW有3位控制状态位IF、TF、DF
16下列指令执行时出错的是 参考答案为:A
AADD BUF1BUF2
BJMP DWORD PTR DAT [BX]
CMOV AX[BX+DI] NUM
DTEST AL08H
[解析]ADD指令的两个操作数不能同时是存储器操作数所以选项A中的指令是错误
的。
17已知AX=1234H执行下述三条指令后AX= 参考答案为:D
MOV BXAX
NEG BX
ADD AX,BX
A1234H
B0EDCCH
C6DCCH
D0000H
[解析]第一条指令的功能是将AX→BX即BX中的内容为1234H
第二条指令的功能是对BX求补即BX中的内容变为1234H
第三条指令的功能是AX+BX→AX即1234H+(-1234H)=0→AX
所以执行三条指令后AX的内容为0。
18在下列指令中______指令的执行会影响条件码中的CF位。 参考答案为:D
AJMP NEXT
BJC NEXT
CINC BX DSHL AX1
[解析]JMP、JC指令不任何影响状态标志位
INC指令执行结果除不影响CF外其余状态标志位(AF、OF、PF、SF、ZF)都受
影响。
SHL指令使CF=OOFO影响ZF、SF、PF标志位AF无定义。
19串指令中的目的操作数地址是由______提供。 参考答案为:C
ASS[BP]
BDS[SI]
CES[DI]
DCS[IP]
[解析]略
20将DX的内容除以2正确的指令是 参考答案为:C
ADIV 2
BDIV DX2
CSAR DX1
DSHL DX1
[解析]选项A中的的指令执行的操作是AX/2
选项B中的的指令书写格式不正确
选项C中的的指令执行的操作是:将DX的内容右
移一位将使DX的内容缩小为
原先的1/2即将DX的内容除以2
选项D中的的指令执行的操作是:将DX的内容左移一位将使DX的内容扩大为原先
的2倍即将DX的内容乘以2。
[解析](1)指令SHR DX, 1 使DX的内容向右移动了一位因此DX的内容变为
0000?0000?0101?1100B即005CH。
(2)指令RCR DL, 1 使DL的内容向右循环带进位移动了一位DH的内容不变
因此DX的内容变为0000?0000?1101?1100B即00DCH。
(3)指令RCL DX, CL 使DX的内容向左循环带进位移动了3位因此DX的内容
变为0000?0101?1100?1100B即05CCH。
2写出完成下述功能的程序段
1传送25H到AL寄存器
2将AL的内容乘以2
3传送15H到BL寄存器
4AL的内容乘以BL的内容
并请写出最后AX=
答1MOV AL, 25H
2SHL AL, 1
3MOV BL, 15H
4MUL BL
最后AX=612H =1554
[解析]1将AL的内容左移1位将使它的内容扩大2倍即使AL的内容乘以2。
2最后AX的内容应为25H*2*15H=612H=1554
3写一程序段求双字长数DX∶bX的相反数。
答:NEG DX
NEG AX SBB DX, 0
[解析]求双字长数DX:AX相反数即对其求补所以应实现的操作是:
(DX:AX) ← 0-(DX:AX)
即 0 : 0
-) DX : AX
将上面的算式分解后即为对DX求补对AX求补并从DX中减去将AX求补
时产生的借位。所以相应的指令就是
NEG DX
NEG AX
SBB DX, 0
三程序分析题每小题6分共36分
1现有如下程序段
DATA SEGMENT DA3 EQU 1234H
ORG 0020H DA4 EQU -DA2
DA1 DW 12H23H DA5 DB 31H32H
DA2 DB 11H21H DATA ENDS
注意程序是从左到右看先把左边的程序段看完了再看右边的程序段。下面的程序段
以相同的方法进行读解。
请回答1该程序段已占有的存储字节数是多少
2符号名DA4的值是多少符号名DA5的值是多少
答(1) 该程序段已占有的存储字节数是8个字节。
(2) 符号名DA4的值为2符号名DA5的值是0026H。
[解析]1伪指令ORG 0020H设置存储单元起始偏移地址为0020H
2符号名DA1的值即所对应存储单元的偏移地址是0020H该数据区的类型
为字有2个字数据所以共占用4个字节
3符号名DA2的值即所对应存储单元的偏移地址是0024H该数据区的类型
为字节有2个字节数据所以共占用2个字节
4经EQU定义的符号名DA3、DA4不占
用存储空间“$” 用来表示当前地址计
数器的值0026H可它们的值分别为DA3=1234H, DA4=2。
5符号名DA5的值即所对应存储单元的偏移地址是0026H该数据区的类型
为字节有2个字节数据所以共占用2个字节
6综上所述该程序段共占有的存储字节数8个字节。
2执行下列程序段后回答问题。
ORG 1221H MOV BX OFFSET NUM
NUM DW 12H MOV CLBYTE PTR NUM+1
… MOV CHTYPE NUM
MOV AXNUM HLT
请问AX=______BX=______CX=______。
答(AX)=0012H (BX)=1221H (CX)=0200H
[解析]1指令MOV AX, NUM的功能是将NUM单元的字内容12H传送给AX
使得(AX)=0012H
2指令MOV BX, OFFSET NUM的功能是将NUM单元的偏移地址1221H传送给
BX使得(BX)=1221H 3指令MOV CL, BYTE PTR NUM+1的功能是将NUM+1(1222H)单元的字节内容
(即NUM字单元的高字节)00H传送给CL使得(CL)=00H
4指令MOV CL, TYTE NUM的功能是将NUM字单元的类型字节数2传送给CH
使得(CH)=02H
5综合第4和第5点可知CX寄存器的内容为0200H。
3阅读如下程序
ADRR DB XXHXXH……XXH CMP ADRR[BX]0
NUM EQU -ADRR LOOPZ DON
RETT DB JNZ NEXT
… MOV BLOFFH
MOV CXNUM NEXTMOV RETTBL
MOV BX-1 HLT
DONINC BX
请问1该程序完成的功能是什么
2程序执行后指出RETT字节单元中的内容是什么
答(1) 在以ADRR为起始地址的数组中查找第一个非0数据。
(2) 若找到则将第一个非0数据在数组中的偏移量送入RETT单元中若无非0数
据则将OFFH送入RETT单元中。
[解析]1)程序的前3条指令用于定义数据
以ADRR为起始地址的数组
NUM的值为ADRR数组的数据个数
RETT是一个空的字节单元
2该程序的主体是一个循环该循环的主要功能是在数组ADRR中第一个非0数据。
如果是由于找到则将第一个非0数据在数组中的偏移量送入RETT单元中若没找到非0
数据则将OFFH送入RETT单元中。
4现有一子程序
SUB1 PROC PLUSTEST BL80H
TEST AL80H 检测AL中的数值最高位 JE EXITO
JE PLUS XCHANGEXCHG ALBL
TEST BL80H EXITORET
JNE EXITO SUB1 ENDP
JMP XCHANGE
试回答1子程序的功能是什么
2若调用子程序前AL=9AHBL=77H则返回主程序时AL=______
BL=______。
答(1)子程序的功能是判别AL和BL中的数是否为异号数当为异号时
交换否则不变。
(2) AL=77H, BL=9AH
[解析]1数据是以二进制的形式存储在计算机中的。数据对应的二进制数的最高
位是数据的符号位若为0表示该数为正数若为1表示该数为负数
2TEST AL, 80H 和 TEST BL,80H指令是在测试AL和BL的最高位即符号位
的状态是1还是0。
3若两个数的最高位即符号位的状态不同的时候即两数为异号则执行
XCHANGE标号所对应语句即交换AL和BL中的内容。 4否则若两个数的最高位即符号位的状态相同的时候即两数为同号则执
行EXIT0标号所对应语句程序结束即AL和BL中的内容不被。
5所以第二问中AL=9AH,BL=77HAL中的数据的最高位为1BL中的数据的
最高位为0即两个数为异号所以要交换AL和BL中的内容即AL=77H,BL=9AH。
5阅读程序段
BLOCK DB 20H1FH08H81HOFFH… LOP1CMP AL[SI+1]
RESULT DB JNG NEXT
… MOV AL[SI+1]
STARTLEA SIBLOCK NEXTINC SI
MOV CX[SI] LOOP LOP1
INC SI MOV RESULTAL
MOV AL[SI] HLT
请问1该程序完成的功能是什么
2该程序循环的次数是多少
答(1) 该程序完成的功能是从20H32个有符号数中找出最小的数送入
RESULT单元中。
(2) 该程序的循环次数是1FH31。
[解析]1指令LEA SI, BLOCK的功能是使SI指向了BLOCK数组的首单元
2指令MOV CX, [SI]的功能是将SI指向单元的内容20H传送给CX即(CX)=20H
其后又有指令DEC CX使得CX的内容变为1FH再看循环体的控制部分采用的指令是
LOOP可知该循环的执行次数为1FH次
3循环体的主要功能是将AL中的内容与[SI]所指向数组的每一个数据进行比较
从数组中选出最小数保存在AL中。
4由于比较后采用的转移指令是JNG所以该程序处理的显然是一组有符号的数
据。
6阅读如下程序段回答所提出的问题假定X1X2XN为无符号数。
ORG 100H
BLOK DW X1X2…XN
COUNT EQU-BLOLOK/2
RESULT DW COUNT
LEA BXBLOK-2
MOV CXRESULT
XOR AXAX
GOONADD BX
2
CMP AX[BX]
JAE NEXT
MOV AX[BX]
NEXTLOOP GOON
MOV RESULT+2AX
程序段执行完回答下述问题
RESULT+2字存储单元的内容=______
BX=______
程序循环次数=______
答:RESULT+2字存储单元的内容是MAX(X1, X2, … XN) BX= 100H + 2×(COUNT-1)
程序循环次数 COUNT
[解析]1该程序段的开始4条指令定义了以下数据
以BLOK为起始地址的字数组该数组首单元的偏移地址即BLOK为 100H
COUNT的值为BLOK字数组的数据个数
RESULT存储区的第一个字的内容为COUNT即BLOK字数组的数据个数第二
个字的内容为空。
2循环体的主要功能是从BLOK字数组中找出最大数送入RESULT的第二个字单
元中
3循环次数为数组中数据的个数即COUNT个。
4当循环结束后BX中将存放最后一个字数据的偏移地址首字偏移地址末
字与首字的相隔的字节数即100H + 2×(COUNT-1)。
四程序填空题注意下列各小题中每空只能填一条指令每小题6分共12分
1在表TABLE处存放着N个无符号字节数求表中前10个字节数的总和并保存在
AX寄存器中。如果总和值超过AX寄存器的容量则置AX寄存器内容不变。请在程序中
的空格处填入适当指令使其完整。
LEA BXTABLE 2
MOV CX10 JC END0
MOV SUMAX DONINC BX
MEXT1 3
ADC AH0 ENDOHLT
JNC DON
答(1) ADD AL, [BX]
(2) MOV AX, SUM
(3) LOOP NEXT
[解析]1程序的前三条指令的功能分别是
将表TABLE的首址传送给BX
将循环次数传送给计数器CX
将AX的原值保存在SUM单元中
以上指令实现了设置循环初始参数的功能。
2标号NEXT所对应的第一个空白处就是循环体的第一条指令。根据题目的要求
——求表中前10个字节数的总和可知循环每次应实现将表TABLE中的数据按字节加法
的方式进行累加到AL中并且将字节加法产生的进位加到AH中。所以第一个空白处应填
入指令
ADD AL, [BX]
3程序的第五条指令实现的是判断求得的和是否超过AX寄存器的容量。
4如果有进位即已超过AX寄存器的容量则执行第二个空白处的指令根据
题目当出现此种情况时使AX内容不变即恢复其原值因此第二个空白处应填入指令
MOV AX, SUM。
5如果没有进位即未超过AX寄存器的容量则转DON。程序将使BX的内
容加1即使其指向下一个表中的字节数据
。接下来就应该将计数器CX减1并判断是否
继续下一次循环。因此第三个空白处应填入指令 LOOP NEXT。
2BEG为起始地址的存储区域中存放有100个字节数据现将其首、尾颠倒过来重新排放这100个字节数据。请在程序中的空格处填入适当的指令使其完整。
MOV CX32H
LEA SIBEG
MOV DISI
(1)
DONMOV AL[SI]
(2)
MOV [SI]AL
(3)
DEC DI
LOOP DON
HLT
答:(1) ADD DI, 99
(2) XCHG AL, [DI]
(3) INC SI
[解析]1) 题目要求将以BEG为起始地址的区域中的100个字节数据首尾颠倒存
放。例如如果原先为X1,X2, X3,…, X98, X99, X100则首尾颠倒后将变为
X100, X99, X98,…,X3, X2,X1。
2) 颠倒的方法是将X1与X100对调、X2与X99对调、X3与X98对调、……
即将前一半的数据与后一半相应位置的数据对调。这个过程每次处理两个数据所以共有
100/2=50对数据对调。
3) 根据以上分析可知这个循环将进行5032H次每次将相应的两个数据对
调这两个数据可分别由两个寄存器来指向。
4) 阅读程序可知SI寄存器指向前一半中的某个数据DI寄存器指向后一半中对
应的数据。在循环的初始化部分使应计数器CX的值为50或32HSI指向第一个数
DI指向最后一个数所以第一个空白处应填入指令ADD DI, 99。
5) 在循环体中应首先交换SI和DI所指向单元的内容然后使指针SI加1、DI
减1所以第二、三个空白处应填入指令
① XCHG AL, [DI]
② INC SI
五编制程序题第1小题6分第2小题14分共20分
1试编写一个汇编语言程序要求对键盘输入的小写字母用大写字母显示出来。
答1BEGINMOV AH1
INT 21H
CMP AL?a?
JB STOP
CMP AL?z?
JA STOP
SUB AL20H
MOV DLAL
MOV AH2
INT 21H
JMP BEGIN STOPRET
[解析]1该程序设计的主体应是一个循环——当输入字符的是小写字母a z
时就将其转换为大写字母来显示此过程循环进行直到当输入的不是小写字母时程序
结束。
2输入一个字符的可使用DOS的1号功能实现
MOV AH, 1
INT 21H
该DOS调用执行完后会将输入的字符的ASCII码值送入AL寄存器。
3判断输入的是否为小写字母a z的方法
CMP AL, ?a?
JB STOP 不是小写字母时转STOP
CMP AL, ?z?
JA STOP 不是小写字母时转STOP
… 是小写字母时,将其转换为大写显示
STOP RET 不是小写字母
时程序结束
4小写字母比大写字母的ASCII码值大20H因此指令 SUB AL, 20H将使AL
中的内容变为大写字母的ASCII码值。
5输出一个字符的可使用DOS的2号功能实现
MOV DL, AL
MOV AH, 2
INT 21H
2设在内存单元SQTAB首址开始存放了015的平方数表。要求用直接查表法编一程序
求出A单元中给定数=15的平方值送B单元保存。
答:DATA SEGMENT
SQTAB DB 0149162536496481
DB 100121144169196225
A DB 12
B DB
DATA ENDS
CODE SEGMENT
ASSUME CSCODEDSDATA
START PROC FAR
PUSH DX
XOR AXAX
PUSH AX
MOV AXDATA
MOV DSAX
MOV BXOFFSET SQTAB
MOV ALA
XLAT
MOV BAL
RET
START ENDP
CODE ENDS END START
[解析]1)根据题目的要求应首先建立015的平方数表以及A和B单元
SQTAB DB 0, 1, 4, 9, 16, 25, 36, 49, 64, 81 平方数表
DB 100, 121, 144, 169, 196, 225
A DB 12 给定数B DB ? 存放A中数的平方值的结果单元
2)A中给定的数恰好是该数平方值在平方数表中的相对位置因此可通过换码指
令XLAT来实现从表中求平方值
MOV BX, OFFSET SQTAB
MOV AL, A
XLAT
汇编语言模拟试题及答案 一单项选择题在每小题的四个备选答案中选出一个正确的答案并将其号码填
在题干后的括号内每小题1分共20分
1指令JMP FAR PTR DONE属于 参考答案为:C
A段内转移直接寻址
B段内转移间接寻址
C段间转移直接寻址
D段间转移间接寻址
[解析]略
2下列叙述正确的是 参考答案为:C
A对两个无符号数进行比较采用CMP指令对两个有符号数比较用CMPS指
令
B对两个无符号数进行比较采用CMPS指令对两个有符号数比较用CMP指
令
C对无符号数条件转移采用JAE/JNB指令对有符号数条件转移用JGE/JNL
指令
D对无符号数条件转移采用JGE/JNL指令对有符号数条件转移用JAE/JNB
指令
[解析]对于无符号数和有符号数的比较都采用CMP指令
CMPS指令是串比较指令
对两个无符号数的条件转移指令应是JAE、JNB、JBE、JNA
对两个有符号数的条件转移指令应是JGE、JNL、JLE、JNG。
3一个有128个字的数据区它的起始地址为12ABH00ABH请给出这个数
据区最末一个字单元的物理地址是 参考答案为:C
A12CSBH
B12B6BH
C12C59H
D12BFEH
[解析]末字与首字相隔1281127个字且每个字占用2个字节因此末
字单元的物理地址应为
首字单元的物理地址1281×2
即 12ABH×10H00ABH1281×212C59H。
4在下列指令的表示中不正确的是 参考答案为:C
AMOV AL[BX+SI]
BJMP SHORT DONI
CDEC [BX]
DMUL CL
[解析]当只有一个存储器操作数时这个操作数的类型不明确例如选项C中的
[BX]没有明确的说明访问该存储单元的类型此时存储器操作数就必须需用类型
说明如
DEC BYTE PTR [BX] 或 DEC WORD PTR [BX]
但是在题目的选项C中没有指出存储器操作数类型所以该指令是不正
确的而其它选项中的指令均是正确的。 5在进行二重循环程序设计时下列描述正确的是 参考答案为:A
A外循环初值应置外循环之外内循环初值应置内循环之外外循环之内
B外循环初值应置外循环之内内循环初值应置内循环之内
C内、外循环初值都应置外循环之外
D内、外循环初值都应置内循环之外外循环之内
[解析]循环参数置初值应在进入循环以前给出。
6条件转移指令JNE的测试条件为 参考答案为:A
AZF=0
BCF0
CZF=1
DCF=1
[解析]略。
78086CPU在基址加变址的寻址方式中变址寄存器可以为
参考答案
为:D
ABX或CX
BCX或SI
CDX或SI
DSI或DI
[解析]略
8已知BX=2000HSI=1234H则指令MOV AX[BX+SI+2]的源操作在
中。 参考答案为:A
A数据段中偏移量为3236H的字节
B附加段中偏移量为3234H的字节
C数据段中偏移量为3234H的字节
D附加段中偏移量为3236H的字节
[解析]指令中的源操作数的寻址方式是相对基址变址寻址且由于其中的基址寄
存器采用的是BX所以源操作数是在数据段中其偏移量为
BX+SI+2=2000H+1234H+2=3236H
9执行如下程序
MOV AX0
MOV BX1
MOV CX100
AADD AXBX
INC BX
LOOP A
HLT
执行后BX= 参考答案为:C
A99
B100
C101
D102
[解析]1在进入循环之前有三条指令分别初始化寄存器AX为0、BX为1、
CX为100
2由于循环的控制部分采用的是LOOP指令该指令有使CX减1并判断其是否为0的功能所以可知该循环的执行次数为100次
3循环体的主要功能是每次循环使AX中的内容累加BX的内容并使BX
的内容加1。
4直到最后一次即第100次循环时加到AX中的BX的内容为100
且使BX加1即变为101后退出循环体。所以当执行完该段程序后BX的内容为
101。
5该段程序的功能是AX12……1005050
10上题的程序执行后AX= 参考答案为:B
A5000
B5050
C5100
D5150
[解析]请参看上题中的分析。
正确答案B。
11对于下列程序段
AGAINMOV AL[SI]
MOV ES[DI]AL
INC SI
INC DI
LOOP AGAIN
也可用______指令完成同样的功能。 参考答案为:A
AREP MOVSB
BREP LODSB
CREP STOSB
DREPE SCASB
[解析]该段程序的功能是将SI所指向的数据段中的数据顺序传送给DI所指向的附加段
的一段数据区中并且每次传送一个字节即实现了字节串传送的功能所以也可以使用
REP MOVSB指令来完成同样的功能。
12下面指令序列执行后完成的运算正确的算术表达式应是
MOV ALBYTE PTR X
SHL AL1
DEC AL
MOV BYTE PTR YAL 参考答案为:D
Ay=x2+1
Bx=y2+1
Cx=y2-1
Dy=x2-1
[解析]该段程序的第一条指令的功能是将X传送给AL
第二条指令的功能是将AL的内容左移1位即使得AL的内容扩大2倍
第三条指令的功能是使AL的内容减1
第四条指令的功能是将AL传送给Y
综上所述该程序完成的运算是Y=2X-1。
13在一段汇编
程序中多次调用另一段程序用宏指令比用子程序实现起来。 参
考答案为:B A占内存空间小但速度慢
B占内存空间大但速度快
C占内存空间相同速度快
D占内存空间相同速度慢
[解析]1宏指令简化程序的书写不节省程序存储空间但执行时间比子程序短。
2子程序简化程序的书写也节省程序的存储空间但执行时间比宏指令长。
14在程序执行过程中IP寄存器中始终保存的是 参考答案为:B
A上一条指令的首地址
B下一条指令的首地址
C正在执行指令的首地址
D需计算有效地址后才能确定地址
[解析]在程序运行过程中它始终指向下一条指令的首地址它与CS代码段寄存器联
合确定下一条指令的物理地址。
15PSW寄存器中共有______位条件状态位有______位控制状态位。 参考答
案为:A
A6、3
B3、6
C8、4
D4、8
[解析]PSW有6位条件状态位AF、CF、ZF、PF、SF、OF
PSW有3位控制状态位IF、TF、DF
16下列指令执行时出错的是 参考答案为:A
AADD BUF1BUF2
BJMP DWORD PTR DAT [BX]
CMOV AX[BX+DI] NUM
DTEST AL08H
[解析]ADD指令的两个操作数不能同时是存储器操作数所以选项A中的指令是错误
的。
17已知AX=1234H执行下述三条指令后AX= 参考答案为:D
MOV BXAX
NEG BX
ADD AX,BX
A1234H
B0EDCCH
C6DCCH
D0000H
[解析]第一条指令的功能是将AX→BX即BX中的内容为1234H
第二条指令的功能是对BX求补即BX中的内容变为1234H
第三条指令的功能是AX+BX→AX即1234H+(-1234H)=0→AX
所以执行三条指令后AX的内容为0。
18在下列指令中______指令的执行会影响条件码中的CF位。 参考答案为:D
AJMP NEXT
BJC NEXT
CINC BX DSHL AX1
[解析]JMP、JC指令不任何影响状态标志位
INC指令执行结果除不影响CF外其余状态标志位(AF、OF、PF、SF、ZF)都受
影响。
SHL指令使CF=OOFO影响ZF、SF、PF标志位AF无定义。
19串指令中的目的操作数地址是由______提供。 参考答案为:C
ASS[BP]
BDS[SI]
CES[DI]
DCS[IP]
[解析]略
20将DX的内容除以2正确的指令是 参考答案为:C
ADIV 2
BDIV DX2
CSAR DX1
DSHL DX1
[解析]选项A中的的指令执行的操作是AX/2
选项B中的的指令书写格式不正确
选项C中的的指令执行的操作是:将DX的内容右
移一位将使DX的内容缩小为
原先的1/2即将DX的内容除以2
选项D中的的指令执行的操作是:将DX的内容左移一位将使DX的内容扩大为原先
的2倍即将DX的内容乘以2。
[解析](1)指令SHR DX, 1 使DX的内容向右移动了一位因此DX的内容变为
0000?0000?0101?1100B即005CH。
(2)指令RCR DL, 1 使DL的内容向右循环带进位移动了一位DH的内容不变
因此DX的内容变为0000?0000?1101?1100B即00DCH。
(3)指令RCL DX, CL 使DX的内容向左循环带进位移动了3位因此DX的内容
变为0000?0101?1100?1100B即05CCH。
2写出完成下述功能的程序段
1传送25H到AL寄存器
2将AL的内容乘以2
3传送15H到BL寄存器
4AL的内容乘以BL的内容
并请写出最后AX=
答1MOV AL, 25H
2SHL AL, 1
3MOV BL, 15H
4MUL BL
最后AX=612H =1554
[解析]1将AL的内容左移1位将使它的内容扩大2倍即使AL的内容乘以2。
2最后AX的内容应为25H*2*15H=612H=1554
3写一程序段求双字长数DX∶bX的相反数。
答:NEG DX
NEG AX SBB DX, 0
[解析]求双字长数DX:AX相反数即对其求补所以应实现的操作是:
(DX:AX) ← 0-(DX:AX)
即 0 : 0
-) DX : AX
将上面的算式分解后即为对DX求补对AX求补并从DX中减去将AX求补
时产生的借位。所以相应的指令就是
NEG DX
NEG AX
SBB DX, 0
三程序分析题每小题6分共36分
1现有如下程序段
DATA SEGMENT DA3 EQU 1234H
ORG 0020H DA4 EQU -DA2
DA1 DW 12H23H DA5 DB 31H32H
DA2 DB 11H21H DATA ENDS
注意程序是从左到右看先把左边的程序段看完了再看右边的程序段。下面的程序段
以相同的方法进行读解。
请回答1该程序段已占有的存储字节数是多少
2符号名DA4的值是多少符号名DA5的值是多少
答(1) 该程序段已占有的存储字节数是8个字节。
(2) 符号名DA4的值为2符号名DA5的值是0026H。
[解析]1伪指令ORG 0020H设置存储单元起始偏移地址为0020H
2符号名DA1的值即所对应存储单元的偏移地址是0020H该数据区的类型
为字有2个字数据所以共占用4个字节
3符号名DA2的值即所对应存储单元的偏移地址是0024H该数据区的类型
为字节有2个字节数据所以共占用2个字节
4经EQU定义的符号名DA3、DA4不占
用存储空间“$” 用来表示当前地址计
数器的值0026H可它们的值分别为DA3=1234H, DA4=2。
5符号名DA5的值即所对应存储单元的偏移地址是0026H该数据区的类型
为字节有2个字节数据所以共占用2个字节
6综上所述该程序段共占有的存储字节数8个字节。
2执行下列程序段后回答问题。
ORG 1221H MOV BX OFFSET NUM
NUM DW 12H MOV CLBYTE PTR NUM+1
… MOV CHTYPE NUM
MOV AXNUM HLT
请问AX=______BX=______CX=______。
答(AX)=0012H (BX)=1221H (CX)=0200H
[解析]1指令MOV AX, NUM的功能是将NUM单元的字内容12H传送给AX
使得(AX)=0012H
2指令MOV BX, OFFSET NUM的功能是将NUM单元的偏移地址1221H传送给
BX使得(BX)=1221H 3指令MOV CL, BYTE PTR NUM+1的功能是将NUM+1(1222H)单元的字节内容
(即NUM字单元的高字节)00H传送给CL使得(CL)=00H
4指令MOV CL, TYTE NUM的功能是将NUM字单元的类型字节数2传送给CH
使得(CH)=02H
5综合第4和第5点可知CX寄存器的内容为0200H。
3阅读如下程序
ADRR DB XXHXXH……XXH CMP ADRR[BX]0
NUM EQU -ADRR LOOPZ DON
RETT DB JNZ NEXT
… MOV BLOFFH
MOV CXNUM NEXTMOV RETTBL
MOV BX-1 HLT
DONINC BX
请问1该程序完成的功能是什么
2程序执行后指出RETT字节单元中的内容是什么
答(1) 在以ADRR为起始地址的数组中查找第一个非0数据。
(2) 若找到则将第一个非0数据在数组中的偏移量送入RETT单元中若无非0数
据则将OFFH送入RETT单元中。
[解析]1)程序的前3条指令用于定义数据
以ADRR为起始地址的数组
NUM的值为ADRR数组的数据个数
RETT是一个空的字节单元
2该程序的主体是一个循环该循环的主要功能是在数组ADRR中第一个非0数据。
如果是由于找到则将第一个非0数据在数组中的偏移量送入RETT单元中若没找到非0
数据则将OFFH送入RETT单元中。
4现有一子程序
SUB1 PROC PLUSTEST BL80H
TEST AL80H 检测AL中的数值最高位 JE EXITO
JE PLUS XCHANGEXCHG ALBL
TEST BL80H EXITORET
JNE EXITO SUB1 ENDP
JMP XCHANGE
试回答1子程序的功能是什么
2若调用子程序前AL=9AHBL=77H则返回主程序时AL=______
BL=______。
答(1)子程序的功能是判别AL和BL中的数是否为异号数当为异号时
交换否则不变。
(2) AL=77H, BL=9AH
[解析]1数据是以二进制的形式存储在计算机中的。数据对应的二进制数的最高
位是数据的符号位若为0表示该数为正数若为1表示该数为负数
2TEST AL, 80H 和 TEST BL,80H指令是在测试AL和BL的最高位即符号位
的状态是1还是0。
3若两个数的最高位即符号位的状态不同的时候即两数为异号则执行
XCHANGE标号所对应语句即交换AL和BL中的内容。 4否则若两个数的最高位即符号位的状态相同的时候即两数为同号则执
行EXIT0标号所对应语句程序结束即AL和BL中的内容不被。
5所以第二问中AL=9AH,BL=77HAL中的数据的最高位为1BL中的数据的
最高位为0即两个数为异号所以要交换AL和BL中的内容即AL=77H,BL=9AH。
5阅读程序段
BLOCK DB 20H1FH08H81HOFFH… LOP1CMP AL[SI+1]
RESULT DB JNG NEXT
… MOV AL[SI+1]
STARTLEA SIBLOCK NEXTINC SI
MOV CX[SI] LOOP LOP1
INC SI MOV RESULTAL
MOV AL[SI] HLT
请问1该程序完成的功能是什么
2该程序循环的次数是多少
答(1) 该程序完成的功能是从20H32个有符号数中找出最小的数送入
RESULT单元中。
(2) 该程序的循环次数是1FH31。
[解析]1指令LEA SI, BLOCK的功能是使SI指向了BLOCK数组的首单元
2指令MOV CX, [SI]的功能是将SI指向单元的内容20H传送给CX即(CX)=20H
其后又有指令DEC CX使得CX的内容变为1FH再看循环体的控制部分采用的指令是
LOOP可知该循环的执行次数为1FH次
3循环体的主要功能是将AL中的内容与[SI]所指向数组的每一个数据进行比较
从数组中选出最小数保存在AL中。
4由于比较后采用的转移指令是JNG所以该程序处理的显然是一组有符号的数
据。
6阅读如下程序段回答所提出的问题假定X1X2XN为无符号数。
ORG 100H
BLOK DW X1X2…XN
COUNT EQU-BLOLOK/2
RESULT DW COUNT
LEA BXBLOK-2
MOV CXRESULT
XOR AXAX
GOONADD BX
2
CMP AX[BX]
JAE NEXT
MOV AX[BX]
NEXTLOOP GOON
MOV RESULT+2AX
程序段执行完回答下述问题
RESULT+2字存储单元的内容=______
BX=______
程序循环次数=______
答:RESULT+2字存储单元的内容是MAX(X1, X2, … XN) BX= 100H + 2×(COUNT-1)
程序循环次数 COUNT
[解析]1该程序段的开始4条指令定义了以下数据
以BLOK为起始地址的字数组该数组首单元的偏移地址即BLOK为 100H
COUNT的值为BLOK字数组的数据个数
RESULT存储区的第一个字的内容为COUNT即BLOK字数组的数据个数第二
个字的内容为空。
2循环体的主要功能是从BLOK字数组中找出最大数送入RESULT的第二个字单
元中
3循环次数为数组中数据的个数即COUNT个。
4当循环结束后BX中将存放最后一个字数据的偏移地址首字偏移地址末
字与首字的相隔的字节数即100H + 2×(COUNT-1)。
四程序填空题注意下列各小题中每空只能填一条指令每小题6分共12分
1在表TABLE处存放着N个无符号字节数求表中前10个字节数的总和并保存在
AX寄存器中。如果总和值超过AX寄存器的容量则置AX寄存器内容不变。请在程序中
的空格处填入适当指令使其完整。
LEA BXTABLE 2
MOV CX10 JC END0
MOV SUMAX DONINC BX
MEXT1 3
ADC AH0 ENDOHLT
JNC DON
答(1) ADD AL, [BX]
(2) MOV AX, SUM
(3) LOOP NEXT
[解析]1程序的前三条指令的功能分别是
将表TABLE的首址传送给BX
将循环次数传送给计数器CX
将AX的原值保存在SUM单元中
以上指令实现了设置循环初始参数的功能。
2标号NEXT所对应的第一个空白处就是循环体的第一条指令。根据题目的要求
——求表中前10个字节数的总和可知循环每次应实现将表TABLE中的数据按字节加法
的方式进行累加到AL中并且将字节加法产生的进位加到AH中。所以第一个空白处应填
入指令
ADD AL, [BX]
3程序的第五条指令实现的是判断求得的和是否超过AX寄存器的容量。
4如果有进位即已超过AX寄存器的容量则执行第二个空白处的指令根据
题目当出现此种情况时使AX内容不变即恢复其原值因此第二个空白处应填入指令
MOV AX, SUM。
5如果没有进位即未超过AX寄存器的容量则转DON。程序将使BX的内
容加1即使其指向下一个表中的字节数据
。接下来就应该将计数器CX减1并判断是否
继续下一次循环。因此第三个空白处应填入指令 LOOP NEXT。
2BEG为起始地址的存储区域中存放有100个字节数据现将其首、尾颠倒过来重新排放这100个字节数据。请在程序中的空格处填入适当的指令使其完整。
MOV CX32H
LEA SIBEG
MOV DISI
(1)
DONMOV AL[SI]
(2)
MOV [SI]AL
(3)
DEC DI
LOOP DON
HLT
答:(1) ADD DI, 99
(2) XCHG AL, [DI]
(3) INC SI
[解析]1) 题目要求将以BEG为起始地址的区域中的100个字节数据首尾颠倒存
放。例如如果原先为X1,X2, X3,…, X98, X99, X100则首尾颠倒后将变为
X100, X99, X98,…,X3, X2,X1。
2) 颠倒的方法是将X1与X100对调、X2与X99对调、X3与X98对调、……
即将前一半的数据与后一半相应位置的数据对调。这个过程每次处理两个数据所以共有
100/2=50对数据对调。
3) 根据以上分析可知这个循环将进行5032H次每次将相应的两个数据对
调这两个数据可分别由两个寄存器来指向。
4) 阅读程序可知SI寄存器指向前一半中的某个数据DI寄存器指向后一半中对
应的数据。在循环的初始化部分使应计数器CX的值为50或32HSI指向第一个数
DI指向最后一个数所以第一个空白处应填入指令ADD DI, 99。
5) 在循环体中应首先交换SI和DI所指向单元的内容然后使指针SI加1、DI
减1所以第二、三个空白处应填入指令
① XCHG AL, [DI]
② INC SI
五编制程序题第1小题6分第2小题14分共20分
1试编写一个汇编语言程序要求对键盘输入的小写字母用大写字母显示出来。
答1BEGINMOV AH1
INT 21H
CMP AL?a?
JB STOP
CMP AL?z?
JA STOP
SUB AL20H
MOV DLAL
MOV AH2
INT 21H
JMP BEGIN STOPRET
[解析]1该程序设计的主体应是一个循环——当输入字符的是小写字母a z
时就将其转换为大写字母来显示此过程循环进行直到当输入的不是小写字母时程序
结束。
2输入一个字符的可使用DOS的1号功能实现
MOV AH, 1
INT 21H
该DOS调用执行完后会将输入的字符的ASCII码值送入AL寄存器。
3判断输入的是否为小写字母a z的方法
CMP AL, ?a?
JB STOP 不是小写字母时转STOP
CMP AL, ?z?
JA STOP 不是小写字母时转STOP
… 是小写字母时,将其转换为大写显示
STOP RET 不是小写字母
时程序结束
4小写字母比大写字母的ASCII码值大20H因此指令 SUB AL, 20H将使AL
中的内容变为大写字母的ASCII码值。
5输出一个字符的可使用DOS的2号功能实现
MOV DL, AL
MOV AH, 2
INT 21H
2设在内存单元SQTAB首址开始存放了015的平方数表。要求用直接查表法编一程序
求出A单元中给定数=15的平方值送B单元保存。
答:DATA SEGMENT
SQTAB DB 0149162536496481
DB 100121144169196225
A DB 12
B DB
DATA ENDS
CODE SEGMENT
ASSUME CSCODEDSDATA
START PROC FAR
PUSH DX
XOR AXAX
PUSH AX
MOV AXDATA
MOV DSAX
MOV BXOFFSET SQTAB
MOV ALA
XLAT
MOV BAL
RET
START ENDP
CODE ENDS END START
[解析]1)根据题目的要求应首先建立015的平方数表以及A和B单元
SQTAB DB 0, 1, 4, 9, 16, 25, 36, 49, 64, 81 平方数表
DB 100, 121, 144, 169, 196, 225
A DB 12 给定数B DB ? 存放A中数的平方值的结果单元
2)A中给定的数恰好是该数平方值在平方数表中的相对位置因此可通过换码指
令XLAT来实现从表中求平方值
MOV BX, OFFSET SQTAB
MOV AL, A
XLAT