汇编语言程序设计第二版课后题答案.docx

上传人:b****7 文档编号:16494833 上传时间:2023-07-14 格式:DOCX 页数:29 大小:27.07KB
下载 相关 举报
汇编语言程序设计第二版课后题答案.docx_第1页
第1页 / 共29页
汇编语言程序设计第二版课后题答案.docx_第2页
第2页 / 共29页
汇编语言程序设计第二版课后题答案.docx_第3页
第3页 / 共29页
汇编语言程序设计第二版课后题答案.docx_第4页
第4页 / 共29页
汇编语言程序设计第二版课后题答案.docx_第5页
第5页 / 共29页
汇编语言程序设计第二版课后题答案.docx_第6页
第6页 / 共29页
汇编语言程序设计第二版课后题答案.docx_第7页
第7页 / 共29页
汇编语言程序设计第二版课后题答案.docx_第8页
第8页 / 共29页
汇编语言程序设计第二版课后题答案.docx_第9页
第9页 / 共29页
汇编语言程序设计第二版课后题答案.docx_第10页
第10页 / 共29页
汇编语言程序设计第二版课后题答案.docx_第11页
第11页 / 共29页
汇编语言程序设计第二版课后题答案.docx_第12页
第12页 / 共29页
汇编语言程序设计第二版课后题答案.docx_第13页
第13页 / 共29页
汇编语言程序设计第二版课后题答案.docx_第14页
第14页 / 共29页
汇编语言程序设计第二版课后题答案.docx_第15页
第15页 / 共29页
汇编语言程序设计第二版课后题答案.docx_第16页
第16页 / 共29页
汇编语言程序设计第二版课后题答案.docx_第17页
第17页 / 共29页
汇编语言程序设计第二版课后题答案.docx_第18页
第18页 / 共29页
汇编语言程序设计第二版课后题答案.docx_第19页
第19页 / 共29页
汇编语言程序设计第二版课后题答案.docx_第20页
第20页 / 共29页
亲,该文档总共29页,到这儿已超出免费预览范围,如果喜欢就下载吧!
下载资源
资源描述

汇编语言程序设计第二版课后题答案.docx

《汇编语言程序设计第二版课后题答案.docx》由会员分享,可在线阅读,更多相关《汇编语言程序设计第二版课后题答案.docx(29页珍藏版)》请在冰点文库上搜索。

汇编语言程序设计第二版课后题答案.docx

汇编语言程序设计第二版课后题答案

4.1、判断下列标识符的合法性。

1)、code合法

2)、Data合法

3)、ABCDH合法

4)、1abcH不

5)、eax不

6)、?

?

?

01合法

7)、A?

@合法

8)、www@zsu合法

9)、不

10)、AX$DX合法

11)、_BX合法

12)、CX不

4.2、按下面要求写出相应的数据定义语句(未指定变量名的,可任意指定或省缺)。

1)、定义一个字节区域,第一个字节的值为20,其后跟20个初值为0的连续字节;

DB20,20DUP(0)

2)、定义一个以0为结束符的字符串,其初值为:

Thecourseiseasy;

DB“Thecourseiseasy”,0

3)、定义一个以'$'为结束符的字符串,该串中含有换行符和回车符;

DB0D,0A,”$”

4)、定义100个字,其初值为0;

DW100DUP(0)

5)、从一个偶地址开始定义一个字变量word;

EVEN

WORDDW?

6)、先定义一个字符串String,其偏移量指定为10,其初值为"ABCDEF",然后再定义3个字类型的数组Data,要求String和Data的偏移量相同;

ORG10

STRINGDB"ABCDEF"

ORG10

DATADW3DUP(?

7)、定义一个字符串String,其初值为"12345678",再定义4个字类型的数组Data,要求String和Data共享同一片内存单元;

STRINGDB"12345678"

ORG$-8

DATADW4DUP(?

4.3、把下列C语言的变量定义语句改写成与之等价的汇编语言语句。

1)、charch1,ch2[3],ch3[]="Areyouready?

",ch4='Q';

CH1DB?

CH2DB3DUP(?

CH3DB"Areyouready?

",0

CH4DB“Q”

2)、intw1,w2[5],w3=0x1234,w4[]={90,89,432,344};

W1DW?

W2DW5DUP(?

W3DW1234H

W4DW90,89,432,344

3)、longintd1=1234,d2,d3[10],d4[]={1,2,3,4,5,6};

