两个内存单元间的数据传送需要用两条mov指令实现,在这里用循环程序指令来完成200个单元数据的传输。
MOV SI,OFFSET MEM1
MOV DI,OFFSET MEM2
MOV CX 200
NEXT: MOV AL,[SI]
MOV [DI],AL
INC SI
INC DI
DEC CX
JNZ NEXT
HLT
交换指令 XCHG
XCHG OPRD1,OPRD2 将OPRD1的内容与OPRD2交换
交换指令的要求
(1) 源操作数和目标操作数可以是寄存器或存储器,但不能同时是存储器
(2) 不能为段寄存器操作数,即段寄存器的内容不能参加交换
(3) 两个操作数字长必须相同,可以使字节交换,也可以是字交换
XCHG AX,BX
XCHG CL,DL
查表转换指令XLAT
X DW 1122H,3344H,5566H,7788H
LEA BX,X
MOV AL,03H
XLAT
结果AL为33H。
XLAT作用:将((BX)+(AL))送给(AL)----简单:将BX为首 地址的, 偏移地址为AL的内容送给AL。
在运行XLAT之前,AL=3 BX=(X的首 地址)。
这时BX+AL就是33....为什么?注意高 地址放在下面。
也就是。
22------BX指向这里。
11。
44。
33----- 偏移地址AL为3的位置就是这里。
XLAT X。
在执行XLAT之前,先将X的 地址送给BX,偏移次数送给AL。
XLXT即为查找指令
输入(in)/输(out)出指令
输入指令
IN AL,DX ;从地址为3B0H的端口输入一个字节到AL
IN AX,3FH ;从地址为3FH的端口输入一个字节到AX
输出指令
OUT port,acc ;直接寻址,port为8位立即数表示的端口地址
OUT DX,acc ;间接寻址,16位端口地址由DX给出
采用间接寻址的IN/OUT指令只能用DX寄存器作为间址寄存器。
去偏移地址指令
LEA BX,BUFFER ;将内存单元BUFFER的偏移地址送BX
MOV AL,[BX] ;取出BUFFER 中的第一个数据送AL
MOV AH,[BX+1] ;取出BUFFER 中的第二个数据送AL
The CBW (convert byte to word) instruction extend s the sign bit of AL into the AH register. This preserves the number 's sign:
.DATA
byte_val SBYTE -101
.CODE
mov al, byte_val ; AL = 9Bh
cbw ; AX = FF9Bh
Note that both 9Bh and FF9Bh both equal decimal -101, the only difference is the storage size.
The CWD (convert word to doubleword) instruction extends the sign bit of AX into the DX register:
.DATA
word_val SWORD -101 ; FF9Bh
.CODE
mov ax, word_val ; AX = FF9Bh
cwd ; DX:AX = FFFFh:FF9Bh
The CDQ (convert doubleword to quadword) instruction extends the sign bit of EAX into the EDX register:
.data
dword_val SDWORD -101
.code
mov eax, dword_val ; EAX = FFFFFF9Bh
cdq ; EDX:EAX = FFFFFFFh:FFFFFFF9Bh