第1个回答 2009-12-25
PUSH POP后必须是16位操作数
PUSH AX
SHR SHL SAR SAL移动一位可以直接SHR DX,1,移动多位就要用CL指定位数
MOV CL,4
SHR DX,CL
外设端口有2种寻址方法,直接寻址的话那么端口地址在00H~0FFH之间;寄存器寻址的话就是0000H~0FFFFH,地址必须放入DX/DL。你这个380H超过了FFH,就得用寄存器寻址方式,也就是端口地址与内存统一编址方式
MOV DX,380H
OUT DX,AX
ADD指令要求2个操作数字长一致
ADD AX,BX
POP指令不能对段寄存器操作
POP AX
MOV也一样要求字长一致
MOV CX,3300H
P.S. 楼下的,你说错了哦!MOV指令时不允许段寄存器之间的赋值,以及使用立即数给段寄存器赋值!
比如:MOV CS,DS 以及 MOV CS,O896H 都是错的
但是段寄存器是可以作为MOV的目的操作数的,不然你程序开始怎么设定段地址?不信你可以看看指令说明
PUSH POP使用段地址的确是非法的!
。。。果然,我错了。长见识了!回答改了!楼主也别搞错了!