8086汇编——课堂笔记整理2
查表指令 XLAT
MOV BX,OFFSET TABLE ;table的有效地址(table的首地址,数组的首地址)存入BX
MOV AL,4;要查表的第5个
XLAT ;隐含参数1.指定字节表的首地址存入BX
2.指定index存入AL
3.result存入AL
IN OUT
port : 32H,DX
数据:AX,AL
IN:external I/O device ->AL,AV,EAX
根据端口号的长度判断
IN AL,20H ;20H是I/O port ID,port ID=8bit,将port ID 20H 设备中的数据->AL
IN AX,48H ;48H 8bit,将port ID 48H 设备中的数据->AX
MOV DX,3FCH ;3FCH是I/O port ID,port ID>8bit
IN AX,DX ;再将data从(DX)端口输入到AX中
OUT:AL,AX,EAX->external I/O device
OUT 32H,AX ;将AX中数据->32H port
MOV DX,400H ;将port ID存入DX
MOV AL,86H ;将数据存入AL
OUT DX,AL ;将AL中的data输出到端口号=(DX)
MOVSX MOVZX
MOVSX/MOVZX reg16/32,reg/mem 8/16 ;MOVSX 有符号扩展 MOVZX 0扩展
if (CL)=0ABH;
MOVSX AX CL;(AX)=0FFABH
MOVZX AX CL;(AX)=00ABH
if (CL)=78H;
MOVSX AX CL;(AX)=0078H
MOVZX AX CL;(AX)=0078H
ADD
ADD DST,SRC
CF 无符号数 借位进位 OF 有符号数溢出 ZF 结果为0 PF AF SF
reg,imm/reg/mem
mem,reg/imm
无
mem.mem
imm,....
dst,src 等长
ADD ;半加
ADC DST,SRC ;全加 CF
INC DST ;自加 无CF 地址自加,无进位,溢出循环
INC MEM/REG ;只对地址,无IMM
e.g.1
c:
unsigned short b=7,c;
a=b++;
c=++b;
assembly:
a WORD ?
b WORD 7
c WORD ?
MOV AX,b
MOV a,AX ;不能 MOV a,b (MOV mem,mem)
INC WORD PTR b (PTR 强制类型转换)
INC WORD PTR b
MOV AX,b
MOV c,AX
e.g.2
32bit DX AX
+ BX CX
DX AX
ADD AX,CX ;半加产生进位存入CF
ADC DX,BX ;全加加上CF中产生的进位
e.g.3
INC AX
ADC AX,0 ;防止进位没加
e.g.4_1
LEA BX,ARRAY ;将ARRAY的有效地址存入BX
MOV AL,[BX] ;寄存器间接寻址
.......
INC BX ;地址自加,表示数组的下一个
e.g.4_2
MOV BX,0 ;数组的index=0
MOV AL,ARRAY[BX] ;寄存器相对寻址
......
INC BX ;数组的index++,数组的下一个
e.g.5
INC AX ;DX:AX中存的是32bit
ADC DX,0
错误 INC CF不变
改为
ADD AX,1
ADC DX,0
SUB SBB
SUB dst,src ;无CF
dst=dst-src
e.g.
SUB AX,CX;减 被减数低8位,CF改变
SBB DX,BX;减 被减数高8位,减CF
DEC DST ;自减,无CF
NEG DST;取补 DST=0-DST,改变CF
CMP DST,SRC ;DST-SRC,DST不改变
unsigned:ZF=0 DST=SRC
CF=0 DST>=SRC
CF=1 DST<SRC
signed: ZF=0 DST=SRC
OF=SF DST>=SRC 结果是正数 SF:数的正负 -=1,+=0
OF<>SF DST<SRC 结果是负数 OF=overflow flag SF=sign flag