D1DD1234

D2DD?

D3DD10DUP(?

D3DD1,2,3,4,5,6

4.4、假设4.3题中三组变量在内存中是连续存放的,且变量ch1的偏移量是20H,试求出其它每个变量的偏移量。

变量

偏移量

变量

偏移量

变量

偏移量

Ch1

20H

W1

34H

D1

4AH

Ch2

21H

W2

36H

D2

4EH

Ch3

24H

W3

40H

D3

52H

Ch4

33H

W4

42H

D4

7AH

4.5、按下列要求分别写出汇编语言的结构定义,如果没有说明结构分量的类型,请根据日常习惯自行指定其数据类型(可使用已有的结构定义)。

1)、定义日期结构类型Date,其包括:

Year(年)、Month(月)和Day(日);

DATASTRUC偏移量

YEARDB?

0

MONTHDB?

1

DAYDB?

2

DATAENDS

2)、定义时间结构类型Time,其包括:

Hour(小时)、Minute(分)、Second(秒)和centsec(百分之一秒);

TIMESTRUC

HOURDB?

0

MINUTEDB?

1

SECONDDB?

2

CENTSECDB?

3

TIMEENDS

3)、定义结构Peason,其包括:

name(姓名,字符,长度为8)、Birth(出生日期,Date),stature(身高,以厘米为单位的整数),Address(地址,30个字符)

PERSONSTRUC

NAMEDB8DUP(?

)0

BIRTHDATA<>8

STATUREDB?

0BH

ADDRESSDB30DUP(?

)0CH

PERSONENDS

4.6、试求出4.5题各结构中字段的偏移量。

4.7、把下列C语言的结构或结构变量的定义改写为与之等价的汇编语言定义语句。

1)、structScreenBuffer{

     char c1;   //字符

     char attr;  //字符属性

    }Buffer[2000];

ScreenBufferstruc

C1DB?

ATTRDB?

ScreenBufferENDS

BUFFERScreenBuffer2000DUP(<>)

2)、structFILE{

     int level,flags;

     char fd,hold;

     int bsize,istemp,token;

     };

3)、structCELLREC{

     char attrib;

     union{char text[201];

         long value;

         struct{long fvalue;

            char formula[201];

            }f;

        }v;

     };

答:

STRUC_FSTRUC

FVALUEDD?

FORMULADB201DUP(?

STRUC_FENDS

UNION_VUNION

TEXTDB201DUP(?

VALUEDD?

FSTRUC_F<>

UNION_VENDS

CELLRECSTRUC

ATTRIBDB?

VUNION_V<>

CELLRECENDS

4.8、按下列要求分别写出汇编语言的记录定义。

1)、定义标志位寄存器低8位标志位,其相应位用其标志位的符号来命名,未用部分的命名自行确定;

FLAGSRECORDSF:

1,ZF:

1,EMPTY1:

1,EMPTY2:

1,PF:

1,EMPTY3:

1,CF:

1

2)、定义一个压缩型的BCD码类型;

3)、把一个字节分成三部分:

0~2位、3~5位和6~7位,每部分可独立存取,它们的初值分别为4,5和2;

4)、把一个字分割成:

0~1位、2~6位、7~12位,其中第一部分的初值位3,第三部分的初值为25。

4.9、试求出4.8题各记录中字段的宽度和屏蔽属性值。

4.10、假设变量B1的偏移量为12H,试求出它们的属性OFFSET、TYPE、LENGTH和SIZE的值。

B1 DB  "Theprogramminglanguageiseasy",0

W1 DW  10DUP(1,2),1234

D1 DD  20DUP(0),

P1 PEASON <>,<> ;结构PEASON的定义见4.4.2

U1 UNION1 3DUP(<>)  ;联合UNION1的定义见4.4.3

OFFSET

TYPE

LENGTH

SIZE

B1

12H

1

1

1

W1

33H

2

10

20

D1

5DH

4

20

80

P1

0ADH

15

1

15

U1

0CBH

2

3

6

4.11、试用三种方法定义字节变量(或字段名)B1和字变量(或字段名)W1,它们共享20个存储单元。

1.U1UNION

