ImageVerifierCode 换一换
格式:DOCX , 页数:12 ,大小:20.40KB ,
资源ID:6597078      下载积分:3 金币
快捷下载
登录下载
邮箱/手机:
温馨提示:
快捷下载时,用户名和密码都是您填写的邮箱或者手机号,方便查询和重复下载(系统自动生成)。 如填写123,账号就是123,密码也是123。
特别说明:
请自助下载,系统不会自动发送文件的哦; 如果您已付费,想二次下载,请登录后访问:我的下载记录
支付方式: 支付宝    微信支付   
验证码:   换一换

加入VIP,免费下载
 

温馨提示:由于个人手机设置不同,如果发现不能下载,请复制以下地址【https://www.bdocx.com/down/6597078.html】到电脑端继续下载(重复下载不扣费)。

已注册用户请登录:
账号:
密码:
验证码:   换一换
  忘记密码?
三方登录: 微信登录   QQ登录  

下载须知

1: 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。
2: 试题试卷类文档,如果标题没有明确说明有答案则都视为没有答案,请知晓。
3: 文件的所有权益归上传用户所有。
4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
5. 本站仅提供交流平台,并不能对任何下载内容负责。
6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

版权提示 | 免责声明

本文(汇编语言知识大全.docx)为本站会员(b****5)主动上传,冰豆网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。 若此文所含内容侵犯了您的版权或隐私,请立即通知冰豆网(发送邮件至service@bdocx.com或直接QQ联系客服),我们立即给予删除!

汇编语言知识大全.docx

1、汇编语言知识大全第一章 基础知识 :一.机器码:1.计算机只认识0,1两种状态。而机器码只能由0,1组成。故机器码相当难认,故产生了汇编语言。 2.其中汇编由三类指令形成:汇编指令(有机器码对应),伪指令,其他符号(编译的时候有用)。每一总CPU都有自己的指令集;注意学习的侧重点。二.存储器:1.存储单元中数据和指令没任何差别。 2.存储单元:Eg:128个储存单元(0127)128byte。 /1字节=1B=1byte=8bit 条件反射:1存储单元=1B=8个2进制;以后的ax,cs之类的占两个存储单元, ah之类的占一个 3.CPU对存储器的读写:地址信息+控制信息+数据信息三.总线:

2、1.地址总线:寻址用,参数(宽度)为N根,则可以寻到2N个内存单元。 /因为一根总线只能表示0,1,N根的话可以表示2N 2.数据总线:传送数据用,参数为N根,一次可以传送N/8个存储单元。 3.控制总线:cpu对元器件的控制能力。越多控制力越强。四.内存地址空间:1.由地址总线决定大小。 2.主板:cpu和核心器件(或接口卡)用地址总线,数据总线,控制总 线连接起来。 3.接口卡:由于cpu不能直接控制外设,需通过接口卡间接控制。 4.各类存储器芯片:RAM,BIOS(主板,各芯片)的ROM,接卡槽的 RAMCPU在操控他们的时候,把他们都当作内存来对待,把他们总的看作一个由 若干个存储单元

3、组成的逻辑存储器,即我们所说的内存地址空间。 自己的一点理解:CPU对内存的操作是一样的,但是在cpu,内存,芯片之间的硬件本身所牵扯的线是不同的。所以一些地址的功能是对应一些芯片的。第二章 寄存器引入:CPU中含有运算器,寄存器,控制器(由内部总线连接)。而寄存器是可以用来指令读写的部件。8086有14个寄存器(都是16位,2个存储空间)。一.通用寄存器(ax,bx,cx,dx),16位,可以分为高低位注意1.范围:16位的216-1,8位的28-12.进行数据传送或运算时要注意位数对应,否则会报错二.字:1. 1个字=2个字节。 2. 在寄存器中的存储:0x高位字节低位字节 ;单元认定的是

4、低单元数制,16进制h,2进制b三.20根数据总线的16位cpu-8086给出物理地址的方法:1.20根数据总线(稍外):寻址能力为1M2.16位的cpu(内部):一次能处理的数据位216。3.方法:物理地址=段地址*16+偏移地址 ;*16=左移四位四.段: 1.段地址为16的倍数2.一个段的长度最长为64K;因为偏移地址为16位,寻址能力为64K五.回到寄存器-段寄存器(cs,ds,ss,es)1.cs(代码段寄存器),ip(指针指令寄存器);cs为存放指令的段地址2.cpu中cs,p的运作过程:先将两个16位的数通过地址加法器变成一个20位的地址,通过输入输出控制电路,寻址并返回给cpu

5、指令。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.栈顶的单元

6、为低,栈底的单元较高。 3.ss(段寄存器):sp(寄存器):任意时刻指向栈顶。 4.push进栈:sp-2 mov;pop出栈:,mov sp+2 5.栈的最大容量为64K,超出覆盖 注意初始化的时候栈顶的指向是栈底+1。入出栈最易出错第四章 第一个程序一.源程序的架构:开头:assume(假设)cs: xxx中间:xxx segment(段) 程序返回:mov ax,4c00h int 21h xxx ends结束:end二.从码字到.exew下载masm,运行cmd,找到目录,masm 文件名,link 文件名,文件名。第五章 bx和loop一.bx 1Q:为什么是bx,ax,cx,dx

7、行不行? 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.先

8、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

