第四章 答案 - 图文 下载本文

第四章 答案

1 分别用DB,DW,DD 伪指令写出DATA 开始的连续8个单元依次存放数据11H,22H,33H,44H,55H,66H,77H,88H的数据定义语句。 解:(1) DATA DB 11H,22H,33H,44H,55H,66H,77H,88H

(2) (3)

DATA DW 2211H, 4433H, 6655H, 8877H DATA DD 44332211H, 88776655H

2 若程序的数据段定义如下,写出各指令语句独立执行后的结果。 DSEG SEGMENT DATA1 DB 10H, 20H, 30H DATA2 DW 10 DUP (?) STRING DB ‘123’ DSEG ENDS 解:

(1) MOV AL, DATA1 (AL)=10H

(2) MOV BX, OFFSET DATA2 BX内容为变量DATA2的偏移地址 (3) LEA SI, STRING SI内容为变量STRING的偏移地址 ADD BX , SI BX内容为变量DATA2的偏移地址

与变量STRING的偏移地址相加的和。

3 试编写求两个无符号双字长数之和的程序,两个数分别MEM1和MEM2单元中,和放在SUM单元中。 解:

1

DATAS SEGMENT

MEM1 DD 11223344H MEM2 DD 11223344H

SUM DW 10 DUP (0) ;此处输入数据段代码 DATAS ENDS

STACKS SEGMENT

;此处输入堆栈段代码 STACKS ENDS

CODES SEGMENT

ASSUME CS:CODES,DS:DATAS,SS:STACKS START: MOV AX,DATAS MOV DS,AX XOR AX,AX LEA SI,MEM1 LEA DI,MEM2 LEA BX,SUM

MOV AX,WORD PTR [SI] ADD AX,WORD PTR [DI] MOV [BX],AX

MOV AX, WORD PTR [SI+2] ADC AX, WORD PTR [DI+2] MOV [BX+2],AX MOV AH,4CH INT 21H CODES ENDS

END START

4 试编写程序,测试AL寄存器的第4位是否为0 解: ………………. TEXT AL, 10H JZ ABC ……………….. ABC : ……………..

2

6 假设数据项定义如下:

DATA1 DB ‘HELLO! GOOD MORNING!’ DATA2 DB 20 DUP(?)

用串操作指令编写程序段,使其分别完成如下功能。 (1) 从左到右将DATA1中的字符串传送到DATA2中。 (2) 传送完后,比较DATA1和DATA2中的内容是否相同。 (3) 把DATA1中的第三和第四个字节装入AX. (4) 将AX的内容存入DATA2+5开始的字节单元中。 解:DATAS SEGMENT

DATA1 DB 'HELLO! GOOD MORNING!' COUNT EQU $-DATA1

DATA2 DB 20 DUP(?) ;此处输入数据段代码 DATAS ENDS

STACKS SEGMENT

;此处输入堆栈段代码 STACKS ENDS

CODES SEGMENT

ASSUME CS:CODES,DS:DATAS,SS:STACKS START:

MOV AX, DATAS MOV DS, AX

MOV ES, AX ; 代码段和附加段属于同一段。 CLD

LEA SI, DATA1 LEA DI, DATA2 MOV CX, COUNT REP MOVSB

CALL COMPARE ; CALL LOAD MOV AH, 4CH INT 21H

3

;(2)传送完后,比较DATA1和DTAT2中的内容是否相同。 ; 用子程序实现

COMPARE PROC NEAR CLD

LEA SI,DATA1 LEA DI,DATA2 MOV CX,COUNT REPE CMPSB JNZ ANB JMP AEB

ANB :MOV AX,0FFFFH ; 如果不相同DX内容0FFFFH JMP BBB

AEB :MOV AX,0H ; 否则DX内容0H BBB: MOV DX,AX RET

COMPARE ENDP

; (3)把DATA1中的第三和第四个字节转入AX.

; (4)将AX的内容存入DATA2+5开始的字节单元中。 ; (3)(4)用子程序实现! LOAD PROC NEAR LEA SI,DATA1 LEA DI,DATA2

MOV AX,WORD PTR[SI+3] MOV [DI+5],AX RET

LOAD ENDP CODES ENDS

END START

7.执行下列指令后,AX寄存器中的内容是多少? TABLE DW 10,20,30,40,50 ENTRY DW 3 ………..

MOV BX, OFFSET TABLE ADD BX, ENTRY MOV AX, [BX] 解: (AX)=40

4