汇编(一)
来源:互联网 发布:编写小说的软件 编辑:程序博客网 时间:2024/05/15 13:02
知识来源于网络,作者整理,仅用于复习
学习编译时看到的非常好的博客随笔 http://www.cnblogs.com/secondtonone1/category/922609.html
**一·寄存器**8086说明
寄存器相当于中转站 8086 有14个16位寄存器,这14个寄存器按其用途可分为(1)通用寄存器、(2)指令指针、(3)标志寄存器和(4)段寄存器等4类。 1.通用 根据自己的意愿使用 数据寄存器 指针寄存器和变址寄存器 AH&AL=AX(accumulator):累加寄存器,常用于运算;在乘除等指令中指定用来存放操作数,另外,所有的I/O指令都使用这一寄存器与外界设备传送数据。 SP(Stack Pointer):堆栈指针,与SS配合使用,可指向目前的堆栈位置 BP(Base Pointer):基址指针寄存器,可用作SS的一个相对基址位置 2.指令指针IP 指令指针IP是一个16位专用寄存器,它指向当前需要取出的指令字节 3.标志寄存器 4.段寄存器 CS(Code Segment):代码段寄存器 DS(Data Segment):数据段寄存器注意:***当一个程序要执行时,就要决定程序代码、数据和堆栈各要用到内存的哪些位置***,通过设定段寄存器CS,DS,SS 来指向这些起始位置。通常是将DS固定,而根据需要修改CS。所以,程序可以在可寻址空间小于64K的情况下被写成任意大小。 5.程序计数器 程序计数器是用于存放下一条指令所在单元的地址的地方。
当执行一条指令时,首先需要根据PC中存放的指令地址,将指令由内存取到指令寄存器中,此过程称为“取指令”。与此同时,PC中的地址或自动加1或由转移指针给出下一条指令的地址。此后经过分析指令,执行指令。完成第一条指令的执行,而后根据PC取出第二条指令的地址,如此循环,执行每一条指令。
将内存单元的内容复制到寄存器中的动作——装载,将cpu中寄存器的数据copy到内存中——存储。
不是所有的寄存器都可以被开发者使用,提供给程序员的寄存器为通用寄存器。
二·汇编
一般格式为:
标号:语句助记符,操作数;注释
ADDR1:MOV AL,100;//AL寄存器赋值100
注意:mov reg, mem 将内存单元的数据存储到寄存器中
mov mem, reg 将寄存器中的内容存储到内存单元中
但是不能mov mem, mem, 不能将一个内存中的内容存储到另一个内存中 需要通过mov reg, mem1; mov mem2 reg;可达到目的。
1.汇编的hello world!
注释:
汇编语言中中操作数有三种:寄存器操作数、存储器操作数和立即数(imm)。
其中立即数相当于高级语言中的常量(常数),它是直接出现在指令中的数,不用存储在寄存器或存储器中的数,如指令ADD AL,06H中的06H即为立即数
eax为累加器,主要用于参与算术逻辑
ebx为基址寄存器,用于处理数组
ecx为计数器,用于循环操作
edx为数据寄存器,用于算术指令。
加法指令 add 减法指令 sub
乘法指令
乘法指令imul
imul mem 将内存单元mem中的数据和寄存器eax中的数据相乘,结果存储在中
imul reg 将寄存器reg中的数据和寄存器eax中的数据相乘,结果存储在edx:eax中
注意:imul 只有一个参数,这个参数只能为内存单元或者寄存器,不能是imm立即数
由于乘法指令imul可能会造成乘积位数大于乘数和被乘数的位数,所以将结果存储在edx:eax中
imul为有符号的乘法指令, mul为无符号的乘法指令, imul和mul参数只能为mem或reg,如果
想计算num = mem* 3;mem为内存单元数据,3为立即数
imul实现为
mov eax, 3
imul mem
mov num, eax
EDX:EAX,这里表示EDX,EAX连用表示64位数
C语言中:char name[] = “iloveu”;
汇编中:name byte ‘iloveu’,0 //字符串结汇通常带有二进制的0,占用一个字节
- 汇编学习(一)
- ARM汇编(一)
- 汇编实验(一)
- 8086汇编(一)
- C-汇编(一)
- 汇编(一)
- 汇编(一)
- 浅谈汇编,认识汇编(一)
- Linux 常用命令汇编(一)
- x86内联汇编(一)
- 神奇的汇编(一)
- 汇编基础总结(一)
- 汇编基础总结(一)
- 汇编(一):判断闰年
- 汇编-例子解析(一)
- 汇编学习笔记(一)
- 汇编学习笔记(一)
- 汇编学习笔记(一)
- Maven配置,显示不是内部命令,错误原因
- Java开发环境的搭建与JVM跨平台的原理
- 大数据和云计算技术周报(第2期)
- Fuzzy c-means (FCM)聚类算法
- JavaScript创建对象的八种方式
- 汇编(一)
- 手机号码获取归属地(Android)
- es6学习-1 let&const
- #号法创建树
- ScrollView中使用ListView、GridView以及展开、收缩动画
- Hbase中多版本(version)数据获取办法
- 图解阿里云“移动云”产品系列
- 题目:打印出如下图案(菱形)(java)
- mybatis与hibernate的对比