1、注意:1.不允许立即数直接送段寄存器。 2.目的操作数不能为立即数和CS段寄存器。 3.不能实现存储单元之间的数据传送。 4.不允许两个段寄存器之间直接传送信息。 5.操作数类型要匹配,字对字,字节对字节。,1.判断下列指令是否正确。若不正确,指出错误原因。 (1)MOV DS,SS 内容应由AX传送 (2) MOV AH,DX 寄存器类型不匹配 (3)MOV BX,SI 不能在两个内存单元之间传递参数 (4) MOV CS ,1000 CS不能为目的操作数 (5)INC BX 内存单元的内容类型不确定,可能是字节或字,(6) MOV AX,BX+DX DX不能做基址寄存器 (7)MOV AX
2、,DISI DI和SI不能一起用 (8) XCHG AX,2000H 两个操作数之间的任意一个都不能是立即数 (9)IN AL,BX 此指令的源操作数只能是DX (10)XCHG BX,IP IP不能做任一操作数,2、若某数据区得开始地址为A7F0H:2B40H,则该数据区得首字单元和32个字的末字单元的物理地址分别为多少? 解;首地址(A7F0H*10H)+2B40H=AAA40H; AAA40H+(20H-1)*2=AAA7EH 3、若DS=6100H,则当前数据段的起始地址是什么?末地址为多少? 解:起始地址:61000H;段的长度为64K,61000H+FFFFH=70FFFH。,4、
3、设一个字节数据X存放在AL寄存器中,试说明下列程序的功能。 XOR AH,AH SAL AX,1 MOV BX,AX MOV CL,2 SAL AX,CL ADD AX,BX 完成(AL)X10的功能,即10X。,5、假设AX=0078H,BX=06FAH,CX=1203H,DX=4105H,CF=1,下列每条指令单独执行后,标志位CF,OF和ZF的值是多少?DEC BX 不影响标志位DIV CH 所有标志位无定义MUL BX,若乘法结果DX包含有效值C =1, OF=1,其他不定。否则OF=0、CF=0 SHR AX,CL C=0,ZF=0,其他不定(进位移) AND AL,0F0H C=0
4、,Z=0,O=0。 AND指令每次操作都使CF清0,,6、假设在下列程序段的括号中分别填入以下命令: 1、LOOP LLL;2、LOOPNZ LLL;3、LOOPZ LLL。判断CX 0且ZF=1指令执行后,AX=?BX=?CX=?DX=? 程序如下: ORG 0200H MOV AX,10H MOV BX,20H MOV CX,04H MOV DX,03H,LLL: INC AXADD BX,BXSHR DX,1( )HLT,1、AX=0014H,BX=200H,CX=0000H,DX=0000H 2、AX=0012H,0080H,0002H,0000H 3、0011H,0040H,0003
5、H,0001H,编写一内存自检程序,检查从2000H:0000H开始的64KB是否损坏,若损坏转RAM_ERR,若完好转RAM_OK 解 检查内存的一般方法是先往内存的每一单元写一个特征字,稍后再读出来看是否还是那个特征字,如果每个单元都正确,则内存完好。一般往里面写两次特征字,一次写55H,一次写0AAH,这样操作是保证每个单元的每一位既能写1又能写0,确保安全。程序如下:,MOV AX,2000H MOV ES,AX MOV DI,0 MOV CX,8000H MOV AX,5555H CLD REP STOSW ;先给每一单元写入55H MOV CX,8000H MOV DI,0 REP
6、E SCASW ;扫描每个单元是否为55H? JNZ RAM_ERR ;有错转RAM_ERR MOV CX,8000H MOV DI,0 MOV AX,0AAAAH REP STOSW,;再给每一单元写入0AAH MOV CX,8000H MOV DI,0 REPE SCASW;扫描每个单元是否为0AAH? JNZ RAM_ERR ;有错转RAM_ERR RAM_OK: ;内存完好处理程序段 RAM_ERR: ;内存损坏处理程序段,作业: 下面程序片段中有两条转移指令,试计算这两条指令的位移量。左边为逻辑地址及机器码,右边为指令助记符。 13BA:001B F3 REPZ 13BA:001C
7、A6 CMPSB 13BA:001D 75 ? JNZ 0020 13BA:001F CB SAME: RET 13BA:0020 41 FOUND: INC CX 13BA:0021 89 0E 06 00 MOV 0006,CX 13BA:0025 EB ? J MP 001F ,解 JNZ 0020指令的位移量为:目的地址IP的当前值0020H001FH01H。位移量为正,表明由低地址向高地址转移。 JMP 001F指令的位移量为:目的地址IP的当前值001FH0027H8H,负数取补码,位移量为F8H。位移量为负,表明由高地址向低地址转移。,作业: 试编一程序,求三个带符号字数据块中的
8、最大值,并将最大值存入 MAX字单元中。编写程序完成求123N的累加和,直到累加和超过 1000为止。统计被累加的自然数的个数送CN单元,累加和送 SUM。,(1),程序如下: STAC SEGMENT STACKDB 200 DUP(0) STACK ENDS DATA SEGMENT X DW 00ABH Y DW 5 Z DW 200 MAX DW ? DATA ENDS CODE SEGMENT,ASSUME DS:DATA,SS:STACK,CS:CODE START: MOV AX,DATAMOV DS,AXMOV AX,XCMP AX,Y ;XY?JG L1MOV AX,Y ;Y
9、Z?CMP AX,ZJG EXIT L2: MOV AX,ZJMP EXIT,L1:CMP AX,Z;XZ?JLE L2 EXIT: MOV MAX,AXCODE ENDSEND START,(2),程序如下:,DATA SEGMENTSUM DW ?CN DW ? DATA ENDS CODE SEGMENTASSUME CS:CODE,DS:DATA START: MOV AX,DATAMOV DS,AX ;初始化MOV AX,0 ;0送AX,MOV BX,0 ;0送BX LP: INC BX ;BX加1ADD AX,BX ;求累加和CMP AX,1000 ;比较 JBE LP ;1000
10、转MOV SUM,AXMOV CN,BX ;送结果CODE ENDS END START ;汇编结束,作业:1、求表达式Z(10X4Y)2的值(X、Y为字节型变量,Z为字型变量) 2、键盘输入一字符串(最大为80个)存入BUFFER缓冲区,并将实际键入的字符个数以十进制数显示输出。,程序如下: DATA SEGMENT X DB 66H Y DB 35H Z DW ? DATA ENDS CODE SEGMENT ASSUME CS:CODE,DS:DATA MOV AX,DATA MOV DS,AX XOR AX,AX MOV AL,X SHL AX,1 ;2X MOV BX,AX SHL
11、AX,1 ;4X SHL AX,l ;8X ADD BX,AX ;,2X+8X MOV AH,0 MOV AL,Y SHL AX,1 ;2Y SHL AX,1 ;4Y ADD BX,AX ;10X+4Y SHR BX,1 ;(10X+4Y)/2 MOV Z,BX MOV AH,4CH INT 21H CODE ENDS END,先利用9号功能调用显示提示信息,再利用10号功能调用输入字符串。因实际键入字符个数在BUFFER1单元,是二进制数,所以需要进行二进制数到十进制数的转换,才能显示输出。程序如下: CRLF MACRO MOV AH,2 MOV DL,0DH INT 21H MOV AH
12、,2 MOV DL,0AH INT 21H ENDM DATA SEGMENT STRING DB INPUT STRING-,0DH,0AH,$ BUFFER DB 80,0,80 DUP(?) DATA ENDS,CODE SEGMENT ASSUME CS:CODE,DS:DATA MOV AX,DATA MOV DS,AX LEA DX,STRING MOV AH,9 INT 21H LEA DX,BUFFER MOV AH,0AH INT 21H CRLF ;宏调用,MOV AL,BUFFER1 ;实际键入字符个数送AL MOV AH,0 MOV CL,10 DIV CL MOV CL,AH MOV DL,30H ADD DL,AL MOV AH,2 INT 21H MOV DL,CL ADD DL,30H MOV AH,2 INT 21H MOV AX,4C00H INT 21H CODE ENDS END,1、为了减轻总线负载,总线上的部件大都具有三态逻辑,三态逻辑电路输出信号的3个状态是() 处理器总线物理上的含义是()2、8086在最大模式和最小模式下,引脚信号有什么不同? 3、简述总线的三种数据传输方式。,