B1DB20DUP(?

W1DW10DUP(?

U1ENDS

2.W1EQUTHISWORD

B1DB20DUP(?

3.B1DB20DUP(?

ORG$-20

W1DW10DUP(?

4.12、强制属性操作符会改变变量的定义属性吗?

在C语言中存在类似功能的语句吗?

若存在,请举例说明。

4.13、假设有题4.10题中的变量定义,试写出符合要求的地址表达式。

1)、取从B1开始的字母'p'和第一个'm';

[b1+4],[b1+10]

2)、访问从W1开始的第3个字单元(从序数1开始计数,第1、第2、……)的值为2的存储单元;

[w1+10]

3)、访问从D1开始的第10个双字单元;

[d1+36]

4)、访问从P1开始的第2个结构中的字段NO;

[p1+15]

5)、访问从U1开始的第3个联合中的字段WW;

[u1+4]

4.14、把下列C语言程序中的说明性语句改写成等价的汇编语言语句。

#define N 200

structbuffer{

   char len1,len2,buff[N];

}buff;

intData[N];

NEQU200

BUFFERSTRUCT

LEN1DB?

LEN2DB?

BUFFDBNDUP(?

BUFFERENDS

BUFFBUFFER<>

DATADWNDUP(?

4.15、简述数值表达式与地址表达式的主要区别。

4.16、计算下列各数值表达式的值。

1)、12HAND78H

0010H

2)、1234MOD3+23H

0024H

3)、5467HXOR12FFH

4698H

4)、'A'OR20H

0061H

5)、10LT9

0

6)、4567/13+10H

016FH

7)、1234H+89HSHL1

1346H

8)、8910HSHR2AND506H

0004H

5.3习题

5.1、书写正确的MOV指令,需要符合哪些规定?

在32位CPU中,增加了什么指令来克服不同数据类型之间的数据传送?

5.2、简述指令MOVBX,1234H、MOVBX,[1234]和MOVBX,offset[1234H]的功能和它们之间区别。

MOVBX,1234H将通用寄存器BX的当前值设为1234H

MOVBX,[1234]取出内存地址1234H的当前值赋予通用寄存器BX

MOVBX,offset[1234H]取出内存地址1234H的偏移量,而地址【1234H】的偏移量就是1234H

5.3、简述指令MOVBX,Data和MOVBX,offsetData之间的区别。

MOVBX,Data将DATA的值赋予通用寄存器BX

MOVBX,offsetData将data的偏移地址赋予通用寄存器BX

5.4、选择指令实现下列要求,OPN1←OPN2的含义:

把操作数OPN2的值传送给OPN1。

1)、EBX←EDX

MOVEBX,EDX

2)、BX←CLMOVSXBX,CL

3)、SI←BX

4)、DS←AX

5)、AL←BH

6)、AL←12H

7)、AX←13AH

8)、CX←0CDH 

9)、SI←1000H

                      (假设0CDH为无符号数)

10)、EBX←1200A2H

5.5、PUSHA指令能把哪些寄存器压栈?

它们进栈的顺序是什么?

可用什么指令把这些寄存器依次弹出堆栈?

POPA

5.6、PUSHAD指令完成什么操作?

它与什么操作的作用相反?

5.7、在16位/32位CPU中,标志位寄存器的内容进栈和出栈的指令是什么?

5.8、写出下列指令序列中每条指令的执行结果,请在Debug环境下验证之,并注意各标志位的变化情况。

MOV  BX,23ABH

ADD  BL,0ACH

MOV  AX,23F5H

ADD  BH,AL

SBB   BX,AX

ADC  AX,12H

SUB  BH,-9

5.9、假定DS=1123H,SS=1400H,BX=0200H,BP=1050H,DI=0400H,SI=0500H,LIST的偏移量为250H,试确定下面各指令访问内存单元的地址。

1)、MOVAL,[1234H]

1234H

2)、MOVAX,[BX]

0200H

3)、MOV[DI],AL

0400H

4)、MOV[2000H],AL

2000H

5)、MOVAL,[BP+DI]

1450H

6)、MOVCX,[DI]

0400H

7)、MOVEDX,[BP]

1050H

8)、MOVLIST[SI],EDX

0750H

9)、MOVCL,LIST[BX+SI]

0950H

10)、MOVCH,[BX+SI]

0700H

11)、MOVEAX,[BP+200H]

1250H

12)、MOVAL,[BP+SI+200H]

1750H

13)、MOVAL,[SI-0100H]

0400H

14)、MOVBX,[BX+4]

0204H

5.10、用一条指令实现把BX和SI之和传送给CX。

CX,[BX+SI]

LEACX,[BX+SI]

5.11、试比较下列三组指令的功能。

