80x86汇编语言程序设计课件-第1章基础知识_第1页
80x86汇编语言程序设计课件-第1章基础知识_第2页
80x86汇编语言程序设计课件-第1章基础知识_第3页
80x86汇编语言程序设计课件-第1章基础知识_第4页
80x86汇编语言程序设计课件-第1章基础知识_第5页
已阅读5页,还剩36页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

汇编语言程序设计

第1章基础知识

第一章基础知识

1.1什么是汇编语言1.2进位计数制及转换方法1.3

计算机中的数据组织1.4

二进制的算术运算和逻辑运算

1.1

什么是汇编语言

1.1.1

机器语言与汇编语言1.1.2

高级语言1.1.3

汇编语言的特点1.1.4

汇编语言与高级语言的比较1.1.5汇编语言的应用领域1.1.6举例1.1.1机器语言与汇编语言

1.机器语言以二进制形式的指令组成的指令集合称为计算机的机器语言。例如:计算z=x+y其中x=5,y=6;机器语言指令为:

A00000H

;将变量x中的内容5送到寄存器al02060100H;将al中的内容5加变量y中的内容6,结果送寄存器al中。

A20200H;将最终结果送变量z中。

2.汇编语言

用简单的容易记住的符号来代替用“0”或“1”来表示的机器语言就是汇编语言。例如上例:计算z=x+y其中x=5,y=6;机器语言(用十六进制表示)

汇编语言

A00000Hmoval,x02060100Haddal,yA20200Hmovz,al3.汇编语言源程序与汇编程序

用汇编语言书写的程序称为汇编语言源程序,汇编语言源程序是在编辑程序中形成的。把源程序转换变为相应的目标程序(即机器语言程序)的翻译程序称为汇编程序(汇编器)。这个翻译过程称为汇编(宏汇编)。汇编语言源程序由翻译程序翻译成代码程序(即机器语言程序)才能在机器中执行。翻译成的机器语言代码程序称为相应源程序的目标代码。

目标代码程序是源汇编程序的翻译后的程序需要经过连接程序将本程序所需要的其他目标代码连接定位形成可执行文件。图1-1

编辑、汇编与连接过程1.1.2高级语言

高级语言包括:面向过程的语言和和面向对象语言。

面向过程语言:采用的是人们所熟悉的、便于记忆的和容易理解的结构化的语言。

面向对象的语言:是从面向过程语言发展而来的,它改变了编程者的思维方式,使编程者从结构化程序设计到面向对象的程序设计,也就是把数据和处理数据的过程当作一个整体来处理,这样使程序设计更接近于自然语言,设计过程更简单,设计出来的软件质量更高。当前最常用的高级语言有:Basic、Pascal、C、C++、Java、VisualC++等。

1.1.3汇编语言的特点

汇编语言是程序设计语言的基础语言,在程序设计语言中仍占有一定的地位,是唯一可以直接与计算机硬件打交道的语言。因此,在计算机底层设计中仍采用汇编语言进行设计。汇编语言的主要特点:1.汇编语言与机器指令一一对应,可充分理解计算机的操作过程。2.汇编语言是靠近机器的语言3.汇言程序效率高于高级语言1.1.4汇编语言与高级语言的比较1.程序

高级语言:面向问题。

汇编语言:面向机器。2.软件开发

高级语言:节省软件开发时间,但不允许程序员直接使用微处理器的集成电路芯片的许多特性(寄存器、标志等)。

汇编语言:

程序编写比高级语言困难,要首先了解微机的内部结构,才能充分地发挥汇编语言的作用。3.代码生成

高级语言:

高级语言编译后产生的目标代码程序比较长。

汇编语言:

汇编语言编译后产生的目标代码程序短,因而,汇编语言程序执行速度快,所占内存少。

1.1.5汇编语言的应用领域了解计算机硬件资源嵌入式系统的底层设计操作系统的核心部分的设计是实时控制系统的软件设计接口电路的初始化程序外部设备的底层驱动程序复杂的算法优化win32汇编的应用领域在Windows下的系统分析代码优化系统漏洞和病毒分析等逆向工程技术反汇编的代码技术

通过逆向工程技术可以还原大型软件系统底层逻辑以及顶层架构,通过反汇编的代码可以加深对Windows底层理解,对高级语言的系统调试通过反汇编解决底层bug的能力。

1.2进位计数制及转换方法

1.2.1

常用的进位计数制

1.2.2

数制之间的转换

1.2.1常用的进位计数制

数制包括进位记数制和非进位记数制,在进位记数制中,数是按进位的方式记数的,如:十进制。在非进位记数制中,用不同的符号表示不同的数据,如:罗马数字

Ⅲ→3,Ⅳ→4等。

1.十进制记数法特点:(1)它的数值部分用10个不同的数值符号来表示

