答:给出的数据段中,有数据‘4100H’的字存储单元有3个,它们的偏移量分别是41H、 44H、47H。
7.试用数据定义语句DB或DW改写下述两语句中的某一个,使它们在存储器中有完全相同的存储情况。 VAR1 DB ‘abcdefghij’
VAR2 DW 6162H,6364H,6566H,6768H,696AH
答:将第一个伪指令语句改写为VAR1 DW ‘ab’,‘cd’,‘ef’,‘gh’,‘ij’,第二个伪指令语句不变。或第一个伪指令语句不变,而将第二个伪指令语句改写为:
VAR2 DB 61H,62H,63H,64H,65H,66H,67H,68H,69H,6AH 9.按下面的要求写出程序的框架
(1)数据段的位置从0E000H开始,数据段中定义一个100字节的数组,其类型属性既是字又是字节;
(2)堆栈段从小段开始,段组名(类别名)为STACK;
(3)代码段中指定段寄存器,指定主程序从1000H开始,给有关段寄存器赋值; (4)程序结束。 答:所求程序框架为: Data SEGMENT AT 0E000H Arr_w LABEL WORD Arr_b DB 100 DUP(?) Data ENDS
Sta_seg SEGMENT PARA ‘STACK’ DB 80 DUP(?) Top LABEL WORD
Sta_seg ENDS Code SEGMENT
ASSUME CS:Code,DS:data,SS:sta_seg ORG 1000H Start: MOV AX, data MOV DS, AX MOV AX,Sta_seg MOV SS, AX MOV SP, OFFSET Top ?? MOV AH, 4CH INT 21H Code ENDS END Start
10.编写一个程序,要求运行时屏幕显示‘BELL’,同时响铃一次(响铃的ASCII码为07)。 答:所求程序为: Code SEGMENT ASSUME CS:code Start: MOV DL, 42H
MOV AH, 2 INT 21H MOV DL, 45H MOV AH, 2 INT 21H MOV DL, 4CH MOV AH, 2 INT 21H MOV DL, 4CH MOV AH, 2 INT 21H MOV DL, 7 MOV AH, 2 INT 21H MOV AH, 4CH INT 21H Code ENDS END Start
11.假设在数据段X_SEG、附加段Y_SEG和堆栈段Z_SEG中分别定义了字变量X、Y和Z,试编制一完整的程序计算 X+Y+Z,并将结果送X。
答:所求程序为:
X_SEG SEGMENT X DW 12eH X_SEG ENDS Y_SEG SEGMENT Y DW 4d2H Y_SEG ENDS
Z_SEG SEGMENT STACK ‘STACK’ Z DW 2CAH Z_SEG ENDS Code SEGMENT
ASSUME CS:Code,DS:X_SEG,ES:Y_SEG,SS:Z_SEG Start: MOV AX, X_SEG MOV DS, AX
MOV AX, Y_SEG MOV ES, AX MOV AX,ES:Y ADD X, AX MOV BP, 0
MOV AX, [BP+Z] ADD X, AX MOV AH, 4CH INT 21H
Code ENDS END Start
12.写一个完整的程序放在代码段C_SEG中,要求把数据段D_SEG中的DADD1和附加段E_SEG中的DADD2相加,并把结果存放在D_SEG段中的SUM中。其中DADD1、DADD2和SUM均为双字类型,DADD1赋值为98765,DADD2赋值为-15893。 答:所求程序为:
D_SEG SEGMENT DADD1 DD 98765 SUM DD ? D_SEG ENDS E_SEG SEGMENT DADD2 DD -15893 E_SEG ENDS C_SEG SEGMENT
ASSUME CS: C_SEG,DS:D_SEG,ES:E_SEG Start: MOV AX, D_SEG