用户名:  密码:   
您当前的位置:首页 > 程序设计 >  汇编与密码学 > 

黑客基地汇编笔记

上次修改时间: 2016-09-08 16:48:42      来源:网络总结      作者:钢铁长陈
上一页      路径:DSD\Learn\assembly与反assembly\      下一页

第一课 什么是二进制数,八进制数,十进制数,十六进制数
十进制转二进制数,二进制转十进制数 二进制转十六进制。每个四个转为一个二进制数

第二课 数字的运算
机器数,原补反,及它们的运算

第三课
第一节 基础
8086 操作系统是常驻内存监督程序,用来接受命令,又分为文件管理程序、I/O程序驱动、文件编辑程序、翻译程序(计算机语言,汇编语言,高级语言)、连接程序()、装入程序(把程序从外存读入内存)、调试程序、系统程序库
第二节  寄存器上
执行单元EU,总线接口单元BIU,通用寄存器,CPU分运算器和控制器,软件分系统软件与用户软件
系统总线分数据总线,地址总线,控制总线
第三节 寄存器下
通用寄存器,专用寄存器 IP\SP\FLAGS,段寄存器

第四课 存储器
存储器和寄存器的区别是寄存器的CPU内,速度快,容量小。
后面讲了位,1bit,1位可存一个二进制数,每8位一个字节,2字节一个字,字节是存储器中存取基本单位
字是2字节所以是16位,双字32位,四字64位
16位前8位是高位字节与后8位是低位字节,32位也分高位字,低位字,64位分高位双字,低位双字
每个字节分一个编号,编号简写为16进制数

第五课 存储器的分段
5. 20根地址线 00000H-FFFFFH 2^20(1MB)
机器字长16位 0000H——FFFFH
实模式: 16位段地址 16位偏移地址
小段:每16个字节为1小段
小段首地址:00000H——0000FH
。。。。。。。。。。。。
物理地址:每个存储单元唯一的20位地址
偏移地址:
逻辑地址:
CS存代码,DS存运算结果,SS堆栈,ES附加数据 都是只能存64K数据

第六课 外部设备,对前面复习,综合运用
1. 外部设备即输入输出设备,与主机的通信
数据寄存器,缓冲器的作用
状态寄存器,
命令寄存器
8086的I/O地址空间是64K 0000——FFFFH
2) CPU组成,算术逻辑部件ALU,控制逻辑,工作寄存器
8086寄存器组,
数据寄存器,
AX, AH  AL  //高8位与低8位
BX,  BH  BL
CX  CH  CL
DX, DH DL
指针变址计算器,SP BP SI DI
段寄存器,CS DS SS ES
控制寄存器 IP FLAGS
标志寄存器 PSW 也是16位
条件码标志:OF SF ZF CF AF PF
OF=1 超 出机器字长
SF=1 算出是负数
ZF=1 运算结果是0
CF=1 有
AF 辅助进位标志
PF 低八位1的个数,如果是奇数PF=0,如是偶数PF=1
控制标志: DF IF TF
DF 为0低——高,为1高——低,即反方向标志,DF是方向标志
IF 中断标志,等于1开中断,等0关中断
3)综合
MOV数据传送指令,双操作数
mov ax,1 //1传到ax中
mov bx,2
add ax,bx
(AX)=3 OF=0 CF=0  ZF=0 SF=0

MOV AX, FFFFH //把FFFFH赋给AX,FFFFH的补码是-1
MOV BX, 1
ADD AX, BX
AX=0 OF=0 CF=1 ZF=1 SF=0

第七课 没讲代码,只讲了学汇编有什么用

第八课 指令集,操作码,操作数,立即寻址方式,立即数
第一节 每类CPU都有自己的指令集,指令集分操作码字段,操作数字段,操作数可有多个
第二节 寻址模式分多种,这里讲与数据有关的,立即寻址方式,常用于给寄存器赋初值,只能用于源操作数字段
立即数是什么,可以是8位,也可是16位,32位,高位字或字节存放在高地址中
MOV AL,5 //AL是目的操作数,5是源操作数,也立即数
MOV AX,3064H //把3064H的16进制数放到AX
MOV AL,'A' //
注:源操作数要符合目的操作数的字长

第九课 寄存器寻址方式,直接给出寄存器地址
第一节 要寻找的操作数在寄存器中,用寄存器存放操作数
16位操作数,寄存器可以是AX,BX....,8位操作数寄存器可以是AL,AH,BL
第二节 
MOV AX,BX //AX是目的操作数,BX是源操作数,两个16位的寄存器
1)字节寄存器,只有 AH AL。。。等可分高8位低8位
2)SRC,DST字长
3)CS 代码段寄存器,不能用MOV指令改变 ,如MOV CS,AX是错的
前面讲了两种寻址方式,后面还有5种,后面讲计算EA的不同5种方式

