4.9 习题

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

1)、code
3)、ABCDH
5)、eax
7)、A?@
9)、www@zsu.edu.cn
11)、_BX

2)、Data
4)、1abcH
6)、???01
8)、www@zsu
10)、AX$DX
12)、CX

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

1)、定义一个字节区域,第一个字节的值为20,其后跟20个初值为0的连续字节;
2)、定义一个以0为结束符的字符串,其初值为:The course is easy;
3)、定义一个以'$'为结束符的字符串,该串中含有换行符和回车符;
4)、定义100个字,其初值为0;
5)、从一个偶地址开始定义一个字变量word;

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

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

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

1)、char  ch1, ch2[3], ch3[]="Are you ready?", ch4='Q';
2)、int  w1, w2[5], w3=0x1234, w4[]={90, 89, 432, 344};
3)、long int d1=1234, d2, d3[10], d4[]={1, 2, 3, 4, 5, 6};

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

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

1)、定义日期结构类型Date,其包括:Year(年)、Month(月)和Day(日);

2)、定义时间结构类型Time,其包括:Hour(小时)、Minute(分)、Second(秒)和centsec(百分之一秒);

3)、定义结构Peason,其包括:name(姓名,字符,长度为8)、Birth(出生日期,Date),stature(身高,以厘米为单位的整数),Address(地址,30个字符)

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

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

1)、struct  ScreenBuffer {
      char c1;   //字符
      char attr;  //字符属性
    } Buffer[2000];

2)、struct  FILE {
      int level, flags;
      char fd, hold;
      int bsize, istemp, token;
     };

3)、struct  CELLREC {
      char attrib;
      union {char text[201];
         long value;
         struct {long fvalue;
             char formula[201];
            } f;
         } v;
     };

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

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

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    "The programming language is easy", 0
W1 DW    10 DUP(1, 2), 1234
D1 DD    20 DUP(0)
P1 PEASON <>, <>   ;结构PEASON的定义见4.4.2
U1 UNION1 3 DUP(<>)  ;联合UNION1的定义见4.4.3

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

4.12、强制属性操作符会改变变量的定义属性吗?在C语言中存在类似功能的语句吗?若存在,请举例说明。

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

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

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

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

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

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

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

#define N 200
struct buffer {
   char len1, len2, buff[N];
} buff;
int Data[N];

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

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

1)、12H AND 78H
3)、5467H XOR 12FFH
5)、10 LT 9
7)、1234H+89H SHL 1

2)、1234 MOD 3 + 23H
4)、'A' OR 20H
6)、4567 / 13 + 10H
8)、8910H SHR 2 AND 506H