第四章习题参考答案 教材上的习题 P2051解:A1-4字节,A2-6字节,A3-40字节,A4-60字节 P2054解:PAR偏移地址为0,PLENTH当前偏移地址$=2+16+4=22, $-PAR=22,故PLENTH的值为22 P2055解:AX=1,BX=20,CX=1 P2066解:应讨论最高位为1和0的情况。如输入最高位为1,AH=0:输入最高位为0,AH=0FFH。 INAL,5FH:假如输入后AL=45H TEST AL,80H;执行01000101AND10000000后ZF=1,AL=00H JZ L1 12F=1,转到L1 MOV AH,0 JMP STOP L1:MOV AH,OFFH :结果AH=OFFH STOP:HALT 补充题 阅读程序并完成填空 (1)ADDR1开始的单元中连续存放两个双字数据,求其和,并将和存放在ADDR2开始的单元(假定和 不超过双字) MOV CX.2 XOR BX,BX CLC NEXT:MOV AX,[ADDR1+BX] ADC AX._ MOV [ADDR2+BX].AX INC BX NEXT 解: [ADDR1+BX+4] INC BX LOOP (2)在数据段ADDR1地址处有200个字节数据,要传送到数据段地址ADDR2处。 MOV AX,SEG ADDR1 MOV DS,AX MOV ES, MOV SI,_
第四章习题参考答案 教材上的习题 P205 1 解:A1 - 4 字节,A2 - 6 字节,A3 - 40 字节,A4 - 60 字节 P205 4 解:PAR 偏移地址为 0, PLENTH 当前偏移地址$=2+16+4=22, $-PAR=22,故 PLENTH 的值为 22 P205 5 解:AX=1,BX=20,CX=1 P206 6 解: 应讨论最高位为 1 和 0 的情况。如输入最高位为 1,AH=0;输入最高位为 0,AH=0FFH。 IN AL,5FH ;假如输入后 AL=45H TEST AL,80H ;执行 01000101 AND 10000000 后 ZF=1,AL=00H JZ L1 ;ZF=1,转到 L1 MOV AH,0 JMP STOP L1: MOV AH,0FFH ;结果 AH=0FFH STOP: HALT 补充题 阅读程序并完成填空 (1) ADDR1 开始的单元中连续存放两个双字数据,求其和,并将和存放在 ADDR2 开始的单元(假定和 不超过双字) MOV CX,2 XOR BX,BX CLC NEXT: MOV AX,[ADDR1+BX] ADC AX, MOV [ADDR2+BX],AX INC BX NEXT 解: [ADDR1+BX+4] INC BX LOOP (2) 在数据段 ADDR1 地址处有 200 个字节数据,要传送到数据段地址 ADDR2 处。 MOV AX, SEG ADDR1 MOV DS, AX MOV ES, MOV SI
MOV DI.OFFSET ADDR2 MOV200 CLD REP 解: AX OFFSET ADDR1 CX MOVSB (3)已知有某字串BUF1的首地址为2000H,数据段与附加段重合。欲从BUF1处开始将20个字数据顺 序传送至BUF2处。(假设BUF1和BUF2有地址重叠) LEA SI.BUF1 ADD SI,_ LEA DI,BUF2 STD MOV CX,一 REP MOVSW 解: 38 ADD DI,38 20 (4)设有一个首地址为ARRAY,有N个字数据的数组,要求求出该数组之和,并把结果存入TOTAL地 址中。(假设和不超过两个字节) MOV CX, MOVAX.0 MOV SI.0 START:ADD AX,_ ADD SI,2 DEC CX JNZ START MOV AX 解: N ARRAY[SI] TOTAL
MOV DI, OFFSET ADDR2 MOV ,200 CLD REP 解: AX OFFSET ADDR1 CX MOVSB (3)已知有某字串 BUF1 的首地址为 2000H, 数据段与附加段重合。欲从 BUF1 处开始将 20 个字数据顺 序传送至 BUF2 处。(假设 BUF1 和 BUF2 有地址重叠) LEA SI, BUF1 ADD SI, LEA DI, BUF2 STD MOV CX, REP MOVSW 解: 38 ADD DI, 38 20 (4)设有一个首地址为 ARRAY,有 N 个字数据的数组,要求求出该数组之和,并把结果存入 TOTAL 地 址中。(假设和不超过两个字节) MOV CX, MOV AX,0 MOV SI,0 START: ADD AX, ADD SI, 2 DEC CX JNZ START MOV ,AX 解: N ARRAY[SI] TOTAL
(5)将段地址为1000H、偏移地址为STR的5个字节的内容逐一装入累加器中,加1后,再送入STR 为首地址的存储单元。 MOVAX,1000H MOV ES,AX MOV DS,AX MOV DI,SI MOV CX.5 CLD NEXT:LODSB ADD AL,1 LOOP NEXT 解: LEA SI,STR STOSB (6)下列子程序统计字符串的长度,入口参数D为字符串首地址,字符串以0DH结束:返回参数CX中 为统计得到的字符串长度。 STRLEN PROC PUSH AX PUSH DI MOV CX.0 REPEAT:MOV AL.[DI] JE EXIT INC DI EXIT: POP DI RET STRLEN ENDP 解: CMP AL,ODH INC CX JMP REPEAT POPAX
(5)将段地址为 1000H、偏移地址为 STR 的 5 个字节的内容逐一装入累加器中,加 1 后,再送入 STR 为首地址的存储单元。 MOV AX, 1000H MOV ES, AX MOV DS, AX MOV DI, SI MOV CX,5 CLD NEXT: LODSB ADD AL, 1 LOOP NEXT 解: LEA SI, STR STOSB (6)下列子程序统计字符串的长度,入口参数 DI 为字符串首地址,字符串以 0DH 结束;返回参数 CX 中 为统计得到的字符串长度。 STRLEN PROC PUSH AX PUSH DI MOV CX,0 REPEAT: MOV AL,[DI] JE EXIT INC DI EXIT: POP DI RET STRLEN ENDP 解: CMP AL, 0DH INC CX JMP REPEAT POP AX