汇编语言各章习题答案.docx

上传人:b****7 文档编号:10149777 上传时间:2023-02-08 格式:DOCX 页数:74 大小:59.71KB
下载 相关 举报
汇编语言各章习题答案.docx_第1页
第1页 / 共74页
汇编语言各章习题答案.docx_第2页
第2页 / 共74页
汇编语言各章习题答案.docx_第3页
第3页 / 共74页
汇编语言各章习题答案.docx_第4页
第4页 / 共74页
汇编语言各章习题答案.docx_第5页
第5页 / 共74页
点击查看更多>>
下载资源
资源描述

汇编语言各章习题答案.docx

《汇编语言各章习题答案.docx》由会员分享,可在线阅读,更多相关《汇编语言各章习题答案.docx(74页珍藏版)》请在冰豆网上搜索。

汇编语言各章习题答案.docx

汇编语言各章习题答案

各章习题答案

第一章

练习题

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

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 表格模板 > 合同协议

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1