汇编语言知识大全.docx

上传人:b****8 文档编号:9982033 上传时间:2023-02-07 格式:DOCX 页数:15 大小:21.96KB
下载 相关 举报
汇编语言知识大全.docx_第1页
第1页 / 共15页
汇编语言知识大全.docx_第2页
第2页 / 共15页
汇编语言知识大全.docx_第3页
第3页 / 共15页
汇编语言知识大全.docx_第4页
第4页 / 共15页
汇编语言知识大全.docx_第5页
第5页 / 共15页
点击查看更多>>
下载资源
资源描述

汇编语言知识大全.docx

《汇编语言知识大全.docx》由会员分享,可在线阅读,更多相关《汇编语言知识大全.docx(15页珍藏版)》请在冰豆网上搜索。

汇编语言知识大全.docx

汇编语言知识大全

第一章基础知识:

一•机器码:

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对存储器的读写:

地址信息+控制信息+数据信息

3.总线:

1.地址总线:

寻址用,参数(宽度)为N根,则可以寻到2AN个内存单元。

//因为一根总线只能表示0,1,N根的话可以表示2AN

2.数据总线:

传送数据用,参数为N根,一次可以传送N/8个存储单元。

3.控制总线:

cpu对元器件的控制能力。

越多控制力越强。

4.内存地址空间:

1.由地址总线决定大小。

2.主板:

cpu和核心器件(或接口卡)用地址总线,数据总线,控制总

线连接起来。

3.接口卡:

由于cpu不能直接控制外设,需通过接口卡间接控制。

4.各类存储器芯片:

RAM,BIOS(主板,各芯片)的ROM,接卡槽的

RAM

CPU在操控他们的时候,把他们都当作内存来对待,把他们总的看作一个由

若干个存储单元组成的逻辑存储器,即我们所说的内存地址空间。

自己的一点理解:

CPU对内存的操作是一样的,但是在cpu,内存,芯片之间的硬件本身所牵扯的线是不同的。

所以一些地址的功能是对应

一些芯片的。

第二章寄存器

引入:

CPU中含有运算器,寄存器,控制器(由内部总线连接)。

而寄存器是可以用来指令读写的部件。

8086有14个寄存器(都是16位,2个存储空间)。

1.通用寄存器(ax,bx,cx,dx),16位,可以分为高低位

注意1.范围:

16位的2A16-1,8位的2八8-1

2.进行数据传送或运算时要注意位数对应,否则会报错

二•字:

1.1个字==2个字节。

2.在寄存器中的存储:

Ox高位字节低位字节;单元认定的是低单元

数制,16进制h,2进制b

3.20根数据总线的16位cpu--8086给出物理地址的方法:

1.20根数据总线(稍外):

寻址能力为1M

2.16位的cpu(内部):

一次能处理的数据位2A16。

3.方法:

物理地址二段地址*16+偏移地址;*16==左移四位

4.段:

1.段地址为16的倍数

2.一个段的长度最长为64K;因为偏移地址为16位,寻址能力为

64K

5.回到寄存器--段寄存器(cs,ds,ss,es)

1.cs(代码段寄存器),ip(指针指令寄存器);cs为存放指令的段地址

2.cpu中cs,p的运作过程:

先将两个16位的数通过地址加法器

变成一个20位的地址,通过输入输出控制电路,寻址并返回给cpu指

令。

ip自动增加。

执行指令。

nextooo

3.修改cs;ip:

mov不行,jmp行。

形为:

jmpcs:

ip或者jmp

ip(通用寄存器);转移指令修改ip

6.代码段:

1.要小于64K

2.存放后用cs,ip指向第一条指令的首地址。

第三章还是寄存器

一•内存中字的存储:

因为字(2个存储单位)要存在两个字节当中。

运用mov等指令时,指向的是低字节。

2.DS和[address]

1.[]中放的是偏移地址,默认段地址是ds。

2.段地址的移入:

要通过通用寄存器。

3.movaddsub(减)指令

除了处理[]内存可以位数可以不对应,其他都要。

四•数据段

五•栈

1.概念:

FILO,以字为单位。

2.栈顶的单元为低,栈底的单元较高。

3.ss(段寄存器):

sp(寄存器):

任意时刻指向栈顶。

4.push进栈:

sp-2mov;pop出栈:

,movsp+25.栈的最大容量为64K,超出覆盖

