微机原理判断指令是否正确【见的多了,你就懂了~】
1. MOV 1000H , BX ;指令错误,原因:立即数不能作为目标操作数。
2. MOV BX , CL ;指令错误,原因:字长不一致。
3. INC [BX] ;指令错误,原因:需指定操作数存储器操作字。
4. MOV [BX] , [6014H] ;指令错误,原因:不能同时为存储器操作字。
5. ROL AL, 2 ;指令错误,原因:循环次数超过 1 用 CL 寄存器。
6. MOV CS, AX;指令错误,原因:CS是代码段寄存器,这个寄存器保存的是代码段的首地址,并且这个寄存器只能由系统管理,用户不可更改。原因也可参照下列要求第五条。
7. MOV AL, [SI+DI];指令错误,原因:同时出现了两个变址寄存器。在基址变址相对寻址中,基址寄存器只能是BX/BP,变址寄存器只能是SI/DI。同理: MOV AL, [BX+SI]
正确。
8. MOV DS,0100H;错误。源操作数是立即数时,目的操作数不能是段寄存器。
9. OUT 310H, AL;错误。端口直接寻址的范围应在0~ FFH之间。
10. MOV ES:[BX+ DI],AX ;正确。
11. MOV SS:[BX+SI+ 100H],BX ;正确。
12. ADD [SI], 20H ;错误,目的操作数类型不明确。
13. PUSH 2000H;错误。堆栈指令的操作数不能是立即数。
14. INC [DI] ;错误目的操作数类型不明确。
15. OUT BX, AL;错误。端口间接寻址的寄存器只能是DX寄存器。
16. XCHG CX, DS ;错误。交换指令中不能出现段寄存器。
17. POP AL;错误。堆栈指令的操作数只能是字操作数(即1 6位操作数)。
18. ADD BYTE PTR[BP],256 指令错。ADD指令要求两操作数等字长。
19. MOV DATA[SI],ES:AX 指令错。源操作数形式错,寄存器操作数不加段重设符。
20. JMP BYTE PTR[BX] 指令错。转移地址的字长至少应是1 6位的。
21. OUT 230H,AX 指令错。对输人输出指令,当端口地址超出8位二进制数的表达范围(即寻址的端口超出256个)时,必须采用间接寻址DX。
22. MOV DS,BP 指令正确 。
23. MUL 39H 指令错。MUL指令不允许操作数为立即数。
24. SBB DX , 10H 对。
25. INC [BP] 错 没有给出操作数的类型。
指令对操作数的要求。
- MOV指令中两个操作数字长必须相同。
- 两个操作数不能同时为存储器操作数。若要在两个存储器单元之间进行数据传送,需要两条MOV指令实现。(即用一个寄存器做中间数传参)
- 不能用立即数直接给段寄存器赋值。
- 两个操作数不能同时为段寄存器。
- 一般情况下,指令指针IP及代码段寄存器CS的内容不通过MOV指令修改,即他们不能作为目标操作数,但可以作为源操作数。
- 虽然许多指令的执行对状态寄存器FLAGS的标志位产生影响,但通常情况下,FLAGS整体不能作为操作数。