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
CODE SEGMENT
ASSUME CS:CODE,DS:DATA
START: MOV AX,DATA
MOV DS,AX CALL SUBP1 SUBP1
LOP1:
CALL SUBP2 CALL SUBP3 MOV AH,4CH INT 21H
PROC
MOV SI,OFFSET FIRST MOV DI,OFFSET SECOND XOR BL,BL MOV CL,2 MOV AX,[SI]
MOV DX,[SI+2]
SHL AX,1
RCL DX,1 RCL BL,1 DEC CL JNZ LOP1 MOV [DI],AX
MOV [DI+2],DX MOV [DI+4],BL RET
SUBP1 SUBP2
LOP2:
SUBP2 SUBP3
ENDP PROC
MOV SI,OFFSET FIRST MOV DI,OFFSET THIRD XOR BL,BL MOV CL,2 MOV AX,[SI] MOV DX,[SI+2]
SHR DX,1
RCR AX,1 RCR BL,1 DEC CL JNZ LOP2 MOV [DI],BL MOV [DI+1],AX MOV [DI+3],DX RET
ENDP PROC