注意初始化的时候栈顶的指向是栈底+1。

入出栈最易出错

第四章第一个程序

一•源程序的架构:

开头:

assume(假设)cs:

xxx

中间:

xxxsegment(段)

程序返回:

movax,4cOOh

int21h

xxxends

结束:

end

2.从码字至U.exew

下载masm,运行cmd,找到目录,masm文件名,link文件名,文件名

第五章[bx]和loop

1.[bx]

1.Q:

为什么是bx,ax,cx,dx行不行?

A:

不行

用debug的a指令试试看。

(参考实验一)

可以理解为bx特有的功能,和后面与loop配套使用的cx一样。

二」oop指令

1.与ax对应使用,当ex不为0时,一直循环。

在loop指令前,一定要把循环次数mov进ex。

在循环里面,执行完会subex,1,再判断ax是否为0,执行跳出或者循环。

3.loop和[bx]联合使用

1.通过改变bx值可以操作连续的一段空间。

第六章包含多个段的函数

引入:

使用一:

在代码段中使用数据

1.先将数据储存到一段连续的内存空间中(由系统分配),用loop

和[]来读写这些数据。

2.start:

跳过数据存储的地方,指令开始的地方。

使用二:

在代码段中使用

1.先dw要用的空间,栈空是sp为dw的个数*2-2;

正文:

将数据、代码、栈放入不同的段中

assumecs:

code,ds:

data,ss:

stack;先联系起来

datasegment

dw

dataend

stacksegment

dw

stackend

codesegment

movax,stack

movss,stack

movsp,ffh;栈地址放到栈段

movax,data

movds,ax;数据地址放到数据段

;核心程序

;核心程序

codeend

end

第七章更加灵活的定位内存地址的方法

引入:

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之类的一个字节

在没有汇编的情况下,用操作符Xptr指明内存单元中的长度,X在汇编中可以为byte或word。

三.div指令

dd伪指令

dup

第九章转移指令的原理

1.操作符offset:

编译时标号处取偏移地址用

2.jmp指令

1.根据位移进行转移的jmp指令jmpshort标号;功能是

IP=IP+8位位移

2.转移的目的地址在指令中的jmp指令jmpfar标号可以同时修改CS,IP

3.转移地址在寄存器的jmp指令:

jmp16位reg功能:

(ip)=(reg)

4.转移地址在内存中的jmp指令:

存单元地址)

jmpwordptr

内存单元地址(段内转移)

