8086CPU相关汇编语言的简单概述

  • 1.寄存器
    • 通用寄存器
    • 8806CPU给出物理地址的方法
    • 段寄存器
      • 修改CS,IP的指令
  • 2.寄存器(内存访问)
    • 栈机制
  • 3.[BX]和loop指令
    • [BX]
    • loop
    • 段前缀
  • 4.包含多个段的程序
  • 5.更灵活的定位内存地址的方法
    • and和or指令
    • 大小写转换问题
    • [bx+idata](idata[bx])
    • SI和DI
    • [bx+SI],[bx+DI]
  • 6.数据处理的两个基本问题
    • bx,si,di和bp
    • 汇编语言中数据位置的表达
    • 寻址方式
    • 指令要处理的数据有多长
    • div指令
    • 伪指令dd
    • dup
  • 7.转移指令的原理
    • 操作符offset
    • jmp指令
      • 依据位移进行转移的jmp指令
      • 转移的目的地址值指令中的jmp指令
      • 转移地址在寄存器中的jmp指令
      • 转移地址在内存中的jmp指令
    • jcxz指令
  • 8.CALL和RET指令
    • ret和retf

1.寄存器

8086CPU有14个寄存器:AX,BX,CX,DX,SI,DI,SP,BP,IP,CS,SS,DS,ES,PSW

通用寄存器

AX,BX,CX,DX
存放一般性的数据,可以分为高8位和第8位

8806CPU给出物理地址的方法

物理地址=段地址×16+偏移地址

段寄存器

CS,DS,SS,ES
CS和IP是是两个最关键的寄存器
CS:代码段寄存器 IP:指令指针寄存器
读取一条指令后,IP值会自动增加

修改CS,IP的指令

jmp 段地址:偏移地址
例如 jmp 2AE3:3 执行后CS = 2AE3H ,IP = 0003H

2.寄存器(内存访问)

8086CPU中有一个DS寄存器,通常用来存放要访问数据的段地址,8086不支持将数据直接送入段寄存器的操作

栈机制

8086CPU中,有两个寄存器,段寄存器SS和寄存器SP,栈顶的段地址存放在SS中,偏移地址存放在SP中。**任意时刻,SS:SP指向栈顶元素。**push指令和pop指令执行时,CPU从SS和SP中得到栈顶的地址

3.[BX]和loop指令

[BX]

mov ax,[bx] 功能:bx中存放的数据作为一个偏移地址EA,段地址SA默认在ds中,将SA:EA处的数据送入ax中

loop

格式是:loop 标号,CPU执行loop指令的时候,要进行两步操作,①(cx)= (cx)-1 ②判断cx中的值,不为零则转至标号处执行程序,如果为零则向下执行

段前缀

用于显式地指明内存单元的段地址的“ds:”,“cs:”等,称为段前缀
例如:mov ax,ds:[bx]

4.包含多个段的程序

DATAS SEGMENT;此处输入数据段代码
DATAS ENDSSTACKS SEGMENT;此处输入堆栈段代码
STACKS ENDSCODES SEGMENTASSUME CS:CODES,DS:DATAS,SS:STACKS
START:MOV AX,DATASMOV DS,AX;此处输入代码段代码MOV AH,4CHINT 21H
CODES ENDSEND START
dw 0,1,2,3,4,5,6,7,8,

dw即“define word”含义是定义字型数据,一个字型数据占两个字节

5.更灵活的定位内存地址的方法

and和or指令

(1)and指令:逻辑与指令,按位进行与运算。可以将操作对象的相应位设为0,其他位不变。
例如:将al的第六位设为0 and al,10111111B
(2)or指令:逻辑或指令,按位进行或运算。可以将操作对象的相应位设为1,其他位不变。
例如:将al的第六位设为0 or al,01000000B

大小写转换问题

小写字母的ASCII码值比大写字母大20H。
简便方法:一个字母,不管它原来是大写还是小写,将它的二进制码第5位置置0,它就变成大写字母;第5位置置1,就变成小写字母

[bx+idata](idata[bx])

我们在前面用[bx]的方式来指明一个内存单元,现在可以用[bx+idata]更灵活的表示
例如:mov ax,[bx+200]

SI和DI

si和di是8086CPU中和bx功能相近的寄存器,si和di不能分成两个8位寄存器来使用

[bx+SI],[bx+DI]

比 [bx+idata]更加灵活

6.数据处理的两个基本问题

bx,si,di和bp

①在8086CPU中,真有这4个寄存器可以用在[…]中来进行内存单元的寻址
②在[…]中,这4个寄存器可以单个出现,或只能以4中组合出现:bx和si,bx和di,bp和si,bp和di
③在[…]中使用bp,而在指令中没有显式地给出段地址,那么段地址默认就在ss中