1)、LDSSI,[DI]

相当于MOVSI,[DI]

MOVDS,[DI+2]

2)、MOVSI,[DI]   3)、MOVDS,[DI+2]改变了DS的值,因此随后执行

MOVDS,[DI+2]   

MOVSI,[DI]

功能与1同

5.12、标志位CF有着重要的作用,请简述之,并至少写出三种把CF置0的方法。

CLC

XORAX,AX

SUBAX,AX

5.13、写一个计算DL三次方的指令序列,假设幂不超过16位二进制。

MOVAL,DL

MULDL;(AX)乘积

MOVBX,AX

MOVAL,DL

CBW;(AX)扩展值

MULBX

计算结果放在AX中

5.14、写出一个指令序列实现:

用CL中数据除BL中的数据,然后商乘2,最后的结果存入DX中。

MOVAL,BL

CBW;(AX)

DIVCL;商(AL)

CBW

SHLAX,1

MOVDX,AX

5.15、按下列要求编写指令序列。

1)、清除DH中的最低三位而不改变其它位,结果存入BH中;

ANDDH,0F8H

MOVBH,DH

2)、把DI中的最高5位置1而不改变其它位;

ORDI,0F800H

3)、把AX中的0~3位置1,7~9位取反,13~15位置0;

ORAX,000FH

XORAX,0380H

ANDAX,1FFFH

4)、检查BX中的第2、5和9位中是否有一位为1;

ANDBX,0224H;如BX!

=0,则至少1位为1

5)、检查CX中的第1、6和11位中是否同时为1;

ANDCX,0842H

XORCX,0842H

6)、检查AX中的第0、2、9和13位中是否有一位为0;

ORAX,0DDFA

如AX!

=0FFFFH则至少一位为0

7)、检查DX中的第1、4、11和14位中是否同时为0;

ANDDX,4812H

如果DX为0,说明同时为0

5.16、简述指令AND和TEST、NOT和NEG之间的区别。

5.17、选择适当的指令实现下列功能。

1)、右移DI三位,并把零移入最高位;

MOVCL,3

SHRDI,CL

2)、把AL左移一位,使0移入最低一位;

SHLAL,1

3)、AL循环左移三位;

MOVCL,3

ROLAL,CL

4)、EDX带进位位循环右移四位;

RCREDX,4

5)、DX右移六位,且移位前后的正负性质不变。

SARDX,CL

5.18、判断下列指令的正确性,若某指令是错误的,请说明其错误原因。

1)、MOVBL,CX

2)、MOVDS,SS

3)、MOV[BX],[DI]

4)、MOVAL,[BX][SI]

5)、MOVES,AL

6)、MOVDS,DX

7)、MOVCS,AX

8)、MOVBX,CS

9)、MOVDS,1230H

10)、MOVSXDS,AL

11)、XCHGBX,3

12)、POPCS

13)、MOVIP,SI

14)、PUSHCS

15)、PUSHBL

16)、MOV[SP],BX

17)、MOVAX,BX+3

18)、MOVAX,[BX+3]

19)、MOVBX,[BX]

20)、MOVBH,[BL]

21)、XCHGES,AX

22)、LEAAX,[BX+SI]

23)、MUL10H

24)、IMULDX,10H

25)、DIV10

26)、IDIVDX,10H

27)、SHLAX,CX

28)、SHRBX,CH

29)、ROLBX,20

30)、RCRAX,CL

31)、CMPAX,1234H

32)、CMP12H,CL

33)、JCXZnext

34)、JEBXZnext   (假设标号next已存在)

5.19、方向标志DF的作用是什么?

用于设置或消除该标志位的指令是什么?

5.20、串指令用DI和SI寻址哪些内存段中的内存数据?

串操作指令用DI寻址ES段的内存数据,用SI寻址DS段的内存数据

5.21、段间转移和段内转移之间的区别是什么?

5.22、SCASB指令的作用是什么?

叙述指令REPESCASB指令所完成的功能。

5.23、指令REPNESCASB结束执行的条件是什么?

5.24、REP前缀的作用是什么?

能用指令REPLODSB读取DS:

SI所指内存中的每个字符来进行处理吗?

若不能,请说明原因。

5.25、编写指令序列,在字符串LIST中查寻字符'B',若找到,则转向Found,否则,转向NotFound,假设该字符串含有300个字符。

CLD

MOVAX,SEGLIST

MOVES,AX

LEADI,LIST

