指出下列指令的错误! 急急急急急急急急急急急急急急急急急急急急急急急急急急急急急

1.MOV CX ,DL
2.XCHG[SI],3
3.POP CS
4.MOV IP,AX
5.SUB[SI],[DI]
6.PUSH DU
7.OR BL,DX
8.AND AX,DX
9.MUL 16
10.AND 7FFH,AX
11.DIV 256
12.ROL CX,BL
13.MOV ES, 1234H
14.MOV CS ,AX
15.SUB DL,CF
16,ADC AX,AL
17.MOV AL,300
18.JDXZ NEXT
请按顺序说一下以上的指令错误的地方。谢谢了! 急用!

1.MOV CX ,DL ;操作数长度类型不匹配
2.XCHG[SI],3 ;XCHG指令不允许操作数是立即数
3.POP CS ;pop指令不允许操作数是代码段段寄存器CS
4.MOV IP,AX ;ip不能作为目的操作数
5.SUB[SI],[DI] ;SUB指令不允许两个操作数都是寄存器直接寻址
6.PUSH DU ;PUSH指令不允许操作数是标识符
7.OR BL,DX ;操作数长度类型不匹配
8.AND AX,DX ;正确
9.MUL 16 ;MUL指令要求乘数有明确的长度,立即数没有明确长度(长度指字节、字、双字等)
10.AND 7FFH,AX ; 目的操作数不能是立即数
11.DIV 256 ;DIV指令要求除数有明确的长度
12.ROL CX,BL ;移位指令的源操作数只能是CX、CL、1之一
13.MOV ES, 1234H ;不能直接给段寄存器赋立即数
14.MOV CS ,AX ;正确
15.SUB DL,CF ;SUB指令不允许标识符直接作为源操作数
16,ADC AX,AL ;操作数长度不匹配
17.MOV AL,300 ;AL是8位寄存器,最大只能装入255这样的无符号数,300>255,源操作数超出范围。
18.JDXZ NEXT ;汇编语言中没有JDXZ指令。
温馨提示:答案为网友推荐,仅供参考
第1个回答  2009-03-17
1 长度不相等 dl改为dx
2 立即数不能直接付给si 把3放入寄存器中
3 cs为段寄存器 不能用于pop 改为通用寄存器 如 ax
4 ip不能作为目的造作数 改为cx
5 si di之间不能直接传递 通过通用寄存器传递 如ax
6 du不是寄存器 改为dx
7 长度不相等 bl改为bx
8
9 立即数不能直接用在单操作指令中
10 立即数不能做目的操作数
11 立即数不能直接用在单操作指令中
12 长度不相等 bl改为bx
13 es为段寄存起 不能存放立即数 改为通用寄存器
14
15 cf不是寄存器
16 长度不相等
17 300超出范围 al改为ax
18
8 14 18 没有错本回答被提问者采纳
第2个回答  2009-03-17
1
2 源址寄存器不能与操作数直接进行交换 必需讲操作数存于寄存器中才可以
3 CS 代码段寄存器 不能做堆栈存储
4 IP是一个八位寄存器 它只是堆栈中使用 或者存放指向下一个目的的地址 AX是16位寄存器 不能从大寄存器中取数存入小寄存器中
5 源和目的 不能直接进行四则操作 都是变化的
6
7 返回值放在BL中 八位的存储空间不足
8
9
10 前面是立即数 没有存储位置 一般逻辑运算结果都放在第一个寄存器中 第一个不能是立即数或者比后面寄存器小的寄存器
11
12
13 ES 附加段 不能放立即数
14
15 CF 进位标志 不能与DL寄存器中数 进行四则
16
17 300 大于255 超过八位 村属空间不足
18

我会的都说了 我是刚接触汇编
相似回答