汇编语言中数据位置的表达

①立即数:对于直接包含在机器指令中的数据(执行前在CPU的指令缓冲器中)
②寄存器:指令要处理的数据在寄存器中
③段地址(SA)和偏移地址(EA):指令要处理的数据在内存中 ,用[X]的格式给出

寻址方式

指令要处理的数据有多长

8086CPU可以处理两种尺寸的数据,byte和word,在指令中要指明是字操作还是字节操作
①通过寄存器的名字来指明
字操作:mov ax,1000
字节操作:mov al,1000
②在没有寄存器名的情况下,用操作符X ptr指明内存单元的长度,X是byte或word
inc word ptr 【bx】
inc byte ptr 【bx】

div指令

①除数:有8位和16位两种,在一个reg或内存单元中
②被除数:默认放在AX或DX和AX中,如果除数为8位,被除数则为16位,默认在AX中存放;如果除数为16位,被除数则为32位,在AX和DX中存放,DX存放高16位,AX存放低16位
③结果:如果除数为8位,则AL存储除法操作的商,AH存储除法操作的余数;如果除数为16位,则AX存储除法操作的商,DX存储除法操作的余数

伪指令dd

前面用db和dw定义字节型数据和字型数据。dd用来定义dword(double word,双字)型数据

dup

是一个操作符 ,和dd,dw,db一样。dup用来进行数据的重复
例如:db 3 dup(0),定义了3个字节,都为0
db 3 dup(0,1,2),定义了9个字节0,1,2,0,1,2,0,1,2

7.转移指令的原理

可以修改IP,或同时修改CS和IP的指令系统统称为转移指令。概括地讲,转移指令就是可以控制CCPU执行内存中某处代码的指令。
只修改IP,称为段内转移
同时修改IP和CS,称为段间转移
根据对IP的修改范围不同,段内转移又分为:短转移和近转移

  • 短转移IP的修改范围为-128~127
  • 近转移的IP修改范围为-32768~32767

总体上可以分为以下几类:

  1. 无条件转移指令(如:jmp)
  2. 条件转移指令
  3. 循环指令
  4. 过程
  5. 中断

操作符offset

功能:取得标号的偏移地址

CODES SEGMENTASSUME CS:CODES
START:mov ax,offset start  ;相当于mov ax,0
S:mov ax,offset s        ;相当于mov ax,3CODES ENDSEND START

jmp指令

依据位移进行转移的jmp指令

段内短转移:jmp short 标号(转到标号处执行指令)
段内近转移:jmp near 标号
实际上,CPU在执行jmp指令的时候并不需要转移的目的地址。它包含的是转移的位移。这个位移是编译器根据汇编指令中的“标号”计算出来的。

转移的目的地址值指令中的jmp指令

jmp far ptr 标号 实现的是段间转移,有称为远转移
功能如下: (CS)=标号所在段的段地址 (IP)=标号所在段的偏移地址

转移地址在寄存器中的jmp指令

指令格式:jmp 16位 reg
功能:(IP)=(16位reg)

转移地址在内存中的jmp指令

  1. jmp word ptr 内存单元地址(段内转移)
    功能:从内存单元地址处开始存放着一个字,是转移的目的偏移地址
    内存单元地址可以用寻址方式(见上文)的任一格式给出
  2. jmp dword ptr 内存单元地址(段间转移)
    功能:从内存单元地址处开始存放着两个字,高地址处的字是转移的目的段地址,低地址处的字是转移的目的偏移地址
    (CS)=(内存单元地址+2)
    (IP)=(内存单元地址)

jcxz指令

jcxz指令为有条件指令,所有的有条件转移指令都是短转移。
指令格式:jcxz 标号(如果(CX)=0,转移到标号处执行)
操作:当(CX)=0是,(IP)=(IP)+8位位移
8位位移=标号处的地址-jcxz指令后的第一个字节的地址
8位位移的范围为:-128~127,用补码表示
8位位移由编译程序在编译时算出

当(CX)≠0时,什么也不做(程序向下执行)

8.CALL和RET指令

ret和retf

ret指令用栈中的数据,修改IP的内容,从而实现近转移;(相当于pop IP)
retf指令用栈中的数据,修改CS和IP的内容,从而实现远转移。(相当于pop IP pop CS)

未完待续~