0~9。(2)逢十进一。【例1-1】348.573=3×100+4×10+8+5×1/10+7×1/100+3×1/1000=3×102+4×101+8×100+5×10-1+7×10-2+3×10-3

其中

10N为权,每一位基数的幂为权,十进制的基数就是10。一般式:

D=Dn-1×10n-1+Dn-2×10n-2+……+D1×101+

D0×100+D-1×10-1+D-2×10-2+……+D-m×10-m

=Di×10i

其中:n为整数位数,m为小数位数。

D=0,1,2,3,4,5,6,7,8,9;

2.二进制记数法特点:(1)它的数值部分用2个不同的数值符号来表示0或1。(2)逢二进一。【例1-2】(11011.101)2=(1×24+1×23+0×22+1×21+1×20+1×2-1+0×2-2+1×2-3

)10=(16+8+2+1+0.5+0.125)10=(27.6125)10

通过此式可以看到完成了二进制转换成十进制的转换过程,这个转换方法为按权展开法。一般式:B=Bn-1×2n-1+Bn-2×2n-2+……+B1×21+

B0×20

+B-1×2-1+B-2×2-2+……+B-m×2-m

=Bi×2I其中:n为整数位数,m为小数位数。

B=0,1。3.八进制特点:(1)它的数值部分用8个不同的数值符号来表示

,0,1,2,3,……7。(2)逢八进一。

【例1-3】(327)8=(3×82+2×81+7×80)10=(3×64+2×8

+7)10=(215)10

用按权展开法将八进制的327O转换成十进制的215D。一般式:Q=Qn-1×8n-1+Qn-2×8n-2+……+Q1×81+

Q0×80+Q

-1×8-1+Q

-2×8-2+……+Q

-m×8-m

=Qi×8i其中:n为整数位数,m为小数位数。

Q=0,1,2,3,4,5,6;

4.十六进制

特点:(1)数值部分用16个不同的数值符号来表示,

0,1,2,3…9,A,B,C,D,E,F。(2)逢十六进一

。【例1-4】将十六进制327.A转换成十进制数(327.A)16=(3×162+2×161+7×160+10×16-1)10=(768+32

+7+0.625)10=(807.625)10用按权展开法将十六进制327.AH转换成十进制的807.625D。一般式:H=Hn-1×16n-1+Hn-2×16n-2+……+H1×161+

H0×160+H

-1×16-1+H

-2×16-2+……+H

-m×16-m=H

-m×16-i

其中:n为整数位数,m为小数位数。

H=0,1,2,3,4,5,6,7,8,9,A,B,C,D,E,F;5.进位记数制小结

一般表达式:N=Nn-1×Jn-1+Nn-2×Jn-2+……+N1×J1+

N0×J0+N

-1×J-1+N

-2×J-2+……+N

-m×J-m=Ni×Ji

其中

N为数码

,取决于J进制的取值范围,如二进制数的取值范围为0或1。

n为整数位数。

m为小数位数。

J为基数。

Ji为权

(i=0,1,2……n)

特点:(1)数码是所表示的实际值,这个实际值不仅取决于数码本身,还取决于数码在数中的位置。(2)任意进制到十进制的转换采用的是按权展开法。

1.2.2数制之间的转换

编写程序时可以用十进制、十六进制、八进制和二进制,它们之间的转换应熟练掌握。

1.

二进制数转换成十进制数二进制数转换成十进制数采用的方法是按权展开法,即按权展开后再相加。【例1-5】(111.101)2=(1×22+1×21+1×20+1×2-1+1×2-3

)10=(4+2+1+0.5+0.125)10=(7.625)102.十进制数转换成二进制数十进制数转换成二进制数包括:整数部分的转换和小数部分的转换,其转换方法为:整数部分采用除2取余法或降幂法,小数部分采用乘2取整或降幂法。(1)整数【例1-6】用除2取余法计算215D=(

)B

∴215D=(B7B6B5B4B3B2B1B0)B=11010111B除2取余法也可以采用横向列式的方法,将215写在最右侧,逐步向左除2取余。(2)小数小数部分采用乘2取整或降幂法。1)乘2取整【例1-8】用乘2取整法计算0.6875D=(?)B∴0.6875D=(0.B—1B—2B—3B—4)B=0.1011B

(3)既有整数又有小数的情况

整数部分除2取余,小数部分乘2取整,也可用降幂法【例1-10】30.75D=(

)B1)整数部分采用除2取余法:137153011110余数

B4B3B2B1B0位置

30D=(

B4B3B2B1B0)B=11110B2)小数部分用乘2取整法计算0.75D=(

)B

0.75D=(0.B—1B—2

)B=0.11B∴30.75D=(B4B3B2B1B0。B—1B—2

)B=11110.11B3.十进制数转换成P进制数

十进制数转换成P进制数的方法同十进制数转换成二进制的方法相同;数整数部分除P取余,小数部分乘P取整,也可用降幂法。

4.P进制数转换成十进制数

P进制数转换成十进制数用按权展开法,既按权展开再相加。

P=

Pi×JIP=P进制所允许的数0,1……P—1J=P进制的基数,如二进制的基数为2;八进制的基数为8;十六进制的基数为16。

n=整数的位数

m=小数的位数

5.八进制与二进制之间的转换

因为:23=8

所以:一位八进制的权相当于3位二进制数

八进制

二进制

0

0001

0012

0103

0114

1005

1016

1107

11110

00100011

001001

1)八进制转换成二进制

【例1-11】(563)8

=(101110011)2【例1-12】(0.734)8=(0.111011100)2【例1-13】(563.734)8=(101110011.111011100)22)二进制转换成八进制以小数点为基准,向左右每3位1组,既3位二进制数为1位八进制数。【例1-14】(11101110011)2

=(3563)8【例1-15】(0.101011011)2=(0.533)8【例1-16】(11101110011.101011011)2=(3563.533)86.十六进制与二进制之间的转换

因为:

24=16

所以:1位十六进制的权相当于4位二进制数1)十六进制转换成二进制

【例1-17】(3AB)16=(001110101011)2【例1-18】(0.7A53)16=(0.0111101001010011)2【例1-19】(3AB.7A53)16=(001110101011.0111101001010011)2

2)二进制转换成十六进制

【例1-20】(1101111100011)2

=(1BE3)16【例1-21】(0.100101111)2

=(0.978)16

【例1-22】

(1101111100011.100101111)2

=(1BE3.978)16

16进制2进制00000100012001030011.......91001A1010B1011C1100D1101E1110F11117.

八进制与十六进制之间的转换

以二进制为桥梁进行转换

8→2→1616→2→8【例1-23】(765)8=(111110101)2=(1F5)16【例1-24】(0AB)16=(10101011)2=(253)8注意:十六进制数以A,B,C,D,E,F打头要在数的前面补0。

8.小结1)

P进制→十进制:按权展开后相加。2)

十进制→P进制:整数部分除P取余,小数部分乘P取整。3)

二进制←→八进制

2→8:

以小数点为界三位二进制数为一位八进制数

8→2:

一位八进制数写成三位二进制数。4)二进制←→十六进制

2→16:

以小数点为界四位二进制数为一位十六进制数。

16→2:

将一位十六进制数分为四位二进制数。5)

八进制←→十六进制

以二进制为桥梁进行转换。

8→2→1616→2→81.3

计算机中的数据组织

1.3.1数据组织方式1.3.2数的表示方法1.3.3字符的表示方法1.3.1数据组织方式1.位(Bit)位是计算机中表示信息的最小单位,是一个二进制位,每一位用二进制的“0”或“1”表示。2.字节(Byte)

8位二进制数为1个字节,

每个字节为8位二进制数。1个字节可以表示28个不同的值,即0~255(用二进制表示为:00000000B~11111111B),共256个不同的值。

图1-2字节的表示形式

3.字(Word)字是在操作中作为一个单元处理的一组数据,一般1个字包含2个字节,1个字可以表示216个不同的值,即0~65535(用十六进制表示为:0000H~FFFFH),共65536个不同的值。如图1-3为用1个字(2字节)来表示65534的二进制的表示方法。图1-3字的表示形式最高位最低位4.双字(DoubleWord)2个字节为1个字,4个字节为2个字,也称为双字,1个双字可以表示232个不同的值,即0~(用十六进制表示为:00000000H~FFFFFFFFH),共个不同的值。如图1-4为双字的表示形式。

图1-4双字的表示形式5.字长机器字的长度为字长,是计算机中每个字所包含的位数。8088/8086CPU为16位数据总线数,因此,8088/8086CPU的机器字长为16位,也称为16位机。如:80386DX/80486CPU的数据总线数为32位,机器字长就为32位。Pentium机的数据总线数为64位,机器字长就为64位。6.数据字与指令字在存储单元中是存放的都是二进制数,2字节的二进制数,所表示的如果是数据,为数据字。所表示的如果是指令,为指令字。例如:计算z=x+y其中x=5,y=6;为了书写方便用十六进制来表示机器指令:A00000(3字节)02060100(4字节)A20200(3字节)低字高字1.3.2数的表示方法

1.数制

计算机内部是采用二进制数(Binary)进行操作和运算的。在编写汇编语言源程序时,为了书写方便,可以使用:十进制数(D)

八进制数(O)十六进制数(H)

需要注意的问题:

通过汇编程序把汇编语言源程序转换为目标程序时,程序中的十进制数、八进制数、十六进制数均由汇编程序自动转换成二进制数。

2.带符号数和不带符号数每个字节或字的最高位设置为符号位。当符号位为0时,该数为正数。当符号位为1时,该数为负数。若用8位二进制来表示1个十进制数,则D7位为符号位,D6~D0位为数字位。

+10501101001B

-10511101001B(机器数)为了便于计算机运算,通常采用补码来表示带符号数。(1)带符号数

1)计算机中为什么采用补码的概念数字圆盘的例子:a、首先通过观察孔看到的是5,图1-5Ⅰ所示。b、按顺时方向转3格看到8,即5+3=8,图Ⅱ所示c、在图Ⅱ中,通过观察孔看到的是8,接着按逆时针方向反向转4格看到4,即8—4=4按箭头反方向转4格看到4,如图Ⅲ所示。d、在图Ⅱ中,通过观察孔看到的是8,如果接着按顺时针方向转6格也是4,如图Ⅳ所示,实际上是做了8+6=14,1为进位,数字轮子表示不出来,也就是自然丢掉了。做了8-4的工作。通过这个例子可以看到减法可以用加法来实现。5844逆时针转4格与顺时针转6格结果相同!2)同余的概念对于两个整数a、b,若用某一个正整数m去除,所得的余数相同,我们就说a、b对模m同余。记作

a≡b(modm)如:

8-4=4a=48+6=14b=14

用模10去除a、b得到的余数都是44≡14(mod10)-4和+6对模10互为补数要解决的问题:如何把8—4这个问题变成8+6来计算呢?采用模10-4=6结论:对于某一确定的模,某数减去小于模的一个数总可以用加上该数的负数与模之和(补数)来代替。如:十进制时模为10,某数8减小于模10的数4,

总可以用8+(模-4)来完成。即:8-4可以用8+(10-4)=8+6=4(其中进位10自然丢掉)来完成。3)补码的特点

a、

对于正数,补码与实际值一致,符号位为0。

b、

对于负数,补码与实际值互补。(补码是实际值每位取反码,末尾加1)

c、

[+0]补=[-0]补=00000000d、8位字长的表示范围:

+127~-128,

01111111B—10000000Be、用补码运算后,运算结果符号位如果为“0”,数

值部分就是此运算的最终结果,符号位如果为“1”,

数值部分不是运算结果,而是要把数值部分再取

补,得到的才是最终运算结果。8位二进制补码的数的表示范围16位二进制补码的数的表示范围十进制数二进制数十六进制数7F7E………020100000000000—111111111FF一211111110FE………一1261000001082—1271000000181—1281000000080十进制数十六进制数7FFF7FFE……

00000—1FFFF一2FFFE……一327668002—327678001—327688000

表1-28位、16位二进制补码的数的表示范围4)举例【例1-25】机器字长为8位,计算

65-10=[?]265-10=65+(-10)

[65]10=[01000001]2=[01000001]2补

[-10]10=[10001010]2=[11110110]2补将[-10]10=[10001010]2取补码,方法是用模减去二进制的[0001010]2。

假设机器字长为8位二进制数,则模为100000000B,所以对[10001010]2取补:

5)8位和16位二进制补码数的表示范围

带符号数

对于8位二进制的带符号数:

可表示的最大正数为01111111B(

或7FH、+127)。

可表示的最小负数为10000000B(或80H、一128)。

对于

16位二进制的带符号数:

可表示的最大正数为0111111111111111B

或7FFFH、

+32767)。

可表示的最小负数为100000000000000B

(或8000H、-32768)。

不带符号数

8位无符号数的表示范围:00000000B~11111111B

(00H~0FFH、0~255)。

16位无符号数的表示范围:

0000000000000000B~1111111111111111B

(0000H~0FFFFH、0~65535)3、

BCD码与8421码

BCD码就是1位十进制数用4位二进制表示,而这4位二进制是用8421码表示,其中四位二进制数0000~1001表示十进制数0~9,其余的四位二进制

数1010~111l不用。

表1.1BCD码与8421码十进制BCD码8421码000000000100010001200100010300110011401000100501010101601100110701110111810001000910011001100001000010103、BCD码与8421码(1)组合型BCD码(压缩型)

1个字节表示2个BCD码,因此,组合型BCD码数的表示范围为0~99,最小数据为00000000B,最大数据为10011001B。十进制57用组合型BCD码表示如图1.5所示。(2)非组合型(非压缩型)

1个字节表示1个BCD码因此,非组合型BCD码数的表示范围为0~9,最小数据为00000000B,最大数据为00001001B。十进制7用非组合型BCD码表示如图1.6所示。

图1.5组合型BCD码图1.6非组合型BCD码

【例1-29】将十进制数6532转换成组合型BCD码(6532)10=(0110010100110010)组合型BCD码

【例1-30】将十进制数1024转换成非组合型BCD码(1024)10=(000

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论