第十课
第一节 把汇编源程序转为exe文件,需要的软件及安装MASM32
第二节 配置masm32的环境变量
第三节 主要讲把asm源文件变成exe文件
如没有要新建include变量,还有lib,及path变量
建立编写asm源文件,ml转为obj文件,
ml /c /coff first.asm //ml是宏汇编器
link /subsystem:Windows first.obj
cmd下的操作步骤
d:
cd testasm
ml /c /coff first.asm
link /subsystem:Windows first.obj
第四节 另一种把asm文件转为exe的方法,这里是安装IDESetup.exe软件
第五节 用editPlus打开first.asm,工具——编译链接运行,直接生成first.exe文件

第十一课 存储器的寻址方式——直接寻址方式
有效地址由指令直接给出,操作数存放在存储单元中,存储单元的有效地址就在指令的操作码之后
段基地址+编移地址,找到
MOV AX,[2000H] //EA=2000H,数据段寄存器DS若为3000H
物理地址=16d*段地址3000H+编移2000H
EAX,EAX是32位寄存器,只在386以上存在,32bit
EAX EA7823BB 32bit
AX EA7823BB 23BB 16-bit
AH EA7823BB 23 8-bit
AL EA7823BB BB
隐含的数据段为数据段DS MOV AX,[2000H]
可使用跨段前缀 MOV AX,ES:[2000H] //它是在附加段ES里
操作数地址可由变量即符号地址表示 
VALUE DB 10
MOV AH,VALUE

第十二课 数据寻址方式
存储器间接寻址方式:把操作器的地址放在基址寄存器或变址寄存器
基址变址寻址:。。。。。

第十三课
寄存器相对寻址
相对基址变址寻址
比例变址寻址
什么是寻址方式,寻找指令中操作数的方式,什么是程序寻址方式
MOV是解释数据寻址方式的基础指令
有效地址EA=基址+变址+位移量
几种寻址方式的总结,各寻址方式作用区别

第十四课
第一节,上一课的作业详解
第二节, 程序存储器寻址方式,与转移地址有关的寻址方式,位移量
段内,段间,的区别。直接和间接的区别,
段内直接寻址 转向有效地址=
段内间接寻址
IP SHORT NEAR

第十五课
第一节, 补充段内直接寻址讲解一些代码
第二节, 段内间接寻址举例详解
段间直接寻址 双间接转移

第十六课 指令系统
汇编程序的结构及格式
汇编语句由指令型语句和指示型语句,后面还有宏指令语句
名字:操作码[操作数][,操作数]
名字:[伪操作][操作数][,操作数]
名字是由用户按一定规则定义的标识符,由大小字字母,数字,?@_,数字不能开头,最长为31,保留字如寄存器名字不能用
标号和变量是名字的两咱形式
标号,段属性,偏行属性,类型属性
变量,变量与所代表的数据间用空格分开
操作数:用来指定参与操作的数据,操作数可是常数或表达式,常数分数值常数,字符串常数,符号常数
表达试,算术运算符+-*/,逻辑运行算符and,or,xor,not,关系运算符EQ,LT,LE,GT

第十七课 数据传送指令分四种
通用数据传送指令,
MOV dst,src,//把src传到dst,注意事项及约速条件
PUSH指令,压栈堆栈,一段先进后出的存储区,SP任何时候都指向栈顶
POP指令,出栈,压栈出栈先进后出
XCHG指令,reg,reg

popad
作业1.。。。。。
作业2.。。。。。

第十八课
第一节,第十七课作业解答
第二节, 输入输出指令,限于使用累加器(ac: AX或AL)传送信息
IN ac,port ;输入指令(input),port<=OFFH
port——AL或port+1,port——AX
每个寄存器都有端口号
OUT port,ac;输出指令
累加器专用传送指令,
例子:测试某外部设备(端口鴞 27H)的第二位是否为1


第十九课
地址传送指令:是把地址送到指定寄存器的功能。有三种操作码LEA,LDS,LES
例子:
LEA BX,[BX+SI+0F62H]
LDS SI,[10H]
LES DI,[BX]
标志寄存器传送指令:常用两种有LAHF,SAHF
作业1.。。。

第二十课
第一节,上课的作业
第二节,算术运算指令
加法指令:ADD dst,src,二进制相加
ADC dst,src //带进位加指令
INC opr //加1指令
例子:
ADD AL,BL //AL=AL+BL
ADD [BX],AL
ADD BX,[EAX+2*ECX]
累加的数组的汇编代码

加法指令对条件码的影响
SF,ZF,CF,OF,等于0与1的区别
作业: