计算机硬件技术基础_万晓冬_习题 下载本文

4—5 设某数据段定义如下:

D—SEG SEGMENT PARA‘DATA’ ORG 30H DATA1 EQU 10H

DATA2 EQU DATAl十20H VARl DB 10 DUP(?) VAR2 DW‘AB’,2,2000H CNT EQU $-VARl D—SEG ENDS

试回答: (1)VARl、VAR2的偏移量是多少? (2)符号常量CNT的值=? (3)VAR2+2单元的内容为多少?

4—6 代码段中开始的一段程序有通用性,试将此段定义为一条宏指令。 4—7 请定义一条宏指令,它可以实现任一数据块的传送(假设无地址重迭),只要给出源和目标数据块的首地

址以及数据块的长度即可。

4—8 下列语句中,那些是无效的汇编语言指令?并指出无效指令中的错误。 (1)MOV SP,AL

(2)MOV WORD—OP[BX+4X 3][SI],SP (3)MOV VARl,VAR2 (4)MOV CS,AX (5)MOV DS,BP (6)MOV SP,SS:DATA (7)MOV AX,[BX—S1) (8)INC [BX]

(9)MOV 25,[BX] (10)MOV [8-BX],25

4—9 若数组ARRAY在数据段中已作如下定义: ARRAYDW 100 DUP(?)

试指出下列语句中各操作符的作用,指令执行后有关寄存器产生了什么变化?

......

MOV BX,OFFSET ARRAY MOV CX,LENGTH ARRAY MOV SI,0

.....

ADD SI,TYPE ARRAY

4—10 设x、y、z已定义为字节变量。若x和y各存放一个32位(四字节)的无符号数,存放顺序是低位字节在先

,试写出将x和y相加、结果存入2的程序段。

4—11 若题10中,x,y各存放一个32位的有符号数(低字节数在前),试编写x—y、结果存入z的程序段。同时

判断运算结果是否发生溢出,若不溢出使DL清零,否则(溢出)以一1作为标志存人DL中。

4—12 某软件共可接受10个键盘命令(分别为A,B,C,?,J),完成这10个命令的程序分别为过程P0,P1,

?,P9。编程序从键盘接收命令,并转到相应的过程去执行。要求用两种方法:

(1)用比较、转移指令实现。 (2)用跳转表实现。 4—13 若已定义以下数据段:

DATA SEGMENT BUF DB 100 DUP(?) GOOD DB? PASS DB? BAD DB? AVRG DB? DATA ENDS

若已将某年级100名学生电路分析的成绩以压缩BCD数形式存人变量BUF中,试编写程序段统计成绩高

于85分、低于60分和界于60分至85分的学生人数,仍以压缩BCD数形式存GOOD\BAD和PASS变量中(假

定任一档的人数都不达到100人),并计算全年级平均成绩,也以压缩BCD形式存人变量AVRG中(假定平均

成绩低于100分,且舍去小数点以后的数)。

4—14 试编写一程序段,完成两个以压缩BCD格式表示的16位十进制数(8个字节)的加法运算,相加的两数J

和y可定义为字节变量,并假定高位在前,和数SUM也同样定义为字节变量。

4—15 从nRST开始的100个单元中存放着一个字符串,结束符为‘$’。编写一个程序,统计该字符串中字母

‘A’的个数。

4—16 试编写统计AX中0、1个数的程序。0的个数存人CH,1的个数存人CL中。

4—17 试编制一程序,统计DATA—W字数组中正数、负数和零的个数,并分别保存在变量COUTl、COUT2、

COUT3中。

4—18 试找出无符号字节数组ARRAY中的最大和最小数组元素,最大数组元素送MAX单元,最小数组元素送

MIN单元。

4—19 从BLOCK开始,存放着256个字节的带符号数,编写程序从这些数中找出绝对值最大的数,将其存人

MAX单元中。

4—20 编写一个程序,将变量ABC中的16位无符号数用“连续除10取余”的方法转换成十进制数,要求结果

用压缩BCD码保存在RESULT开始的单元中。

4—21 假定有一个由100个元素组成的字节数组(且是无符号数),该数组已在数据段中定义为字节变量

TABLE。试编写一段程序,把出现次数最多的数存人CH中,其出现次数存人CL中。

4—22 假定有一最大长度为80个字符的字符串已定义为字节变量STRING,试编写一程序段,找出第一个空格

的位置(00H至4FH表示)并存人CL中,若该串无空格符,则以一1存入CL中。

4—23 对题22,若该字符串以回车符结束,试编写一程序段,统计该串的实际长度(不包括回车符),统计结

果存入CH中。

4—24 假定在数据段中已知字符串和未知字符串的定义如下: STRING1 DB‘MESSAGE AND PROCCESS’ STRING2 DB 20 DUP(?)

使用串操作指令编写完成下列功能的程序段(设DS和ES重叠) (1)从左到右把STRINGl中字符串搬到STRING2中; (2)从右到左把STRINGl中字符串搬到STRING2中;

(3)搜索STRINGl字符串中是否有空格。如有,记下第一个空格的地址,并放人BX中;

(4)比较STRINGl和STRING2字符串是否相同。

4—25 设在模块MODULE——1中定义了字变量VARl和标号LABEL—1,它们将由模块MODULE—2和MODULE—3调用

;在模块MODULE—2定义了双字变量VAR3和标号LABEL—2,VAR3被MODULE_1引用,LABEL—2被

MODULE—3引用;在MODULE—3中定义了标号LABEL—3,在MODULE—2中要引用到它。根据上述访问关

系,试写出每个模块必要的的EXTRN和PUBLIC说明。

4—26 用模块化编程方法实现显示字符串“ASSEMBLER”,要求模块1为主程序,负责数据初始化工作;模块

2中定义了子程序DISPLAY显示字符串;主程序与子程序DISPLAY在不同的代码段中。

4—27 编写一个程序从键盘输入4位十六进制数的ASCⅡ码,并将其转换成4位十六进制数存入DX寄存器中。 4—28 写出符合下列要求的指令序列:

(1)在屏幕上显示当前光标位置的坐标值; (2)在屏幕中央以反相属性显示‘ABC’; (3)屏幕向上滚动5行,100列;

(4)在640×350、16色方式下,画一矩形框,框左上角坐标(X1,Y1)和右下角坐标(X2,Y2)分别为

(100,50)和(400,200)。 4—29 读取系统日期并显示。 4—30 已知某数据段定义如下:

D—SEG SEGMENT PARA NUM1 DB 26H