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
MOV SI,OFFSET FIRST MOV DI,OFFSET FORTH MOV AX,[SI] MOV DX,[SI+2] NOT AX
NOT DX ADD AX,1 ADC DX,0 MOV [DI],AX MOV [DI+2],DX RET
SUBP3 CODE
9.指令语句AND AX,OPD1 AND OPD2中,OPD1和OPD2是两个已赋值的变量,问两个AND操作分别在什么时间进行?有什么区别?
解 前面的AND是指令,在程序运行时执行,后面的AND是运算符,在汇编的时候由汇编程序计算,表达式计算结果出现在执行程序中。二者的区别在于,前者是指令,程序运行时执行,后者是运算符,汇编时计算。
10.如下指令或程序是否有错,若有错,请指出错在哪里?
ENDP ENDS END START
(1)KI EOU 1024
┇
MOV K1,AX MOV DS,100 MOV [1000],[2000]
(2)
(3)IMP DB ?
┇
MOV IMP,AX
(4)A1 DB ? A2 DB 10
┇
CMP A1,A2
(5)将1000送入X1单元,用如下程序: X1 解
(1)MOV K1,AX错。因为K1为立即数,它不能作为目的操作数。
(2)这两条指令都是错的。第一条立即数不能直接送给段寄存器;第二条两个操作数不能同时为内存操作数。
(3)MOV IMP,AX错。两操作数类型不匹配,IMP是一字节内存单元,而AX寄存
DB ? ┇
MOV BX,X1 MOV [BX],1000