8086指令系统

计算机只能识别二进制代码,所以机器指令是由二进制代码组成。为了便于人们使用而采用汇编语言来编写程序。
汇编语言是一种符号语言,它用助记符来表示操作码,用符号地址来表示操作数或操作数地址。它与机器指令一一对应的。


  1.14个16位寄存器,8个8位寄存器

  2.8086/8088七种寻址方式

  3.8086/8088各种指令

一.8086/8088寄存器组

       8位 8位  16位

       AH  AL   AX

       BH  BL   BX      数据寄存器

       CH  CL   CX

       DH  DL   DX

                                        通用寄存器

 

      SP    堆栈指针 指针寄存器

      BP    基址指针   

      SI    源地址   变址寄存器

      DI    目的地址

 

IP       指令指针              控制寄存器

FLAG     标志寄存器

 

CS        代码段

DS        数据段

SS        堆栈段               段寄存器

ES        附加段

AX 累加器、BX 基址寄存器、CX 控制循环次数 CL移位、DX 32位乘除法,余数
1.       通用寄存器

(1)       数据寄存器:4个16位寄存器和8个8位寄存器

AX,BX,CX,DX   AH,AL,BH,BL,CH,CL,DH,DL

        (2)变址和指针寄存器 

 SP,BP,SI,DI。16位的

         变址和指针寄存器主要用于存放某个单元地址的偏移,或某组存储单元开始地址的偏移。  

 

2.段寄存器

  CS,DS,SS,ES

标志寄存器
 15  14  13  12  11  10  9   8  7  6  5  4  3  2  1   0
                         O    D  I   T  S  Z     A      P       C
 
CF进位标志位:         主要用于运算是否产生进位或借位,进位置1,其他情况是0
PF奇偶标志:               用于反映运算结果中1的个数,如果1的个数为偶数,则OF被置1,否则清零
AF 辅助进位标志位  在字节和字操作,低半字节向高字节进位或进位,辅助进位标志位AF被置1,否则AF清0 
ZF零标志位:        用于反映运算结果是否为0,如果运算结果为0,则ZF置1,否则0
SF符号标志                  用于反映运算结果的符号位,运算结果最高位位1,则SF被置1则0

TF追踪标志                TF置1后,CPU进入单步方式
IF中断允许标志         IF为1时,CPU能够响应外部的可屏蔽中断请求,
                            IF为0时,CPU能够不响应外部的可屏蔽中断请求
 DF方向标志              DF为1时,串操作指令按减方式,改变有关的存储器指针值
                            DF为0时,串操作指令按加方式,改变有关的存储器指针值
OF溢出标志位          用于反映有符号加减运算是否溢出,如果超出了8位或16位的表示范围,称为溢出。
                  如溢出,则OF置   1,  否则置0(两个正数相加得出负数或者两个负数两家得出正数) 
  
mov  eax,ebx   //传送指令
xchg eax,ebx   //交换指令
lea  eax,dword ptr [ecx] //取ecx地址下的内容
clc  //CF进位标志清0
stc  //CF进位标志置1
cmc  //取反,CF进位标志位 
cld  //DF方向标志清0
std  //DF方向标志置1
add eax,eax          //加法指令
adc eax,eax+CF   //带进位加法
inc eax                 //加1操作
sub eax,eax         /减法指令
sbb eax,eax         //带借位减法
dec eax               //减1
neg eax              //取反,0-eax=eax
cmp eax,eax      //相减,不回送结果
mul eax             //乘法
imul eax            //有符号乘法
div  eax            //除法
idiv eax            //有符号除法
cbw                 //字节转换字指令al扩展ah
cwd                 //子转换双字,AX扩展到DX
rcr                   //带进位循环右移
loop eax         //循环啊

lodsb              //esi地址下的内容以字节传送到eax
lodsw             //esi地址下的内容以字传送到eax
stosb             //eax的内容以字节传送到edi
stosw            //eax的内容以字传送到edi
stosd             //eax的内容以双字传送到edi
cld               //方向标志位清0
scasb           //串字节扫描
scasw         //串字扫描
lodsd          //esi地址下的内存传送到eax
cmpsd        //cmps    dword ptr [esi], dword ptr es:[edi]

sal,shl      //算数左移和逻辑左移,相当于乘以2
sar          //算数右移          ,相当于除以2  计算方法是2进制转16进制的格式
shr          //逻辑右移          ,相当于除以2  
rol          //循环左移
ror          //循环右移
rcl          //带进位循环左移



十进制左移一位
123左移一位1230,相当于乘于10
十进制右移一位
123右移一位12,相当于除于10

二进制左移一位
0010左移一位0100,相当于乘于2
    mov eax,3
    shl eax,1  

二进制右移一位
0010右移一位0001,相当于除于2
   mov eax,4
   shr eax,4  //sar

cdq 该指令把edx扩展为eax的高位,也就是说变为64位。
push eax   //入栈,-4
pop  eax   // 出栈   +4
pushf       //把标志寄存器的内容压入堆栈-4
popf        //把堆栈+4恢复到标志寄存器
popad     //寄存器依次压入堆栈保存
popad     //寄存器弹出堆栈恢复

/*
push 1
popf
*/cf=1
       
/*
0000111111010101
push 0fd5h
popf //标志寄存器全置1
*/ 










and eax,eax //与,两个都为真,运算结果才是真,自身与自身与,CF清零
or  eax,eax //或,有一个为真,运算结果就为真,
xor eax,eax //异或,相异才为真。
test eax,eax //测试,and相似



逻辑运算(按位运算)

or eax,ebx

if (x==5)||(y==5)  //逻辑或,如果x==5,或者x,y==5,表达式为真

如果你有人民币or信用卡,那么你可以付账,不必既有现金又有信用卡,只需要有一样你都可以付账了,两样都有最好了!
逻辑加法(“或”运算)
逻辑加法通常用符号“+”或“∨”来表示。逻辑加法运算规则如下:  
0+0=0, 0∨0=0   
0+1=1, 0∨1=1  
1+0=1, 1∨0=1  
1+1=1, 1∨1=1   
从上式可见,逻辑加法有“或”的意义。也就是说,在给定的逻辑变量中,A或B只要有一个为1,其逻辑加的结果为1;两者都为1则逻辑加为1。

and eax,ebx

if(x==5)&&(y==5)  //逻辑与,如果两边都为真,表达式才为真
逻辑乘法(“与”运算)
逻辑乘法通常用符号“×”或“∧”或“·”来表示。逻辑乘法运算规则如下: 
0×0=0, 0∧0=0, 0·0=0   
0×1=0, 0∧1=0, 0·1=0  
1×0=0, 1∧0=0, 1·0=0  
1×1=1, 1∧1=1, 1·1=1   
不难看出,逻辑乘法有“与”的意义。它表示只当参与运算的逻辑变量都同时取值为1时,其逻辑乘积才等于1。
not eax
逻辑否定(非运算)
逻辑非运算又称逻辑否运算。其运算规则为: 
0=1 (非0等于1) 
1=0 (非1等于0)

xor eax,ebx
异或逻辑运算(半加运算)
异或运算通常用符号"⊕"表示,其运算规则为:  
0⊕0=0 0同0异或,结果为0   
0⊕1=1 0同1异或,结果为1   
1⊕0=1 1同0异或,结果为1   
1⊕1=0 1同1异或,结果为0   
即两个逻辑变量相异,输出才为1

  • 2
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值