6.6 习题

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

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

6.3、把下列C语句的语句改写成功能相同的汇编语言程序片段(其中:变量都为整型变量)。

1)、h = (key & 0XFF00) >> 8;
2)、k = (k + '1' – 0xabcd) / 56;
3)、for (i = s = 0; i < 100; i++) s += data[i] * 2;
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)变量。

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

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

6.7、编写一个程序,它把一位十六进制数转化成相应的数字字符或大写字母。

6.8、编写一个程序,它把一个合法的十六字符转化成相应的数值。

6.9、编写一个程序,它可统计32数DX:AX中二进制位是1的位数。

6.10、编写一个程序,它把CH和CL中的二进制位依次交叉存入AX中。

6.11、编写一个程序,求出从内存单元1000:0000开始的1024个字的32位累加和,并把该值存入程序中的变量Data中。

6.12、假设从变量Buff开始存放了200个字,编写一个程序统计出其正数、0和负数的个数,并把它们分别存入N1、N2和N3中。

6.13、用双重循环把下三角乘法表存入从product开始的45个字节中。

6.14、表示源程序结束的伪指令是什么?在其后所编写的指令在被汇编吗?

6.15、汇编语言程序一定会从代码段的第一条指令开始执行吗?如果不是,如何指定程序的入口地址?

6.16、编写一个程序,它把字符串String两端的空格删除(字符串以0结束)。

6.17、编写一个程序,它把字符串String中的数字字符删除掉(字符串以0结束)。

6.18、编写一个程序,它把AX的值以二进制字符串的形式存放在以buff开始的缓冲区中。

6.19、假设有一个以Data为首地址的字缓冲区,其缓冲区的大小在第一个字中,试编写一个程序,求出该缓冲区数值的最大值和最小值,并分别存入DI和SI中。

6.20、编写一个程序片段,把32位数DX:AX向左移六位。