9、.以字符给出数据 xxx 每一个x占一个字节。在程序时可直接看成一个或一排连续的ASCII码。4.综合使用:大小写互换。正文:1.bx+idata:偏移地址为(bx)+idata ;疑问:为什么不是(bx)+idata )自己理解:可能是bx是一个寄存器,其中的值用()表示, ;这样已经完成了寄存器到数值的转换了bx:偏移地址为(bx)用idatabx进行数值的应用2.si和di:si和di是和bx相似的8位寄存器。;bx被占领使用时应该考虑到这个。3.bx+si+idata各种组合都是行的第八章 数据处理的两个基本问题一.处理的数据在什么地方?机器指令处理的数据在什么地方?内存,CPU,指令

10、缓冲器汇编语言中数据位置的表达。内存(),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:编译时标号处取偏

11、移地址用二.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 标号

12、第十章 CALL和RET指令一.ret(近转移):pop ip retf(远转移):pop ip pop 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 ip jmp far ptr 标号 3.call 16位reg 相当于进行:push ipjmp reg4.call word ptr 内存单元地址cal

13、l dword ptr 内存单元地址三.call和ret配合使用call 是进栈 调用后 用ret返回四.mul指令mov 8位reg或者内存字节单元中;另一个乘数默认放在al,其中结果放在ax中。mov 16位reg或者内存字单元中;另一个乘数默认放在ax,其中结果高位在dx,低位在ax五.模块化设计程序1.参数和结果的传递(通过寄存器)2.多个数据的传递(在字符串中在内存中的首地址放到寄存器)3.寄存器冲突问题:在子函数中进去前把寄存器进栈,返回主函数时在出栈(注意顺序)第十一章 标志寄存器标志寄存器的作用:1.用来储存相关的某些指令的执行结果; 2.用来为CPU执行相关指令提供行为依据

14、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指

15、令(对上述各种标志位的应用):cmp 操作对象1,操作对象2功能:相当于sub指令,只是不保存运算完之后的结果,只是影响标志寄存器的各位()九.检测比较结果的条件转移指令 jcxz转移是修改IP条件是满足一定条件才执行转移指令检测是什么呢?第十二章 内中段一.内中断的产生中断类型码为一个字节,可以表示256种中断信息的来源。中断处理程序。;cpu的设计者必须在中断信息和其处理程序的入口地址之间建立某种联系。中断向量表cpu用8位的中断类型码通过中断向量表找到相应的中断处理函数的入口。中断向量表是存放着中断处理程序入口地址的列表。一个表项存放一个中断向量,也就是一个中断处理函数的入口地址,所以一

16、个表项占两个字节。高字节存放段地址,低字节存放偏移地址。二.中断过程1.取得中断类型码N2.pushf3.TF=0 IF=04.push CS5.push IP6.(IP)=(4*N),(CS)=(4*N)+2三.中断处理程序和iret1.保存用到的寄存器2.处理程序3.恢复用到的寄存器4.用iret指令返回四.除法错误中断(o号中断)的处理;当除法溢出的时候,产生中断信息编写中断处理程序d0可以将do0传送到内存0000:0200(之后的256字节为空)将do0的入口地址0000:0200存储在中断向量表0号中五.安装中断被执行的过程:先将中段处理程序加载到内存当中,然后再复制到内存单元为0

17、:200的地址当中,最后最在中断向量表0号中填入do0的入口中地址0:200具体编程:1.设置ds,si指向源地址:mov ax,cs mov ds,ax mov si,offset do02.设置es,di指向目的地址: mov ax,0 mov es,ax mov di,200h 3.设置cx为传输长度:mov cx,offset do0end-offset do0 4.设置传输方为正:cld 5.确定信息:rep movsb 如果中断中有数据要处理的话,可以存放到do0函数中,用jmp跳转到do0start,数据在jmp之后的内存位置中,确保不被用到。六.设置中断向量mov ax,0mo

18、v es,axmov word ptr es:0*4,200hmov word ptr es:0*4+2,0第十三章 int指令一.int 指令功能是能引发中断取中断类型码n标志寄存器入栈:IF=0,TF=0CS,IP入栈 (IP)=(n*4) (CS)=(n*4+2)二.编写供应用程序调用的中断例程 int和iret的使用类似于call和ret三.对in,iret和栈的深入理解 暂时不了解四.BIOS和DOS所提供的中断例程第十四章 端口。第十五章 外中断PC机键盘的处理过程键盘的输入60h端口a的通码/扫描码:1e 断码=通码+80h引发9号中断若IF=1,响应中断执行int9中断例程读出

19、60h端口中的扫描码如是字符型的将扫描码和对应的ASCII码送入内存中的BIOS键盘缓冲区如果是控制键或切换键,则将其转换为状态字节写入内存中存储状态字节的单元编写int9中断例程键盘输入的处理过程:键盘产生扫描码-扫描码送入60h端口-引发9号中断-CPU执行int9中断例程处理键盘输入从端口60h读出键盘的输入in al,60h调用BIOS的int9中断例程要先将原来的存放中断入口地址的单元储存在另外的空间中push es:9*4pop ds:0push es:9*4+2pop ds:2在中断向量表中设置新的int9中断入口程序的地址mov word ptr es:9*4,offset int9mov es:9*4+2,cs新的中断程序中要相关寄存器进栈读端口 in al,60h对int指令进行模拟,调用原来的int9中断例程

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1