汇编--普及

处理器(CPU),所能识别的就是一串二进制机器语言的代码

java 的抽象就是java虚拟机的抽象.

中文编码unicode   4个字节  ASCII   1个字节

PTR 属性操作符,可以制定操作数的类型属性,优先于隐含的类型属性。

Bit意为"位"或"比特",是计算机运算的基础; 
Byte意为"字节",是计算机文件大小的基本计算单位; 
1byte=8bits,两者换算是1:8

al  是  8比特,8位,  有低四位 高四位.1字节

汇编语言程序的语句除  治理了难过 意外还可以有 位操作和宏指令组成.
MOV传送的是地址所指的内容,而LEA只是地址。0

LEA REG,SRC
link  连接  库文件 ,和 目标文件成为 可执行文件 exe

MUL SRC

  1. SRC是字节操作数 即:AX←(AL)*(SRC)
  2. SRC是字操作数    即:DX:AX←(AX)*(SRC)

受影响的标志位有:CF和OF(AF、PF、SF和ZF无定义)

如果乘积结果的高半部分等于零,则CF=OF=0,否则CF=OF=1

简化段定义  mov ax,@data  mov ds,ax

neg是求补指令

STOS 该指令把AL,AX,EAX中的值存入到由目的寄存器DI指向的附加段的某单元中,并根据控制标志位DF的值和数据类型修改目的变址寄存器的值。

LODS  该指令把源变址寄存器SI指向的数据段中某单元的内容送到AL,AX,EAX中,并根据控制标志位DF的值和数据类型修改源变址寄存器的值。

另一组是指针寄存器和变址寄存器,包括:

SP(Stack Pointer):堆栈指针,与SS配合使用,可指向目前的堆栈位置

BP(Base Pointer):基址指针寄存器,可用作SS的一个相对基址位置

SI(Source Index):源变址寄存器,可用来存放相对于DS段之源变址指针

DI(Destination Index):目的变址寄存器,可用来存放相对于ES 段之目的变址指针。

控制标志位为方向标志,(direction flag,DF)DF为1每次操作后变址寄存器SI和DI减小,为0则增大。

name  LABLE type

移位指令

SHL 逻辑左移  logical

SAL 算术左移    arithmetic

SHR 逻辑右移

SAR 算术右移

将段地址装入相应的段寄存器中

三、地址传送指令

  (1) 格式:LEA REG,MEM
  功能:将源操作数的有效地址传送到通用寄存器,操作数REG为16位或32位通用寄存器,源操作数为16位或32位存储器操作数。
  例 3.21
  LEA BX,BLOCK;将BLOCK的有效地址传送到BX中(16位)
  LEA EAX,/[EBX/];将EBX内容(有效地址)传送到EAX中(32位)

一、字符串处理指令

(1) lodsb、lodsw:把DS:SI指向的存储单元中的数据装入AL或AX,然后根据DF标志增减SI

(2) stosb、stosw:把AL或AX中的数据装入ES:DI指向的存储单元,然后根据DF标志增减DI

(3) movsb、movsw:把DS:SI指向的存储单元中的数据装入ES:DI指向的存储单元中,然后根据DF标志分别增减SI和DI

(4) scasb、scasw:把AL或AX中的数据与ES:DI指向的存储单元中的数据相减,影响标志位,然后根据DF标志分别增减SI和DI

(5) cmpsb、cmpsw:把DS:SI指向的存储单元中的数据与ES:DI指向的存储单元中的数据相减,影响标志位,然后根据DF标志分别增减SI和DI

(6) rep:重复其后的串操作指令。重复前先判断CX是否为0,为0就结束重复,否则CX减1,重复其后的串操作指令。主要用在MOVS和STOS前。一般不用在LODS前。

上述指令涉及的寄存器:段寄存器DS和ES、变址寄存器SI和DI、累加器AX、计数器CX
           涉及的标志位:DF、AF、CF、OF、PF、SF、ZF

NOP  无操作指令 ,占一个字节的空间,调试的时候用

HLT     停机指令   ,

ESC     换码指令,

WAIT   使处理机处于空转状态.

LOCK   前缀    维持总线的锁存信号

BOUND   界限指令

ENTER   建立堆栈帧

LEAVE    释放堆栈帧

SEGMENT  伪操作

MODEL       伪操作

状态标志  : 记录指令操作结果的标志, 共6位 :  OF , SF ,ZF ,AF ,PF ,CF

控制标志  : 控制操作的标志,如DF位

段跨越前缀  ,如允许数据存放在除DS段以外的其他段中.

串处理指令的目的串必须用ES段


BCD码

BCD码   是用二进制的“数”来表示十进制的“数字”因此,对于一个“十进制数字”(例如“6”),我们可以用一个“8位二进制数”来表示(即0000 0110 b),这称为非压缩的BCD码;当然,我们也可以用一个“4位的二进制数”来表示它(即   0110   b),这称为压缩的BCD码。
于是,十进制数“36”用非压缩的BCD码表示为“00000011  00000110”而用压缩的BCD码表示为“0011   0110”。
就是每4位表示一个数字咯~原本一个字节8位代表一个数字的
CF是进(借)位标志  值为1或0sbb就是在sub的基础上再减去cf(借位标志)  带借位的减法就好像adc就是在add的基础上再加上cf(进位标志)  带进位的加法
时间: 2024-10-13 17:46:56

汇编--普及的相关文章

《尖叫感》:是近20-30年来尤其是近3-5年来的优秀广告文案的整理汇编。3星