MOVCX,300

MOVAL,42H

REPNZSCASB

JZFOUND

JMPNOTFOUND

5.26、编写指令序列,把Source存储区域中的12个字节传送到Dest存储区域内。

CLD

MOVAX,SEGSOURCE

MOVDS,AX

LEASI,SOURCE

MOVAX,SEGDEST

MOVES,AX

LEADI,DEST

MOVCX,12

REPMOVSB

5.27、设计一个短指令序列,将32位数AX:

BX中的8位BCD与CX:

DX中的8位BCD相加,并把所得结果存入CX:

DX中。

1.PUSHAX

2.MOVAX,BX

3.ADDAL,DL

4.DAA

5.MOVDL,AL

6.MOVAL,BH

7.ADCAL,DH

8.DAA

9.MOVDH,AL

10.POPAX

11.ADCAL,CL

12.DAA

13.MOVCL,AL

14.MOVAL,AH

15.ADCAL,CH

16.DAA

17.MOVCH,AL

5.28、有符号数比较后,用什么样的条件转移指令实现转移?

无符号数比较后,用什么样的条件转移指令实现转移?

6.6习题

6.1、简述ASSUME伪指令的作用,用该语句说明的段寄存器不用对其赋段地址的初值?

6.2、用二种定义方法堆栈段,并给出相应的初始化语句或说明。

6.3、把下列C语句的语句改写成功能相同的汇编语言程序片段(其中:

变量都为整型变量)。

1)、h=(key&0XFF00)>>8;

KEYDW?

HDW?

MOVAX,KEY

ANDAX,0FF00H

MOVCL,8

SARAX,CL

MOVH,AX

2)、k=(k+'1'–0xabcd)/56;

KDW?

MOVAX,K

ADDAX,0031H

SUBAX,0ABCDH

CWD

MOVBX,56

IDIVBX

MOVK,AX

3)、for(i=s=0;i<100;i++)s+=data[i]*2;

IDW?

SDW?

DATADW100DUP(?

MOVS,0

MOVI,0

MOVSI,I

MOVBX,I

MOVAX,S

NEXT1:

CMPSI,100

JGENEXT2

MOVBX,DATA[BX]

SALBX,1

ADDAX,BX

INCSI

ADDBX,2

JMPNEXT1

NEXT2:

MOVS,AX

4)、for(s=0,i=100;i>0;i--)s+=i*2;

6.4、把下列C语言的语句改写成等价的汇编语言程序段(不考虑运算过程中的溢出)。

If(a<1||b/4>10&&c%8==5){

 a=20+b++;

 c<<=2;

 }

else{a=21-(++c);

  b--;

  }

其中:

变量a、b和c都是有符号的整型(int)变量。

ADW?

BDW?

CDW?

MOVBX,B

MOVCL,2

SARBX,CL

MOVCX,C

ANDCX,0007H

CMPBX,10

JBENEXT1

CMPCX,5

JNENEXT1

NEXT2:

MOVBX,B

MOVAX,20

ADDAX,BX

MOVA,AX

INCBX

MOVB,BX

MOVCX,C

SALCX,1

SALCX,1

MOVC,CX

JMPNEXT3

NEXT1:

MOVAX,A

CMPAX,1

JBNEXT2

MOVCX,C

INCCX

MOVC,CX

MOVAX,21

SUBAX,CX

MOVA,AX

MOVBX,B

DECBX

MOVB,BX

NEXT3:

6.5、假设内存单元中有三个字a、b和c,编写一个程序,它可判断它们能否构成一个三角形,若能,CF为1,否则,CF为0。

判断三边是否能构成一个三角形的原则是:

任意一边的变长都不得大于另外两边的边长之和。

对应c语言语句如下:

IF((A+B)>C&&(A+C)>B&&(B+C)>A){

//能构成三角形

}

ELSE{

//不能构成三角形

}

6.6、假设有三个无符号字存放在以Buffer为开始的缓冲区中,编写一个程序把它们从低到高排序好。

BUFFERDW3DUP(?

MOVAX,BUFFER

MOVBX,BUFFER[2]

MOVCX,BUFFER[4]

CMPAX,BX

JBENEXT1

XCHGAX,BX

NEXT1:

CMPBX,CX

JBENEXT3

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

当前位置:首页 > 经管营销

copyright@ 2008-2023 冰点文库 网站版权所有

经营许可证编号:鄂ICP备19020893号-2