;(ip)=(内

jmpdwordptr

内存单元地址(段间转移)

;(ip)=

(内存单元地址)(cs)=

(内存单元地址+2)

三.jcxz指令

当cx不为0时,跳转到jcxz标号位置。

if((cx)==0

)jmpshort

标号

第十章CALL和RET指令

.ret(近转移):

popip

retf(远转移):

popip

popcs

使用前要先进栈。

retff的先pushcs再puship

二.call指令

ip进栈保存,改动

ip跳转,执行;注意进栈时地ip是call之后的

一条

1.call标号是

相当于进行:

puship

;根据位移

(段内转移)

jmpnearptr

标号

2.callfarptr标号

相当于进行:

pushcs

;段间转移

puship

jmpfarptr

标号

 

3.call16位reg相当于进行:

puship

jmpreg

4.callwordptr内存单元地址

calldwordptr内存单元地址

3.call和ret配合使用

call是进栈调用后用ret返回

4.mul指令

mov8位reg或者内存字节单元中;另一个乘数默认放在al,其中结果放在ax中。

mov16位reg或者内存字单元中;另一个乘数默认放在ax,其中结果高位在dx,低位在ax

5.模块化设计程序

1.参数和结果的传递(通过寄存器)

2.多个数据的传递(在字符串中在内存中的首地址放到寄存器)

3.寄存器冲突问题:

在子函数中进去前把寄存器进栈,返回主函数时在出栈(注意顺序)

第十一章标志寄存器

标志寄存器的作用:

1.用来储存相关的某些指令的执行结果;

2.用来为CPU执行相关指令提供行为依据

3.用来控制CPU的相关工作模式

其他寄存器合起来存放数据的,而标志寄存器是按位起作用的。

一.ZF标志

Zfor

零;结果不为0

他为0

二.PF标志

Pfor

奇偶;1的个数为奇

他为0

三.SF标志

Sfor

负;结果为非负

他为0

四.CF标志

Cfor

无符号溢出;没溢出

他为0

五.OF标志

Oforout;

六.adc指令

(带进位加法指令)

adc操作对象1,操作对象2

功能:

操作对象仁操作对象1+操作对象2+CF;比add

多加了个CF

作用:

7.sbb指令:

(带借位减法指令)

sbb操作对象1,操作对象2

功能:

操作对象1=操作对象1-操作对象2-CF;比sub多

加了个CF

8.cmp指令(对上述各种标志位的应用):

cmp操作对象1,操作对象2

功能:

相当于sub指令,只是不保存运算完之后的结果,只是

影响标志寄存器的各位()

9.检测比较结果的条件转移指令jcxz

转移是修改IP

条件是满足一定条件才执行转移指令

检测是什么呢?

第十二章内中段

一•内中断的产生

中断类型码为一个字节,可以表示256种中断信息的来源。

中断处理程序。

;cpu的设计者必须在中断信息和其处理程序的入口地址之间建立某种联系。

中断向量表

cpu用8位的中断类型码通过中断向量表找到相应的中断处理函数的入口。

中断向量表是存放着中断处理程序入口地址的列表。

一个表项存放一个中断向量,也就是一个中断处理函数的入口地址,所以一个表项占两个字节。

高字节存放段地址,低字节存放偏移地址。

二•中断过程

1.取得中断类型码N

2.pushf

3.TF=0IF=O

4.pushCS

5.pushIP

6.(IP)=(4*N),(CS)二(4*N)+2

三.中断处理程序和iret

1.保存用到的奇存器

2.处理程序

3.恢复用到的寄存器

4.用iret指令返回

四•除法错误中断(o号中断)的处理

;当除法溢出的时候,产生中断信息

编写中断处理程序dO

可以将doO传送到内存0000:

0200(之后的256字节为空)

将do0的入口地址0000:

0200存储在中断向量表0号中

五•安装

中断被执行的过程:

先将中段处理程序加载到内存当中,然后再复制到内存单元为0:

200的地址当中,最后最在中断向量表0号中填入

do0的入口中地址0:

200

具体编程:

1.设置ds,si指向源地址:

movax,cs

movds,ax

movsi,offsetdo0

2.设置es,di指向目的地址:

movax,0

moves,ax

movdi,200h

3.设置cx为传输长度:

movcx,offsetdo0end-offsetdo0

4.设置传输方为正:

cld

5.确定信息:

repmovsb

do0函数中,用

确保不被用到。

如果中断中有数据要处理的话,可以存放到jmp跳转到doOstart,数据在jmp之后的内存位置中,

6.设置中断向量

movax,0

moves,ax

movwordptres:

[0*4],200h

movwordptres:

[0*4+2],0

第十三章int指令

一.int指令

功能是能引发中断

取中断类型码n

标志寄存器入栈:

IF=0,TF=0

CS,IP入栈

(IP)=(n*4)(CS)=(n*4+2)

二•编写供应用程序调用的中断例程

int和iret的使用类似于call和ret

3.对in,iret和栈的深入理解

暂时不了解

4.BIOS和DOS所提供的中断例程

第十四章端口

第十五章外中断

PC机键盘的处理过程

键盘的输入

60h端口

a的通码/扫描码:

1e断码二通码+80h

引发9号中断

若IF=1,响应中断

执行int9中断例程

读出60h端口中的扫描码

如是字符型的将扫描码和对应的ASCII码送入内存中的BIOS

键盘缓冲区

如果是控制键或切换键,则将其转换为状态字节写入内存中存

储状态字节的单元

编写int9中断例程

键盘输入的处理过程:

键盘产生扫描码--扫描码送入60h端口--

引发9号中断--CPU执行int9中断例程处理键盘输入

从端口60h读出键盘的输入inal,60h

调用BIOS的int9中断例程

要先将原来的存放中断入口地址的单元储存在另外的空间中

pushes:

[9*4]

popds:

[0]

pushes:

[9*4+2]

popds:

[2]

在中断向量表中设置新的int9中断入口程序的地址

movwordptres:

[9*4],offsetint9

moves:

[9*4+2],cs

新的中断程序中要

相关寄存器进栈

读端口inal,60h

对int指令进行模拟,调用原来的int9中断例程

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > PPT模板 > 其它模板

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

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