8086CPU相关汇编语言的简单概述相关推荐

  1. SpringSecurity的简单概述以及配置SpringSecurity的默认登录页面

    SpringSecurity的简单概述 是什么:SpringSecurity融合Spring技术栈,提供JavaEE应 用的整体安全解决方案:提供全面的安全服务 有什么用:可以进行身份验证,就是证明你 ...

  2. 计算机底层:计算机层次结构(高级语言到低级语言的简单概述)

    计算机底层:计算机层次结构(高级语言到低级语言的简单概述): 操作系统可以有效地分配任务给cpu,控制硬件进行搞效率地使用等等,创造操作系统主要是为了满足两大需求:提高资源利用率.增强计算机系统性能. ...

  3. 垃圾回收器(简单概述)

    垃圾回收器(简单概述) GC分类与性能指标 垃圾回收器概述 垃圾收集器没有在规范中进行过多的规定,可以由不同厂商.不同版本的JVM来实现. 由于JDK的版本处于高速迭代过程中,因此Java发展至今衍生 ...

  4. java虚拟机-简单概述(五月的仓颉)

    1  java的简单概述 java版本介绍 1.Java SE(标准版),主要活跃在桌面领域,主要包含了Java API组件. 2.Java EE(企业版),活跃在企业级领域,除了包含Java API ...

  5. XSS漏洞简单概述--UGa

    XSS漏洞简单概述–UGa 个人笔记向,请多指点 *简介 XSS作为OWASP TOP 10之一,XSS被称为跨站脚本攻击(Cross-site scripting) ,本来应该缩写为CSS,但是由于 ...

  6. Unity Mecanim动画系统 之 IK(Inverse Kinematics即反向动力学)的相关说明和简单使用

    Unity Mecanim动画系统 之 IK(Inverse Kinematics即反向动力学)的相关说明和简单使用 目录 Unity Mecanim动画系统 之 IK(Inverse Kinemat ...

  7. 关于“7个好习惯”的简单概述

    Title: 关于"7个好习惯"的简单概述 Content: 同事发给的,共勉. 下面是关于"7个好习惯"的简单概述,与大家分享一下,希望对大家.对我们的团队有 ...

  8. 关于 Oracle ACFS 相关知识的简单学习

    作者 | JiekeXu 来源 | JiekeXu之路(ID: JiekeXu_IT) 转载请联系授权 | (微信ID:xxq1426321293) 大家好,我是 JiekeXu,很高兴又和大家见面了 ...

  9. Hadoop的简单概述以及架构

    Hadoop的简单概述以及架构 1.hadoop概述:hadoop是一个适合海量数据分布式存储和分布式计算的平台. 2.hadoop是一个统称,hadoop主要包含三大组件: (1)hdfs:是一个分 ...

最新文章

  1. 下一版本Windowsreg; CE 开发工具Smart Device Extensions for Microsoft Visual Studioreg; .NET...
  2. 【iOS】iOS之Button segue弹出popOver消除(dismiss)问题
  3. 重写equals所要遵守的约定
  4. Codeforces Round #554 (Div. 2) C. Neko does Maths (简单推导)
  5. python3中使用subprocess模块执行外部命令
  6. PAT 1003 Sharing (25)
  7. babyion 加载obj模型_在vue中使用babylonjs引入3d模型,打印mesh数据正常且无报错,但未在场景中显示,请问是什么环节出现了问题?...
  8. 2017-11-14【Python】爬虫练习
  9. Xshell配色为ubuntu风格
  10. 【matlab】元胞数组的创建
  11. diff git 指定时间_【GIT】从指定分支两个Tag中获取差异文件,进行代码的增量更新...
  12. mx350显卡天梯图_五月显卡性能排行 台式显卡天梯图2020年5月最新版
  13. 基于朴素贝叶斯算法实现情感分类
  14. Teach Yourself Programming in Ten Years
  15. 讨论BUCK、BOOST、BUCK-BOOST电路CCM模式下的设计参数计算
  16. hp390计算机硬盘模式设置,Bios设置中三种硬盘模式详解
  17. CTSC2016APIO2016爆零记
  18. caffe转onnx总结
  19. 如何使用 Xcode8 进行开发调试
  20. 小红书如何营销?各大品牌小红书运营投放营销策划方案合集(13份)

热门文章

  1. jupyter-notebook 以yarn模式运行出现的问题及解决
  2. python程序设计第二章序列类型 题库及选解
  3. 6. Java并发编程-并发包-Lock和Condition
  4. stata 求输出相关系数矩阵命令_Stata外部命令:那些最常用的和最新的命令
  5. java 并发: 原子类
  6. 正则,JWT token,容联云,celery,频道组,SKU,SPU,request对象的属性和方法的补充知识
  7. 向日葵远程看不到qq界面
  8. N76E003 避坑指南(持续更新)
  9. ANSYS Fluent UDF Manual 2020R2
  10. RFID技术有这7种缺点与不足,ZETA是否可以对其进行技术替代?