DATA ENDS CODE SEGMENT
ASSUME CS:CODE,DS:DATA
START:MOV AX,DATA
MOV DS,AX
MOV SI,OFFSET STRG1 MOV DI,OFFSET STRG2 MOV CX,COUNT CLD
REP MOVSB MOV AH,4CH INT 21 H
CODE ENDS
5.寄存器SI做地址指针,自SI所指的内存单元开始连续存放三个无符号数(以字为单位),编一程序求它们的和,并将结果存放在这三个数之后的单元中。
解 DATA BUF
SEGMENT
DW XXH,YYH,ZZH
END START
SUM DW ?,? DATA ENDS
CODE SEGMENT
ASSUME CS:CODE,DS:DATA
START:MOV AX,DATA
MOV DS,AX
MOV SI,OFFSET BUF MOV DI,OFFSET SUM MOV AX,[SI]
ADD AX,[SI+2] MOV [DI],AX MOV AX,0 ADDC AX,0 MOV [DI+2],AX MOV AX,[DI] ADDC AX,[SI+4] MOV [DI],AX
MOV AX,0 ADDC AX,[DI+2] MOV [DI+2],AX MOV AH,4CH INT 21H CODE ENDS
END START
6.读下面程序段,问:在什么情况下本段程序的执行结果是AH=0? START:IN AL,5FH
MOV AH,0 JZ BRCH MOV AH,0 JMP STOP BRCH: MOV AH,0FFH STOP: INT 20H
解 当标志寄存器的ZF=0时,执行结果AH=0。(JZ之前的两条指令对零标志没有影响)
7.下面语句在存储器中分别为变量分配多少字节? 0NE
DW 10
TW0 DW 4 DUP(?),5 THREE DB 2 DUP(?,8 DUP(0)) COUNT
EQU 10
FOUR DD COUNT DUP(?) FIVE 解
ONE DW 10
;为ONE分配2个字节 ;为TWO分配10个字节
DB ‘HOW ARE YOU?’
TWO DW 4 DUP(?),5
THREE DB 2 DUP(?,8 DUP(0)) ;为THREE分配18个字节 COUNT
EQU 10
;不给COUNT分配存储单元
FOUR DD COUNT DUP(?) ;为FOUR分配40个字节 FIVE
8.数据定义语句如下所示: FIRST DB 90H,5FH,6EH,69H SECOND DB 5 DUP(?) THIRD DB 5 DUP(?) FORTH DB DUP(?)
自FIRST单元开始存放的是一个四字节的十六进制数(低位字节在前),要求: (1)编一段程序将这个数左移两位后存放到自SECOND开始的单元(注意保留移出部分);
(2)编一段程序将这个数右移两位后存放到自THIRD开始的单元(注意保留移出部分); (3)编一段程序将这个数求补后存放到自FORTH开始的单元。 解
DATA SEGMENT FIRST
DB 90H,5FH,6EH,69H
DB ‘HOW ARE YOU?’ ;为FIVE分配12个字节
SECOND DB 5 DUP (?) THIRD DB 5 DUP (?) FORTH DB
DUP (?)
DATA ENDS