更多“判断下列指令中哪些是错误的,并说明错的原因。 (1)MOV  BL, AX  (2)MOV  AL, BX  (3)MOV  AL, BL  (4)MOV  BP, BYTE PTR[BX]”相关问题
  • 第1题:

    下列MOV指令都是错误的,请指出错误原因。

    (1)MOV ES, 1234H

    (2)MOV AL, 300

    (3)MOV [SP], AX

    (4)MOV AX, BX+DI

    (5)MOV 20H, AH


    正确答案:(1)立即数不能直接赋给段寄存器。 (2)立即数300超过8位不能赋给8位寄存器AL。 (3)SP不能作为间接寻址寄存器寻址。 (4)两个寄存器不能相加。 (5)立即数不能作为目标操作数。
    (1)立即数不能直接赋给段寄存器。 (2)立即数300超过8位,不能赋给8位寄存器AL。 (3)SP不能作为间接寻址寄存器寻址。 (4)两个寄存器不能相加。 (5)立即数不能作为目标操作数。 解析:本问题主要考查汇编语言的基础知识。在8086的指令系统中,应用通用传送指令时,需要注意以下几点:
    传送指令可传送8位数据,也可传送16位数据,具体取决于指令中涉及的寄存器是8位还是16位,也取决于立即数的形式。
    传送指令中总是即含源操作数,又含目的操作数,两者之中至少有一个是用寄存器来指出的,这可减少指令长度。因此,一个立即数不能直接送直接寻址的内存单元。交换指令(XCHG)两个操作数都不能是立即数。
    传送指令不能在两个内存单元之间直接传送数据。
    在传送指令中,寄存器即可以作为源操作数,也可以作为目的操作数,但CS寄存器不能作为目的操作数,换句话说,这个寄存器的值不能随意修改。而IP寄存器即不能作源操作数,也不能作为目的操作数。
    用BX、SI、DI来间接寻址时,默认的段寄存器位DS,而用BP来间接寻址时,默认的段寄存器为SS。
    8086系统规定,凡是遇到给SS寄存器赋值的传送指令时,系统会自动禁止外部中断,等到本条指令和下条指令执行后,又自动恢复对SS寄存器赋值前的中断开放状态。这样做是为了允许程序员连续用两条指令分别对SS和SP寄存器赋值,同时又防止堆栈空间变动过程中出现中断。了解这点后,就应注意在修改SS和SP的指令之间不要插入其他指令。
    除了一些直接影响FLAGS的指令外,一般传送指令不改变标志寄存器的内容。
    立即数不能直接送段寄存器DS、ES以及SS,要用通用寄存器或存储单元作桥梁。
    因此,指令“MOVES,1234H”的错误在于立即数直接赋给了段寄存器;指令“MOV AL,300”的错误在于立即数300超过8位,不能赋给8位寄存器AL;指令“MOV[SP],AX”的错误在于SP不能作为间接寻址寄存器寻址:指令“MOV AX,BX+DI”的错误在于两个寄存器不能相加;指令“MOV 20H,AH”的错误在于立即数不能作为目标操作数。

  • 第2题:

    以NUM为起始地址的字节表中存放着M个带符号数据,请分别找出最大值和最小值。并分别送入到AH和AL中。请在程序中的空格处填人适当指令使其完整。 MOV(),OFFSET NUM XOR AX,AX MOV CX,() MOV BH,[ SI] MOV BL,BH K1:() CMP AL,BH JLE() MOV BH, () JMP K3 K2: CMP AL,BL () K3 MOV BL,AL K3 :()K1 MOV (),BX INT 3


    正确答案:SI;M.;LODSB;K2;AL;JGE;LOOP;AX

  • 第3题:

    指出下列指令中哪些是错误的,错在什么地方。  (1)MOV DL,AX  (2)MOV 8650H,AX  (3)MOV DS,0200H  (4)MOV [BX],[1200H]  (5)MOV IP,0FFH  (6)MOV [BX+SI+3],IP  (7)MOV AX,[BX][BP]  (8)MOV AL,ES:[BP]  (9)MOV DL,[SI][DI]  (10)MOV AX,OFFSET 0A20H  (11)MOV AL,OFFSET TABLE  (12)XCHG AL,50H  (13)IN BL,05H  (14)OUT AL,0FFEH


    正确答案:(1)长度不匹配
    (2)立即数不能做目的操作数
    (3)段寄存器不能用立即数赋值
    (4)两个内存单元不能直接传送数据
    (5)IP 不能用指令直接修改
    (6)指令中不能出现 IP
    (7)BX/BP 应与 SI/DI 搭配
    (8)正确
    (9)SI/DI 应与 BX/BP 搭配
    (10)OFFSET 后应跟内存单元
    (11)偏移地址为16 位,AL 长度不够
    (12)立即数不能用于XCHG
    (13)IN 必须用 AL/AX
    (14)操作数顺序反向;地址应为 8 位

  • 第4题:

    指出以下指令中,哪些指令是非法的,并说明为什么(8086系统)。 (1) PUSH 1234H (2) MOV CS,AX (3) IN AX, 300 (4) MOV AX,[DX+12] (5) MOV BX,[BX] (6) MOV DS,1000H (7) XCHG AL,AL (8) MOV AL,100H (9) MOV DX,AL (10)LEA BL,[BX+5] (11)LEA DX,BX (12)MOV [1000H],12H (13)ADD AX,DS (14)SUB [0100H],BYTE PTR [0001] (15)SHL BL,2 (16)SHR CL,CL (17)MUL AL,BL (18)INT 400


    正确答案: (1)非法,8086系统不允许PUSH指令的操作数为立即数;
    (2)非法,MOV指令中CS不能作为目的操作数;
    (3)非法,端口号大于0FFH;
    (4)非法,DX不能出现在中括号[]内;
    (5)合法;
    (6)非法,不能把立即数赋给段寄存器;
    (7)合法;
    (8)非法,源操作数大于0FFH,不能赋给8位寄存器AL;
    (9)非法,源操作数是8位寄存器,目的操作数却是16位寄存器,不匹配;
    (10)非法,LEA指令得到的是16位偏移量,但目的操作数是8位寄存器;
    (11)非法,LEA指令的源操作数只能是存储器操作数;
    (12)非法,指令存在歧义,无法确定传送的是字节还是字;
    (13)非法,段寄存器不能参与算术运算;
    (14)非法,源和目的寄存器不能同为存储器操作数;
    (15)非法,在8086系统中,移位次数大于1时需要将移位次数存放到CL中;
    (16)合法;
    (17)非法,在8086系统中MUL指令没有双操作数的用法;
    (18)非法,中断类型号大于0FFH。

  • 第5题:

    分别说明下列指令的源操作数和目的操作数各采用什么寻址方式。  (1)MOV AX,2408H  (2)MOV CL,0FFH  (3)MOV BX,[SI]  (4)MOV 5[BX],BL  (5)MOV [BP+100H],AX  (6)MOV [BX+DI],’$’  (7)MOV DX,ES:[BX+SI]  (8)MOV VAL[BP+DI],DX  (9)IN AL,05H  (10)MOV DS,AX


    正确答案:(1)立即数,寄存器
    (2)立即数,寄存器
    (3)寄存器间接,寄存器
    (4)寄存器,寄存器相对
    (5)寄存器,寄存器相对
    (6)立即数,基址变址
    (7)基址变址,寄存器
    (8)寄存器,相对基址变址
    (9)直接端口寻址,寄存器
    (10)寄存器,寄存器

  • 第6题:

    分析下列指令的正误,对于错误的指令要说明原因并加以改正。 (1) MOV AH,BX (2) MOV [BX],[SI] (3) MOV AX,[SI][DI] (4) MOV MYDAT[BX][SI],ES:AX (5) MOV BYTE PTR[BX],1000 (6) MOV BX,OFFSET MAYDAT[SI] (7) MOV CS,AX (8) MOV DS,BP


    正确答案: (1)MOVAH,BX
    错误,寄存器类型不匹配,可改为MOVAX,BX
    (2)MOV[BX],[SI]
    错误,两个操作数不能都为存储单元,可改为MOVBX,[SI]或MOV[BX],SI
    (3)MOVAX,[SI][DI]
    错误,寻址方式中只能出现一个变址寄存器,可改为MOVAX,[BX][DI]。
    (4)MOVMYDAT[BX][SI],ES:AX
    错误,AX签不能有段跨越前缀,去掉ES:,改为MOVMYDAT[BX][SI],AX
    (5)MOVBYTEPTR[BX],1000
    错误,1000超出字节空间存储范围
    (6)MOVBX,OFFSETMAYDAT[SI];正确
    (7)MOVCS,AX
    错误,MOV指令CS不能做目的操作数,可改为MOVDS,AX
    (8)MOVDS,BP;正确

  • 第7题:

    说明下列指令中不合法的原因。 (1)MOV 64H, CL  (2)MOV CL, 100H  (3)MOV CL, 256  (4)MOV SS, 6180H  (5)MOV CS, WORD PTR[BX] (6)MOV DS, SS  (7)XCHG AL, 40H (8)XCHG ES, AX  (9)IN 160H, AL  (10)CMP [SI], [BX] (11)MOV DS, 1000H  (12)POP CS


    正确答案: (1)错在立即数64H作目标操作数。
    (2)和(3)错在目标操作数均超过了字节范围。
    (4)错在立即数直接传送给段寄存器。
    (5)错在把存储器操作数作数送CS, 这可能引起系统运行紊乱。
    (6)错在两个段寄存器之间直接传送。
    (7)错在用立即数作交换指令的操作数。
    (8)错在用段寄存器作交换指令的操作数。
    (9)错在当端口地址超过FFH时还在用直接寻址端口号。
    (10)错在用两个存储器操作数做比较。
    (11)错在将立即数直接传送到CS,必须先传送到某个寄存器,再经过寄存器传送到CS。
    (12)错在将存储器堆栈中的数据直接弹出到CS。

  • 第8题:

    下述指令中不改变PSW的指令是()。

    • A、MOV AX,BX
    • B、AND AL,0FH
    • C、SHR BX,CL
    • D、ADD AL,BL

    正确答案:A

  • 第9题:

    下列指令中,错误的指令是()。

    • A、AND AL,‘A’
    • B、SHL AX,4
    • C、MOV CS,AX
    • D、TEST[BX],AL
    • E、MOV DS,1234H

    正确答案:B,C,E

  • 第10题:

    问答题
    判断下列指令中哪些是错误的,并说明错的原因。 (1)MOV  BL, AX  (2)MOV  AL, BX  (3)MOV  AL, BL  (4)MOV  BP, BYTE PTR[BX]

    正确答案: (1)(2)和(4)均是错误的,因操作数类型不匹配。
    解析: 暂无解析

  • 第11题:

    问答题
    指出下列指令中源操作数的寻址方式,并说明指令操作的结果。 (1)MOV  BX, ‘BC’  (2)MOV  AX, DATA  (3)MOV  DX, [BX]  (4)MOV  AL, [BX+DI]  (5)MOV  CL, LIST[BX]  (6)MOV  AX, FILE[BX+DI+200H]  (7)DAA  (8)XLAT  (9)IN  AX, DX  (10)INT  21H

    正确答案: (1)立即寻址。操作结果是把ASCII码CB(4342H)传送到BX.
    (2)使用AX的直接寻址。操作结果是把数据段存储单元DATA1与DATA1+1的字内容复制到AX中。
    (3)寄存器间接寻址。把数据段由BX间接寻址的存储单元的字内容复制到DX中。
    (4)基址加变址寻址的寻址方式。操作结果是把由BX+DI寻址的数据段存储单元的字的内容复制到AL。
    (5)寄存器相对寻址。操作结果是把数据段由LIST+BX寻址的字节内容送CL。
    (6)相对基址加变址的寻址方式。操作结果是把由BX+DI+200H寻址的数据段存储单元的字内容送入AX。
    (7)源操作数为寄存器(AL)寻址。它是把AL中的两位BCD码加法运算的结果调整为两位压缩型十进制数,仍保留在AL中。
    (8)源操作数为寄存器(BX)相对寻址。操作结果是把由BX+AL指定的内容表格中的字节代码内容送AL。
    (9)源操作数为寄存器(DX)间接寻址。它是把DX和DX+1所指定的两个端口地址的字的内容送入AX。
    (10)源操作数为直接寻址,直接寻址地址为21H×4, 21H×4+2。操作结果是把21H×4~21H×4+3内存单元中的双字分别送到IP与CS。
    解析: 暂无解析

  • 第12题:

    问答题
    判断下列指令是否正确。若不正确,指出错误原因。 (1)MOV SI, DL (2)MOV ES, 1000H (3)LEA AX, 3006H (4)MOV [BP][DI], 0 (5)MOV [SI], [DI] (6)MOV [DI],[BX] (7)MOV [DX+SI],AL (8)MUL AL , 58H (9)MOV DS,SEG DAT (10)MOV WORD PTR [BX],-1

    正确答案: (1)指令MOV SI, DL是错误的,两个操作数类型不匹配。
    (2)指令MOV ES, 1000H是错误的,装载段寄存器时,源操作数不能为立即数。
    (3)指令LEA AX, 3006H是错误的,LEA指令的源操作数必须为内存操作数。
    (4)指令MOV [BP][DI], 0是错误的,操作数类型无法确定。
    (5)指令MOV [SI], [DI] 是错误的,不能同时出现两个内存操作数。
    (6)MOV [DI],[BX] ;错,存储器不能传存储器
    (7)MOV[DX+SI],AL; 错,DX不能用作基址寻址
    (8)MUL AL , 58H ;错,乘法指令不能用立即数
    (9)MOV DS,SEG DAT;错,立即数不能送段寄存器
    (10)MOV WORD PTR [BX],-1 ;正确 ,-1送BX指示的字单元
    解析: 暂无解析

  • 第13题:

    下列8086/8088指令中,执行速度最快的是( )。

    A.MOV AX,BX

    B.MOV AX, 1516H.

    C.MOV BYTE PTR [BX],26H

    D.MOV [2000H],AL


    正确答案:A
    解析:通用数据传送。注意,①两个段寄存器之间不能直接传送数据;②两个储存单元之间不能直接传送数据(可以用MOVS):两个操作数中必须有一个是寄存器或立即数:③立即数和段寄存器CS不能作为目的操作数。

  • 第14题:

    判断下列指令是否正确。若不正确,指出错误原因。 (1)MOV SI, DL (2)MOV ES, 1000H (3)LEA AX, 3006H (4)MOV [BP][DI], 0 (5)MOV [SI], [DI] (6)MOV [DI],[BX] (7)MOV [DX+SI],AL (8)MUL AL , 58H (9)MOV DS,SEG DAT (10)MOV WORD PTR [BX],-1


    正确答案: (1)指令MOV SI, DL是错误的,两个操作数类型不匹配。
    (2)指令MOV ES, 1000H是错误的,装载段寄存器时,源操作数不能为立即数。
    (3)指令LEA AX, 3006H是错误的,LEA指令的源操作数必须为内存操作数。
    (4)指令MOV [BP][DI], 0是错误的,操作数类型无法确定。
    (5)指令MOV [SI], [DI] 是错误的,不能同时出现两个内存操作数。
    (6)MOV [DI],[BX] ;错,存储器不能传存储器
    (7)MOV[DX+SI],AL; 错,DX不能用作基址寻址
    (8)MUL AL , 58H ;错,乘法指令不能用立即数
    (9)MOV DS,SEG DAT;错,立即数不能送段寄存器
    (10)MOV WORD PTR [BX],-1 ;正确 ,-1送BX指示的字单元

  • 第15题:

    指出下列指令中源操作数的寻址方式,并说明指令操作的结果。 (1)MOV  BX, ‘BC’  (2)MOV  AX, DATA  (3)MOV  DX, [BX]  (4)MOV  AL, [BX+DI]  (5)MOV  CL, LIST[BX]  (6)MOV  AX, FILE[BX+DI+200H]  (7)DAA  (8)XLAT  (9)IN  AX, DX  (10)INT  21H


    正确答案: (1)立即寻址。操作结果是把ASCII码CB(4342H)传送到BX.
    (2)使用AX的直接寻址。操作结果是把数据段存储单元DATA1与DATA1+1的字内容复制到AX中。
    (3)寄存器间接寻址。把数据段由BX间接寻址的存储单元的字内容复制到DX中。
    (4)基址加变址寻址的寻址方式。操作结果是把由BX+DI寻址的数据段存储单元的字的内容复制到AL。
    (5)寄存器相对寻址。操作结果是把数据段由LIST+BX寻址的字节内容送CL。
    (6)相对基址加变址的寻址方式。操作结果是把由BX+DI+200H寻址的数据段存储单元的字内容送入AX。
    (7)源操作数为寄存器(AL)寻址。它是把AL中的两位BCD码加法运算的结果调整为两位压缩型十进制数,仍保留在AL中。
    (8)源操作数为寄存器(BX)相对寻址。操作结果是把由BX+AL指定的内容表格中的字节代码内容送AL。
    (9)源操作数为寄存器(DX)间接寻址。它是把DX和DX+1所指定的两个端口地址的字的内容送入AX。
    (10)源操作数为直接寻址,直接寻址地址为21H×4, 21H×4+2。操作结果是把21H×4~21H×4+3内存单元中的双字分别送到IP与CS。

  • 第16题:

    下面格式正确的指令是()。

    • A、MOV [BX],1
    • B、MOV AL,0123H
    • C、MOV ES:PTR[CX],3
    • D、XLAT

    正确答案:D

  • 第17题:

    指出以下指令中,哪些指令是非法的,并说明为什么(80386系统)。 (1) MOV AX,12[EBX][SI*16] (2) RCR EAX,10 (3) PUSH 5678H (4) POP 1000H (5) MOV [EAX+EAX],EAX (6) MOV AL,[ESP+ESP*2] (7) MOV BL,[AX+12] (8) IMUL AL,BL,12


    正确答案: (1)非法,比例因子只能是1、2、4、8,不能是16;
    (2)合法;
    (3)合法;
    (4)非法,POP指令的目的操作数不能是立即数;
    (5)合法;
    (6)非法,ESP只能作为基址寄存器,不能作为变址寄存器;
    (7)非法,在386系统中AX不能作为基址寄存器,也不能作为变址寄存器;
    (8)合法。

  • 第18题:

    指出下列指令的错误(1)SUB AH,BX(2)ADD OAH,BL(3)MOV C3,AX(4)MOV AX,[SI][DI](5)MOV BYTEPTR[BX],999


    正确答案: (1)类型不匹配
    (2)立即数不能作目的操作数
    (3) CS不能作目的操作数
    (4)SI和DI不能一起使用
    (5)类型不匹配

  • 第19题:

    已经定义数据段如下: DATASEGMENT NUM=56 X DB NUM Y DB 27 Z DW 148 DATAENDS 指出下列指令中的错误: (1)MOV Y,X (2)MOV BL,04B8H (3)MOV AL,Z (4)MOV [BX],3 (5)MOV [BX],[DI] (6)MOV DS,DATA (7)MOV NUM,AX (8)MOV ES,DS (9)MOV AX,FLAGS (10)MOV CS,AX


    正确答案: (1)指令MOV Y,X同时出现了两个存储器操作数。
    (2)指令MOV BL,04B8H操作数类型不匹配(04B8H是16位立即数,BL是8位寄存器)。
    (3)指令MOV AL,Z操作数类型不匹配(Z是16位操作数,BL是8位寄存器)。
    (4)指令MOV [BX],3操作数类型不能确定。
    (5)指令MOV [BX],[DI]出现了两个存储器操作数。
    (6)指令MOV DS,DATA不能把立即数装入段寄存器。
    (7)指令MOV NUM,AX立即数不能用作目的操作数。
    (8)指令MOV ES,DS不能在段寄存器之间直接传输。
    (9)指令MOV AX,FLAGS中,FLAGS寄存器只能隐含在少量指令中使用。
    (10)指令MOV CS,AX中,CS寄存器不能用作目的操作数。

  • 第20题:

    若有BUF DW 1,2,3,4。则可将数据02H取到AL寄存器中的指令是:()。

    • A、MOV  AL,BYTE PTRBUF+1
    • B、MOV  AL,BYTE PTRBUF+2
    • C、MOV  AL,BYTE PTRBUF+3
    • D、MOV  AL,BYTE BUF2

    正确答案:B

  • 第21题:

    问答题
    指出下列指令的错误(1)SUB AH,BX(2)ADD OAH,BL(3)MOV C3,AX(4)MOV AX,[SI][DI](5)MOV BYTEPTR[BX],999

    正确答案: (1)类型不匹配
    (2)立即数不能作目的操作数
    (3) CS不能作目的操作数
    (4)SI和DI不能一起使用
    (5)类型不匹配

    解析: 暂无解析

  • 第22题:

    问答题
    已经定义数据段如下: DATASEGMENT NUM=56 X DB NUM Y DB 27 Z DW 148 DATAENDS 指出下列指令中的错误: (1)MOV Y,X (2)MOV BL,04B8H (3)MOV AL,Z (4)MOV [BX],3 (5)MOV [BX],[DI] (6)MOV DS,DATA (7)MOV NUM,AX (8)MOV ES,DS (9)MOV AX,FLAGS (10)MOV CS,AX

    正确答案: (1)指令MOV Y,X同时出现了两个存储器操作数。
    (2)指令MOV BL,04B8H操作数类型不匹配(04B8H是16位立即数,BL是8位寄存器)。
    (3)指令MOV AL,Z操作数类型不匹配(Z是16位操作数,BL是8位寄存器)。
    (4)指令MOV [BX],3操作数类型不能确定。
    (5)指令MOV [BX],[DI]出现了两个存储器操作数。
    (6)指令MOV DS,DATA不能把立即数装入段寄存器。
    (7)指令MOV NUM,AX立即数不能用作目的操作数。
    (8)指令MOV ES,DS不能在段寄存器之间直接传输。
    (9)指令MOV AX,FLAGS中,FLAGS寄存器只能隐含在少量指令中使用。
    (10)指令MOV CS,AX中,CS寄存器不能用作目的操作数。
    解析: 暂无解析

  • 第23题:

    问答题
    说明下列指令中不合法的原因。 (1)MOV 64H, CL  (2)MOV CL, 100H  (3)MOV CL, 256  (4)MOV SS, 6180H  (5)MOV CS, WORD PTR[BX] (6)MOV DS, SS  (7)XCHG AL, 40H (8)XCHG ES, AX  (9)IN 160H, AL  (10)CMP [SI], [BX] (11)MOV DS, 1000H  (12)POP CS

    正确答案: (1)错在立即数64H作目标操作数。
    (2)和(3)错在目标操作数均超过了字节范围。
    (4)错在立即数直接传送给段寄存器。
    (5)错在把存储器操作数作数送CS, 这可能引起系统运行紊乱。
    (6)错在两个段寄存器之间直接传送。
    (7)错在用立即数作交换指令的操作数。
    (8)错在用段寄存器作交换指令的操作数。
    (9)错在当端口地址超过FFH时还在用直接寻址端口号。
    (10)错在用两个存储器操作数做比较。
    (11)错在将立即数直接传送到CS,必须先传送到某个寄存器,再经过寄存器传送到CS。
    (12)错在将存储器堆栈中的数据直接弹出到CS。
    解析: 暂无解析