第一章基础知识:一、机器码:1、计算机只认识0,1两种状态。
而机器码只能由0,1组成。
故机器码相当难认,故产生了汇编语言。
2、其中汇编由三类指令形成:汇编指令(有机器码对应),伪指令,其她符号(编译的时候有用)。
每一总CPU都有自己的指令集;注意学习的侧重点。
二、存储器:1、存储单元中数据与指令没任何差别。
2、存储单元:Eg:128个储存单元(0~127)128byte。
//1字节=1B=1byte=8bit条件反射:1存储单元=1B=8个2进制;以后的ax,cs 之类的占两个存储单元,ah之类的占一个3、CPU对存储器的读写:地址信息+控制信息+数据信息三、总线: 1、地址总线:寻址用,参数(宽度)为N根,则可以寻到2^N个内存单元。
//因为一根总线只能表示0,1,N根的话可以表示2^N2、数据总线:传送数据用,参数为N根,一次可以传送N/8个存储单元。
3、控制总线:cpu对元器件的控制能力。
越多控制力越强。
四、内存地址空间:1、由地址总线决定大小。
2、主板:cpu与核心器件(或接口卡)用地址总线,数据总线,控制总线连接起来。
3、接口卡:由于cpu不能直接控制外设,需通过接口卡间接控制。
4、各类存储器芯片:RAM,BIOS(主板,各芯片)的ROM,接卡槽的RAMCPU在操控她们的时候,把她们都当作内存来对待,把她们总的瞧作一个由若干个存储单元组成的逻辑存储器,即我们所说的内存地址空间。
自己的一点理解:CPU对内存的操作就是一样的,但就是在cpu,内存,芯片之间的硬件本身所牵扯的线就是不同的。
所以一些地址的功能就是对应一些芯片的。
第二章寄存器引入:CPU中含有运算器,寄存器,控制器(由内部总线连接)。
而寄存器就是可以用来指令读写的部件。
8086有14个寄存器(都就是16位,2个存储空间)。
一、通用寄存器(ax,bx,cx,dx),16位,可以分为高低位注意1、范围:16位的2^16-1,8位的2^8-12、进行数据传送或运算时要注意位数对应,否则会报错二、字:1、1个字==2个字节。
2、在寄存器中的存储:0x高位字节低位字节;单元认定的就是低单元数制,16进制h,2进制b三、20根数据总线的16位cpu--8086给出物理地址的方法:1、20根数据总线(稍外):寻址能力为1M2、16位的cpu(内部):一次能处理的数据位2^16。
3、方法:物理地址=段地址*16+偏移地址 ;*16==左移四位四、段: 1、段地址为16的倍数2、一个段的长度最长为64K;因为偏移地址为16位,寻址能力为64K五、回到寄存器--段寄存器(cs,ds,ss,es)1、cs(代码段寄存器),ip(指针指令寄存器);cs为存放指令的段地址2、cpu中cs,p的运作过程:先将两个16位的数通过地址加法器变成一个20位的地址,通过输入输出控制电路,寻址并返回给cpu指令。
ip自动增加。
执行指令。
next。
3、修改cs;ip:mov不行,jmp行。
形为:jmp cs:ip 或者jmp ip(通用寄存器);转移指令修改ip六、代码段:1、要小于64K2、存放后用cs,ip指向第一条指令的首地址。
第三章还就是寄存器一、内存中字的存储:因为字(2个存储单位)要存在两个字节当中。
运用mov 等指令时,指向的就是低字节。
二、DS与[address]1、[]中放的就是偏移地址,默认段地址就是ds。
2、段地址的移入:要通过通用寄存器。
三、mov add sub(减) 指令除了处理[]内存可以位数可以不对应,其她都要。
四、数据段五、栈1、概念:FILO,以字为单位。
2、栈顶的单元为低,栈底的单元较高。
3、ss(段寄存器):sp(寄存器):任意时刻指向栈顶。
4、push进栈:sp-2 mov;pop出栈:,mov sp+25、栈的最大容量为64K,超出覆盖注意初始化的时候栈顶的指向就是栈底+1。
入出栈最易出错第四章第一个程序一、源程序的架构:开头:assume(假设)cs: xxx中间:xxx segment(段)…………程序返回:mov ax,4c00hint 21hxxx ends结束:end二、从码字到、exew下载masm,运行cmd,找到目录,masm 文件名,link 文件名,文件名。
第五章[bx]与loop一、[bx]1.Q:为什么就是bx,ax,cx,dx行不行?A:不行用debug 的a指令试试瞧。
(参考实验一)可以理解为bx特有的功能,与后面与loop配套使用的cx 一样。
二、loop指令1、与ax对应使用,当cx不为0时,一直循环。
在loop指令前,一定要把循环次数mov进cx。
在循环里面,执行完会sub cx,1,再判断ax就是否为0,执行跳出或者循环。
三.loop与[bx]联合使用1、通过改变bx值可以操作连续的一段空间。
第六章包含多个段的函数引入:使用一:在代码段中使用数据1、先将数据储存到一段连续的内存空间中(由系统分配),用loop与[]来读写这些数据。
2、start:跳过数据存储的地方,指令开始的地方。
使用二:在代码段中使用1、先dw要用的空间,栈空就是sp 为dw的个数*2-2;正文:将数据、代码、栈放入不同的段中assume cs:code,ds:data,ss:stack ;先联系起来data segmentdwdata endstack segmentdwstack endcode segmentmov ax,stackmov ss,stackmov sp,ffh ;栈地址放到栈段mov ax,datamov ds,ax ;数据地址放到数据段;核心程序;核心程序code endend第七章更加灵活的定位内存地址的方法引入:1、add 与or:操作对象就是位(bit)。
2、关于ASCII码:占一个字节(byte)3、以字符给出数据‘xxx' 每一个x占一个字节。
在程序时可直接瞧成一个或一排连续的ASCII码。
4、综合使用:大小写互换。
正文:1、[bx+idata]:偏移地址为(bx)+idata ;疑问:为什么不就是((bx)+idata )自己理解:可能就是bx就是一个寄存器,其中的值用()表示,;这样已经完成了寄存器到数值的转换了[bx]:偏移地址为(bx)用idata[bx]进行数值的应用2、si与di:si与di就是与bx相似的8位寄存器。
;bx被占领使用时应该考虑到这个。
3、[bx+si+idata]各种组合都就是行的第八章数据处理的两个基本问题一、处理的数据在什么地方?机器指令处理的数据在什么地方?内存,CPU,指令缓冲器汇编语言中数据位置的表达。
内存([]),CPU(ax),指令缓冲器(1)寻址: 直接寻址;EA=idata寄存器间接寻址 ;EA=(ax)寄存器相对寻址 ;EA=(ax)+idata基址变址寻址;EA=(ax)+(si)相对基址变址寻址;EA=(ax)+(si)+idata;原来di 对应的就是ds;si对应的就是ss。
二、指令要处理的数据有多长?ax之类的两个字节,al之类的一个字节在没有汇编的情况下,用操作符X ptr 指明内存单元中的长度,X在汇编中可以为byte或word。
三、div指令dd伪指令dup第九章转移指令的原理一、操作符offset:编译时标号处取偏移地址用二、jmp指令1、根据位移进行转移的jmp指令jmp short 标号;功能就是IP=IP+8位位移2、转移的目的地址在指令中的jmp指令jmp far 标号;可以同时修改CS,IP3、转移地址在寄存器的jmp指令:jmp 16位reg 功能:(ip)=(reg)4、转移地址在内存中的jmp指令:jmp word ptr 内存单元地址(段内转移) ;(ip)=(内存单元地址)jmp dword ptr 内存单元地址(段间转移) ;(ip)=(内存单元地址)(cs)=(内存单元地址+2)三、jcxz 指令当cx不为0时,跳转到jcxz 标号位置。
if((cx)==0)jmp short 标号第十章CALL与RET指令一、ret(近转移):pop ipretf(远转移):pop ippop cs使用前要先进栈。
retff的先push cs再push ip二、call指令ip进栈保存,改动ip跳转,执行;注意进栈时地ip就是call之后的一条1、call 标号就是相当于进行:push ip ;根据位移(段内转移)jmp near ptr 标号2、call far ptr 标号相当于进行:push cs ;段间转移push ipjmp far ptr 标号3、call 16位reg 相当于进行:push ipjmp reg4、call word ptr 内存单元地址call dword ptr 内存单元地址三、call与ret配合使用call 就是进栈调用后用ret返回四、mul指令mov 8位reg或者内存字节单元中;另一个乘数默认放在al,其中结果放在ax中。
mov 16位reg或者内存字单元中;另一个乘数默认放在ax,其中结果高位在dx,低位在ax五、模块化设计程序1、参数与结果的传递(通过寄存器)2、多个数据的传递(在字符串中在内存中的首地址放到寄存器)3、寄存器冲突问题:在子函数中进去前把寄存器进栈,返回主函数时在出栈(注意顺序)第十一章标志寄存器标志寄存器的作用:1、用来储存相关的某些指令的执行结果;2、用来为CPU执行相关指令提供行为依据3、用来控制CPU的相关工作模式其她寄存器合起来存放数据的,而标志寄存器就是按位起作用的。
一、ZF标志Z for 零;结果不为0 她为0二、PF标志 P for 奇偶;1的个数为奇她为0三、SF标志 S for 负;结果为非负她为0四、CF标志 C for 无符号溢出;没溢出她为0五、OF标志 O for out;六、adc指令(带进位加法指令)adc 操作对象1,操作对象2功能:操作对象1=操作对象1+操作对象2+CF ;比add多加了个CF作用:七、sbb指令:(带借位减法指令)sbb 操作对象1,操作对象2功能:操作对象1=操作对象1-操作对象2-CF ;比sub多加了个CF八、cmp指令(对上述各种标志位的应用):cmp 操作对象1,操作对象2功能:相当于sub指令,只就是不保存运算完之后的结果,只就是影响标志寄存器的各位()九、检测比较结果的条件转移指令jcxz转移就是修改IP条件就是满足一定条件才执行转移指令检测就是什么呢?第十二章内中段一、内中断的产生中断类型码为一个字节,可以表示256种中断信息的来源。
中断处理程序。
;cpu的设计者必须在中断信息与其处理程序的入口地址之间建立某种联系。