汇编语言各章习题答案.docx
《汇编语言各章习题答案.docx》由会员分享,可在线阅读,更多相关《汇编语言各章习题答案.docx(74页珍藏版)》请在冰豆网上搜索。
汇编语言各章习题答案
各章习题答案
第一章
练习题
1.将下列十进制数转换为二进制、八进制和十六进制数:
37,51,73,92,511
答:
37D=100101B=45Q=25H
51D=110011B=63Q=33H
73D=1001001B=111Q=49H
92D=1011100B=134Q=5CH
511D=111111111B=777Q=1FFH
2.将下列二进制数转换为十进制、八进制和十六进制数:
10000001,10011001,11111111,11110100
答:
10000001B=201Q=81H=129D
10011001B=231Q=99H=153D
11111111B=377Q=FFH=255D
11110100B=364Q=F4H=244D
3.将下列十六进制数转换为二进制和十进制数:
325,FF,1AB,2EC
答:
325H=1100100101B=805D
FFH=11111111B=255D
1ABH=110101011B=427D
2ECH=1011101100B=748D
4.将下列十进制数转换为BCD码表示:
121,46,732,1281
答:
121D=(0001,0010,0001)BCD
46D=(0100,0110)BCD
732D=(0111,0011,0010)BCD
1281=(0001,0010,1000,0001)BCD
5.将下列二进制补码转换为十进制数:
10010110,00101010,11101110,11000000
答:
[10010110]补=-(1101001+1)B=-6AH=-106D
[00101010]补=+0101010B=+2AH=+42D
[11101110]补=-(0010001+1)B=-12H=-18D
[11000000]补=-(0111111+1)B=-40H=-64D
6.已知[X]补=1100000B,[Y]补=0100100B,[Z]补=0011001B。
求[-X]补,[-Y]补,[-Z]补;并计算[X-Y]补=?
[X-Z]补=?
若有溢出请给以说明。
解:
[-X]补=-[X]补=-1100000B=0100000B,[-Y]补=-[Y]补=-0100100B=1011100B,
[-Z]补=-[Z]补=-0011001B=1100111B
[X-Y]补=[X]补+[-Y]补=1100000B+1011100B=1,011,1100B有溢出,因为CP⊕CF=1;
[X-Z]补=[X]补+[-Z]补=1100000B+1100111B=1,100,0111B无溢出,因为CP⊕CF=0
第二章
练习题
1.8086CPU由EU和BIU两部分组成。
2.8086CPU的基本总线周期由4个时钟周期组成,分别用T1、T2、T3、T4表示。
3.存储单元的物理地址的计算用公式表示为:
物理地址=段地址×16+偏移地址。
4.标志寄存器中共有9个有效位用来存放条件标志和控制标志,其中CF表示进位标志。
5.在8086中,奇地址存储体与系统的高八位数据线相连。
访问存储器时,当读/写奇地址存储体时,数据从D8~D15上传送。
6.堆栈操作是字操作。
7.当CPU访问存储器时,需利用M/IO信号的高电平;而访问外设接口时,需利用该信号的低电平。
第三章
练习题
1、试分别说明下列各指令中源操作数和目的操作数的寻址方式:
①ANDAX,0FFH②ANDBL,[0FFH]
③MOVDS,AX④CMP[SI],CX
⑤MOVDS:
[0FFH],CL⑥SUB[BP][SI],AH
⑦ADCAX,0ABH[BX]⑧ORDX,-35[BX][DI]
⑨PUSHDS⑩CMC
答:
指令
源操作数寻址方式
目的操作数寻址方式
①ANDAX,0FFH
立即数
寄存器
②ANDBL,[0FFH]
直接寻址
寄存器
③MOVDS,AX
寄存器
寄存器
④CMP[SI],CX
寄存器
寄存器间接寻址
⑤MOVDS:
[0FFH],CL
寄存器
直接寻址
⑥SUB[BP][SI],AH
寄存器
基址变址寻址
⑦ADCAX,0ABH[BX]
变址寻址
寄存器
⑧ORDX,-35[BX][DI]
基址变址相对寻址
寄存器
⑨PUSHDS
寄存器
寄存器间接寻址
⑩CMC
隐含寻址
隐含寻址
2、试分别指出下列各指令语句的语法是否有错,若有错,指明是什么错误。
①MOV[BX][BP],AX②TEST[BP],BL
③ADD[SI],DA_BYTE④ANDDH,DL
⑤CMPCL,1234H⑥SHR[BX][DI],3
⑦NOTCX,AX⑧LEADS,35[SI]
⑨INCCX,1⑩INC[DI]
答:
指令
错误原因
①MOV[BX][BP],AX
不能使用两个基址寄存器寻址
②TEST[BP],BL
正确
③ADD[SI],DA_BYTE
正确
④ANDDH,DL
正确
⑤CMPCL,1234H
不匹配,一个是字节,一个是字
⑥SHR[BX][DI],3
右移3位不能用立即数
⑦NOTCX,AX
NOT是单操作数指令
⑧LEADS,35[SI]
LEA不能给段寄存器赋值
⑨INCCX,1
INC指令本身就是加1,是单操作数指令
⑩INC[DI]
寄存器间址没说明是字操作还是字节操作
3、下面二条指令执行后,标志寄存器中CF、AF、ZF、SF和OF分别是什么状态?
MOVAL,86
ADDAL,0AAH
答:
CF=1;AF=1;ZF=0;SF=0;OF=1
4、设(SS)=1200H,(SP)=2100H,(AX)=1234H,(BX)=6789H
①执行指令PUSHAX后,(SP)=20FEH
②再执行指令PUSHBX,及POPAX后,(SP)=20FEH,(AX)=6789H。
5、已知程序段如下:
MOVAL,56H
MOVCL,4
ROLAL,CL
说明:
AL的内容是65H,程序段完成的功能是高低4位互换。
6、已知(AX)=0A5C6H,(CX)=0503H,CF=1
①执行以下三条指令后:
(AX)=8086H,CF=1。
RCLAX,CL
ANDAH,CH
RCRAX,CL
②执行以下三条指令后:
(AX)=A5C0,CF=1。
SARAX,CL
XCHGCH,CH
SHLAX,CL
7、分别说明下列每组指令中的两条指令的区别。
①MOVAX,TABLELEAAX,TABLE
②ANDBL,0FHORBL,0FH
③MOVAX,[BX]MOVAX,BX
④SUBDX,CXCMPDX,CX
⑤MOV[BP][SI],CLMOVDS:
[BP][SI],CL
答:
①MOVAX,TABLELEAAX,TABLE
MOV取变量的值,而LEA取变量的偏移地址
②ANDBL,0FHORBL,0FH
AND是将高4位清0,OR是将低4位置1
③MOVAX,[BX]MOVAX,BX
[BX]是将BX的内容作为偏移地址取数赋给AX,BX是将寄存器内容赋给AX
④SUBDX,CXCMPDX,CX
SUB保存结果到DX中,CMP不保存
⑤MOV[BP][SI],CLMOVDS:
[BP][SI],CL
第一条使用段缺省是SS段,第二条使用段超越用DS段
8、根据所学指令,写出使AL置0的多种方法。
答:
包括MOVAL,0
SUBAL,AL
ANDAL,0
XORAL,AL
等
9、将DX、AX中存储的32位带符号数(DX中存放高16位)求补。
解:
利用[X]求补=0-X实现。
MOVBX,AX
MOVBX,0
SUBBX,AX
MOVAX,0
SBBAX,DX
MOVDX,AX
MOVAX,BX
10、编写程序将AX中的16位无符号数与BL中的8位无符号数相加。
解:
可以利用字节相加,实现字相加,注意高字节相加,要加上进位。
ADDAL,BL
ADCAH,0
11、将AX中有0的各位对应的BX位取反,BX的其它位不变。
解:
可利用异或指令实现。
NOTAX
XORBX,AX
12、编写一段程序,实现16位无符号数的计算:
W=(X-2)/2+Y,设X、Y、Z、W是已定义的存储器操作数。
解:
程序如下所示。
MOVAX,X
SUBAX,2
SHRAX,1
ADDAX,Y
MOVW,AX
XORDX,DX
ADCDX,0
第四章
习题
1、某数据段中有如下定义:
CNT1EQU20H
CNT2DW20H
比较指令MOVAX,CNT1与MOVAX,CNT2的区别。
答:
指令MOVAX,CNT1是立即数据寻址。
指令MOVAX,CNT2是直接寻址。
2、下列各题中有语法错误,请说明原因,并分别用两种方法修改。
①M1DW5060H
┇
MOVBL,M1
②M2EQU10H
┇
MOVM2,AL
③M3DB1234
④M4DW‘ABCD’
答:
①类型不匹配。
可将M1定义为字节(DB)或将BL换为字(BX)。
②符号常量不能作为目的操作数。
M2可用DB定义或将M2改为源操作数。
③DB是定义字节变量。
可将立即数改为字节或用DW定义字变量。
④字符占一个字节。
可用DB定义或用DW定义二个字符。
3、下面的数据定义中,包含数据’0102H’的字存储单元有多少个。
DB10HDUP(1,2DUP
(2))
答:
只有15个。
因为空间里有16个01H、02H、02H,而字取值是高位地址存高字节,因此只有15个0102H字数据。
4、画出下面定义的数据段的存储结构图,分析有数据3000H的字存储单元有几个,它们的偏移量分别是多少?
DATASEGMENT
ORG30H
DA1DB0,’0’,30H,0,30H
DWDA1
DATAENDS
答:
存储结构图如下图所示。
3000H的字存储单元有2个,它们的偏移量分别是30H和33H。
30H
00H
31H
30H
32H
30H
33H
00H
34H
30H
35H
30H
36H
00H
5、设某数据段定义如下:
DATASEGMENT
NUM1=8
NUM2=NUM1+10H
DA1DB‘IBMPC’
DB0AH,0DH
CNTEQU$-DA1
DA2DW‘IB’,‘M’,’PC’,0A0DH
DATAENDS
说明:
DA1和DA2的偏移量是多少?
,NUM2和CNT的值是多少?
DA+5字节单元的内容是什么?
DA1和DA2的内容相同吗?
为什么?
答:
DA1和DA2的偏移量分别是0H和6H。
NUM2=18H=24D,CNT=8。
DA1+5字节单元的内容是’C’
DA1和DA2的内容不相同。
因为对于字存储,高位地址存高字节,因此DA2的字节存储顺序是:
’B’、’I’、’‘、’M’、’C’、’P’、0DH、0AH,与DA1不同。
6、画出下面数据段定义的内存分配情况。
(设DATA段地址为:
0B70H)
DATASEGMENT
V1DB43,43H,’C’,’GOOD!
’
V2DW1200H,43H,V1,’Hi’,2DUP
(1)
V3DD12345678H,V2
DATAENDS
答:
内存分配情况如下所示。
00
2BH
变量V1
01
43H
02
‘C’
03
‘G’
04
‘O’
05
‘O’
06
‘D’
07
‘!
’
08
00H
V2的起始地址
09
12H
10
43H
11
00H
12
00H
V1的偏移地址
13
00H
14
‘i’
15
‘H’
16
01H
17
01H
18
78H
19
56H
20
34H
21
12H
22
08H
V2的偏移地址
23
00H
24
70H
V2的段地址
25
0BH
7、有如下数据段定义:
DATASEGMENT
D1DB61H,53H
D2DW1234H,45H
D3DW20DUP(0)
DATAENDS
若DATA段地址为0B68H,执行下列程序后,各寄存器的值各是多少?
MOVAX,SEGD1AX=0B68H
MOVBX,OFFSETD3BX=0006H
MOVCL,TYPED2CL=2
MOVCH,SIZED2CH=2
MOVDL,LENGTHD2DL=1
MOVDH,SIZED3DH=40
8、写出下列程序段汇编后的等效指令,程序执行后,寄存器AX、BX和CX的内容分别是多少?
NUM1EQU340
NUM2=30*25
┇
MOVAX,NUM2LENUM1;AX的值是:
0000H,等效指令:
MOVAX,0000H
MOVBX,NUM2GTNUM1;BX的值是:
FFFFH,等效指令:
MOVBX,0FFFFH
MOVCX,NUM2-NUM1;CX的值是:
019AH,等效指令:
MOVCX,019AH
9、汇编语言源程序中有哪4个段寄存器?
如何定义各段,若段定义中没有用ORG指令指定起始偏移地址,则缺省起始偏移地址是多少?
答:
4个段寄器分别是CS、DS、ES和SS。
段定义的格式是:
段名SEGMENT
┇;段体
段名ENDS
若段定义中没有用ORG指令指定起始偏移地址,则缺省起始偏移地址是0000H。
10、说明将用户编写的汇编语言源程序编译成可执行文件的过程。
答:
(1)用文字编辑软件编写源程序,可以使用如EDIT、记事本、写字板或WORD等字处理软件编写,以文本格式输出,文件的扩展名必须为.ASM。
(2)用汇编程序MASM.EXE或TASM.EXE对源文件进行汇编,形成目标文件.OBJ。
(3)用连接程序LINK.EXE对生成的目标文件进行连接定位,形成可执行文件.EXE。
第五章
习题
1.根据给定指令填空:
(1)MOVAL,05H
ADDAL,09H
AAA
(AL)=04H
(2)MOVAL,75H
ADDAL,26H
DAA
(AL)=01H
(3)MOVAL,05H
SUBAL,08H
AAS
(AL)=07H
(4)MOVAL,08H
MOVBL,07H
MULBL
AAM
(AX)=0506H
(5)MOVAX,0605H
MOVBL,08H
AAD
DIVBL
(AL)=08H
2.把变量X中的一位十六进制数显示在屏幕上。
答:
程序如下:
DATASEGMENT
xDB0DH
TABDB'0123456789ABCDEF'
DATAENDS
CODESEGMENT
ASSUMECS:
CODE,DS:
DATA
START:
MOVAX,DATA
MOVDS,AX
MOVAL,x
MOVBX,OFFSETTAB
XLAT
MOVDL,AL
MOVAH,02H
INT21H
MOVAH,4CH
INT21H
CODEENDS
ENDSTART
3.求任一给定自然数(1≤N≤40)的立方值,并将立方值送DAT单元。
答:
程序如下
DATASEGMENT
NDB40
DATDW?
DATAENDS
CODESEGMENT
ASSUMECS:
CODE,DS:
DATA
START:
MOVAX,DATA
MOVDS,AX
MOVAL,N
MOVCL,AL
MULCL
MOVCL,N
XORCH,CH
MULCX
MOVDAT,AX
MOVAH,4CH
INT21H
CODEENDS
ENDSTART
4.将A单元的内容求补,并与原内容相“与”,结果存入B单元中。
答:
程序如下
DATASEGMENT
ADB37H
BDB?
DATAENDS
CODESEGMENT
ASSUMECS:
CODE,DS:
DATA
START:
MOVAX,DATA
MOVDS,AX
MOVAL,A
NEGAL
ANDAL,A
MOVB,AL
MOVAH,4CH
INT21H
CODEENDS
ENDSTART
5.编制程序将AX的中间8位,BX的低4位,DX的高4位拼成一个新字数据送DI为偏移地址的存储单元。
答:
程序如下
DATASEGMENT
RESULTDW?
DATAENDS
CODESEGMENT
ASSUMECS:
CODE,DS:
DATA
START:
MOVAX,DATA
MOVDS,AX
MOVAX,523AH
MOVBX,0C194H
MOVDX,1B87H
ANDAX,0FF0H
ANDBX,000FH
ANDDX,0F000H
ORAX,BX
ORAX,DX
MOVDI,OFFSETRESULT
MOV[DI],AX
MOVAH,4CH
INT21H
CODEENDS
ENDSTART
6.数据段中以DI为偏移地址的单元连续存放着4个字节无符号数,编制程序求他们的和与差。
答:
加法程序如下
DATASEGMENT
ADD12345678H
DD87654321H
RESULTDD?
DATAENDS
CODESEGMENT
ASSUMECS:
CODE,DS:
DATA
START:
MOVAX,DATA
MOVDS,AX
MOVDI,OFFSETA
MOVSI,OFFSETRESULT
MOVAX,WORDPTR[DI]
ADDAX,WORDPTR[DI+4]
MOV[SI],AX
MOVAX,WORDPTR[DI+2]
ADCAX,WORDPTR[DI+6]
MOV[SI+2],AX
MOVAH,4CH
INT21H
CODEENDS
ENDSTART
减法程序只要将加法程序中的ADD用SUB代替,ADC用SBB代替即可实现。
7.将A单元中的二位16进制数拆成二个16位数。
并分别转换为相应的ASCII码存于B单元及C单元。
答:
程序如下
DATASEGMENT
ADB0B7H
BDB?
CDB?
TABDB'0123456789ABCDEF'
DATAENDS
CODESEGMENT
ASSUMECS:
CODE,DS:
DATA
START:
MOVAX,DATA
MOVDS,AX
MOVAL,A
ANDAL,0F0H
MOVCL,4
ROLAL,CL
MOVBX,OFFSETTAB
XLAT
MOVB,AL
MOVAL,A
ANDAL,0FH
XLAT
MOVC,AL
MOVAH,4CH
INT21H
CODEENDS
ENDSTART
第六章
习题
1.指出下列程序段执行AL的内容是什么?
a)MOVAL,60H
CMPAL,0BBH
JBL2
L1:
MOVAL,0BBH
L2:
NOP
b)MOVAL,60H
CMPAL,0BBH
JLL2
L1:
MOVAL,0BBH
L2:
NOP
c)XORAL,AL
MOVBL,98H
ADDBL,88H
JNCL2
L1:
INCAL
L2:
NOP
d)XORAL,AL
MOVBL,98H
ADDBL,88H
JNOL2
L1:
INCAL
L2:
NOP
e)MOVBL,46H
TESTBL,01H
JZL2
L1:
XORAL,AL
JMPOK
L2:
MOVAL,1
OK:
NOP
f)MOVBL,46H
TESTBL,0FFH
JNPL2
L1:
XORAL,AL
JMPOK
L2:
MOVAL,1
OK:
NOP
答:
a)AL=60H;b)AL=0BBH;c)AL=01H;d)AL=01H;e)AL=01H;f)AL=01H
2.判断PAK单元数据的奇偶性。
当为奇数时置MEAK单元为1,当为偶数时置MEAK单元为0。
答:
程序如下
DATASEGMENT
PAKDB0B6H
MEAKDB?
DATAENDS
CODESEGMENT
ASSUMECS:
CODE,DS:
DATA
START:
MOVAX,DATA
MOVDS,AX
MOVAL,PAK
TESTAL,0FFH
JNPL2
L1:
XORAL,AL
JMPOK
L2:
MOVAL,1
OK:
MOVMEAK,AL
MOVAH,4CH
INT21H
CODEENDS
ENDSTART
3.将BUF单元起的20个数移到DAT单元起的存储区中。
使用三种方法实现。
答:
方法一用JNZ从首地址开始传送实现,程序如下
DATASEGMENT
BUFDB'1234567890ABCDEFGHIG'
DATDB20DUP(?
)
DATAENDS
CODESEGMENT
ASSUMECS:
CODE,DS:
DATA