本书是近20-30年来尤其是近3-5年来的优秀广告文案的整理汇编.这些案例还是值得看一看的.书中对广告文案如何做有一些分析概括,其中部分直接说出出处,大部分不说出处的也看着眼熟,不像是作者原创,更像是对现成的理论的引用.我的评价是3星. 以下是书中一些信息的摘抄,#号后面是kindle电子书中的页码: 1:也就是说,在社会化媒体上传播的文案,应该依据这样的标准来写:不仅要引发阅读兴趣,而且要让人在读完之后产生分享给其他人.参与互动,以及再创作和二次传播的冲动.#159 2:另外,在社会化传播媒介

逆向工程普及篇

什么是逆向工程 欲知逆向,先懂正向!!! 我们正常写程序的过程,可以叫做正向,例如:用C++写一个程序,是从C++一层层编译到 0 1代码变成可执行程序的. 逆向工程就是和正向相反的,是从0 1 代码变成人类可懂的代码. 为什么需要逆向工程 随着互联网的发展和网络设备的普及,网络安全越发的重要,骇客的恶意软件层出不穷,所以安全人员需要分析他们的恶意代码,查找一些相关信       息,所以需要逆向分析他们软件的流程等等(因为看不到源码,只能逆向分析). 最近 方程式  那些 0day 漏洞,就是

NoSQL简史汇编

NoSQL的历史非常之短,完整历史也就三段完结,本文叫汇编就更短了 ,只是对一些英文纪录的翻译补充. 在之前 SQL==数据库. 1990年代,NoSQL这个词才第一次被使用,具体年份是1998,用来描述一个不采用SQL作为接口的关系数据库. 2009年,NoSQL这个词被重新引入,用来描述非关系数据库. 今天所指的NoSQL概念是2009年引入的,时间非常之短,但因为各类型非关系数据库的出色表现,解决了大量SQL数据库的问题,所以这一两年这个词被快速普及,以致大家都忽略了它其实才出现不久. 这

GCC在C语言中内嵌汇编 asm __volatile__ 【转】

转自:http://blog.csdn.net/pbymw8iwm/article/details/8227839 在内嵌汇编中,可以将C语言表达式指定为汇编指令的操作数,而且不用去管如何将C语言表达式的值读入哪个寄存器,以及如何将计算结果写回C 变量,你只要告诉程序中C语言表达式与汇编指令操作数之间的对应关系即可, GCC会自动插入代码完成必要的操作. 1.简单的内嵌汇编 例: __asm__ __volatile__("hlt"); "__asm__"表示后面的

Linux C中内联汇编的语法格式及使用方法(Inline Assembly in Linux C)

在阅读Linux内核源码或对代码做性能优化时,经常会有在C语言中嵌入一段汇编代码的需求,这种嵌入汇编在CS术语上叫做inline assembly.本文的笔记试图说明Inline Assembly的基本语法规则和用法(建议英文阅读能力较强的同学直接阅读本文参考资料中推荐的技术文章 ^_^). 注意:由于gcc采用AT&T风格的汇编语法(与Intel Syntax相对应,二者的区别参见这里),因此,本文涉及到的汇编代码均以AT&T Syntax为准. 1. 基本语法规则 内联汇编(或称嵌入汇

汇编第五日

mov ax, offset 标号:取得标号相对于伪代码后第一条指令地址0的相对偏移量即标号地址 可以发现汇编指令中的idata会直接反映在机器码中 jmp指令可以修改IP或CS和IP的值,具体格式如下: ①jmp short 标号(段内转移) (IP) = (IP)+ 8位位移 8位位移含义是:标号地址减去jmp指令的下一条指令地址即为相对位移地址(可正可负,但是范围必须在8位数据能表示之内)并不是直接目的地址 8位位移范围为-128 - 127 例如: JMP 0008即跳到0BBD:000

在vs 2015环境下,c语言和汇编混编操作简析(更新中......)

在VS 2015环境下如何混编. 在新建工程里也会发现了很多问题, 应用程序类型分为:windows应用程序,控制台应用程序,DLL,静态库 静态库: 静态库是指在我们的应用中,有一些公共代码是需要反复使用,就把这些代码编译为"库"文件:在链接步骤中,连接器将从库文件取得所需的代码,复制到生成的可执行文件中的这种库. 程序编译一般需经预处理.编译.汇编和链接几个步骤.静态库特点是可执行文件中包含了库代码的一份完整拷贝:缺点就是被多次使用就会有多份冗余拷贝. 静态库和动态库是两种共享程序

用汇编来解释“计算机是怎么工作的”

本文章为<Linux内核分析>实验报告 梁永锐 原创作品转载请注明出处 http://www.cnblogs.com/liangyongrui/p/6392035.html <Linux内核分析>MOOC课程http://mooc.study.163.com/course/USTC-1000029000 " ----- 以下为要分析的c代码 int g(int x) { return x + 36; } int f(int x) { return g(x) * 4; }

Java千百问_02基本使用(015)_java如何通过汇编方式运行

点击进入_更多_Java千百问-基本使用 1.java如何通过汇编方式运行 java本身不能通过汇编方式运行.但是,我们可以通过某些插件,在运行中将java代码解释为汇编指令,让我们能够通过分析执行的汇编指令来查找一些问题,也可以帮助我们分析和理解JVM是如何解释和编译的(当然java本身的编译和运行和汇编无关). PrintAssembly是JVM的一个运行参数,它允许我们获取在控制台打印java代码翻译成的汇编指令.使用PrintAssembly需要一些插件的支持,这些并不是JVM直接提供的