汇编语言基础知识-进制转换_第1页
汇编语言基础知识-进制转换_第2页
汇编语言基础知识-进制转换_第3页
汇编语言基础知识-进制转换_第4页
汇编语言基础知识-进制转换_第5页
已阅读5页,还剩66页未读 继续免费阅读

下载本文档

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

文档简介

汇编语言程序设计

第一页,共七十二页。先修课程高级语言程序设计教材《汇编语言及应用教程》,李浪熊江齐忠主编,华中科技大学出版社

参考书《IBM-PC汇编语言程序设计(第2版)》,沈美明温冬婵编著,清华大学出版社《汇编语言》,王爽编,清华大学出版社学时课堂教学32学时,上机实践8学时第二页,共七十二页。考核方式期末考试:60%

平时成绩:40%作业:10%上机:30%作业:40%第三页,共七十二页。程序一词来自生活,通常指完成某些事务的一种既定方式和过程在日常生活中,可以将程序看成对一系列动作的执行过程的描述什么是程序介绍你从住处到学校上课的过程第四页,共七十二页。银行1、带上存折/银行卡去银行3、将存折或储蓄卡递给银行职员并告知取款数额2、取号排队5、银行职员办理取款事宜生活中的程序6、拿到钱并离开银行4、输入密码

第五页,共七十二页。什么是指令?1、做口述笔记……2、键入信函的内容……3、发送传真……1、口述2、信函movax,yaddax,xmovsum,ax指令被逐条执行程序员老板秘书计算机程序:为了让计算机执行某些操作或解决某个问题而编写的一系列有序指令的集合

要执行的一组指令程序3、传真计算机中的程序编写程序的工具就是计算机语言,汇编就是多种语言中的一种第六页,共七十二页。汇编语言是什么?汇编语言能做什么?汇编语言为什么学?汇编语言怎么学?第七页,共七十二页。初始汇编语言汇编语言机器语言高级语言FORTRANBASICPASCALC/C++JAVAScript……第八页,共七十二页。xword?yword?sumword?movx,100movy,200movax,yaddax,xmovsum,ax66C70500204000640066C70502204000C80066A1022040006603050020400066A304204000intx,y,sum;x=100;y=200;sum=x+y;机器语言汇编语言C/C++语言3种类型语言之间的直观比较第九页,共七十二页。机器语言机器语言真正唯一能让CPU直接识别的语言。它是用二进制编码表示的机器指令的集合及一组使用机器指令的规则。例1:用8086机器语言实现简单加法(2200H)+(2201H)结果存放在(2202H)中的程序片段:用16进制表示A00022;将(2200H)中的数送到AL中02060122;将(AL)+(2201H),和数送到AL中A20222;将(AL)送回(2202H)中第十页,共七十二页。机器语言优缺点优点:目标程序小,执行速度快,效率高;缺点:表达的意义不直观,编写、阅读、调试较困难。第十一页,共七十二页。汇编语言汇编语言:是一种符号语言,与机器语言一一对应;使用助记符表示相应的操作,并遵循一定的语法规则。与机器语言有类似的优缺点,比机器语言更容易所理解。A0002202060122A20222MOVAL,[2200H]ADDAL,[2201H]MOV[2202H],AL第十二页,共七十二页。高级语言高级语言:面向人的语言,有多种类型。优缺点优点:便于阅读,易学易用,不涉及硬件,具有通用性;缺点:目标代码冗长,占用内存多,从而执行时间长,效率不高,不能对某些硬件进行操作。第十三页,共七十二页。高级语言与汇编语言开销对比下面是两个小例子,例2是用高级语言VC++编写的,例3是用汇编语言编写的。它们完成相同的功能。例2#include"stdio.h"main(){inta,b,c;a=1;b=2;c=a+b;printf(“c=%d\n",c); }编译后的目标文件达到3.59KB第十四页,共七十二页。高级语言与汇编语言开销对比datasegmentadb?bdb?cdb?stringdb'c=$'dataendscodesegmentmainprocfarassumecs:code,ds:data,es:datastart: pushds subax,ax pushax movax,data movds,ax moves,ax

mova,1 movb,2 moval,a addal,b movc,al leadx,string movah,09 int21h addc,30h movdl,c movah,2 int21h movdl,0ah int21h movdl,0dh int21h retmainendpcodeends

endstart汇编后的目标文件只有208字节例3第十五页,共七十二页。

用高级语言和汇编语言书写的程序均不能被CPU直接识别并执行,这些程序通称源程序。因此,所有源程序都必须翻译成目标程序后才能被CPU执行。高级语言程序、汇编语言程序和机器语言程序的关系:高级语言源程序编译解释汇编语言源程序汇编目标程序相应编译器或解释程序汇编程序汇编程序则专门负责完成将汇编语言源程序翻译为目标程序第十六页,共七十二页。汇编语言相对于高级语言的特点:汇编语言是面向机器的语言,它的指令语句与机器指令一一对应,是机器指令的符号表示。因此,对于不同类型的cpu,要求使用不同的汇编语言和汇编程序。汇编语言保持了机器语言的特点,具有直接和简捷的特点。汇编语言可有效地访问、控制计算机的各种硬件设备,如磁盘、存储器、cpu、I/O端口等。汇编语言程序目标代码简短,占用内存少,执行速度快,是高效的程序设计语言。汇编语言程序编写繁琐。汇编语言程序调试困难。单条指令功能有限通用集成编程环境少第十七页,共七十二页。汇编语言能做什么?(应用)对软件的执行时间或存储容量有较高要求的场合。

例如:实时控制系统、智能化仪器仪表及高性能软件。需要提高大型软件性能的场合。

例如:某些快速处理、位处理等高效程序用汇编语言编写的与硬件关系密切,要直接有效控制硬件的场合。其它不适合高级语言的场合。经常和高级语言配合使用。是否采用汇编语言编程,主要权衡软件的开发时间及软件的质量。适度地追求“时空”效率第十八页,共七十二页。为什么学习汇编语言评论语言优劣,如同争论兵器高下!高级语言长兵器汇编语言威力强大却难免滞重,长于大型应用,可谓“一寸长,一寸强”轻巧灵活却难免有风险,长于底层应用,可谓“一寸短,一寸险”西门吹雪的一剑西来,那是c语言;李寻欢的小李飞刀,那是汇编语言;陆小凤的灵犀一指,那是机器语言。短兵器第十九页,共七十二页。

汇编语言指令是用一些具有相应含义的助记符来表达的,是对机器指令的一种直观对应表达

汇编语言指令与机器密切相关,不同的机器有不同的指令系统,比如:8086vs80386,使得移植性差

正是因为汇编语言有“机器相关”特性,所以程序员写汇编程序时候,可以充分发挥自己的聪明才智,对机器的各种资源进行合理的安排,使他们始终处于最佳的使用状态,最终效果是:程序的执行代码短,执行速度快。现在高级语言编译程序在进行寄存器分配和目标代码生成时,都有一定程度的“优化策略”,但是这种策略要适应各种不同情况,所以,高级语言的这种优化只能在宏观上,不能在微观上。反观汇编,程序员几乎就是直接在写执行代码,故此,可以在具体细节上进行优化。(这是汇编高效率的直接原因)汇编语言怎么学好第二十页,共七十二页。汇编语言怎么学好

汇编语言是一种面向机器的语言,其汇编指令与机器指令基本上一一对应,所以汇编语言也同机器指令一样具有功能单一、具体的特点。要想完成某件工作(比如计算A+B+C),就必须安排CPU的每步工作(比如:先计算A+B,再将C加到前者的结果上)。故此:由于汇编语言要安排运算的每一个细节,这就使得编写汇编语言程序比较繁琐,复杂。一个简单的计算公式,也要用一系列汇编指令一步一步来实现。 我们可以看出,编程者是个事无巨细的导演,要操心每一步,对每一个演员(数据)的每个动作进行指导(指令)。而不能象高级语言那样当甩手掌柜!“事事操心、操心事事”第二十一页,共七十二页。对汇编程序调试的复杂性要有心理准备

在通常情况下,调试汇编语言程序要比调试高级语言困难:1.汇编语言指令涉及到机器资源的细节,在调试过程中,要清楚每个资源的变化情况;2.在编写汇编语言程序时,为了提高资源的利用率,可以使用各种实现技巧,而这些技巧完全有可能破坏程序的可读性。于是,在调试过程中,除了要知道每条指令的执行功能,还要清楚它在整个目标实现过程中的作用;3.高级语言几乎不显示的使用“转移指令”,但汇编语言要用到大量的各类转移指令,这些跳转指令大大增加了调试的难度。如果在汇编语言中不使用“转移指令”,那么,汇编程序就变成了单调的顺序程序,这很不现实!第二十二页,共七十二页。汇编语言怎么学好

对初学者而言,汇编的命令太复杂,往往学习很长时也写不出一个漂漂亮亮的程序,以至妨碍了我们学习汇编语言的热情,不少人就此放弃。要有持之以恒的必胜信心!

为了使学习汇编语言有个好的开始,你必须要先排除那些华丽复杂的命令,将注意力集中在一些重要的指令上,比如:CMP、LOOP、MOV、JMP、…。第二十三页,共七十二页。汇编语言怎么学好最重要的一点就是:实践出真知,多写、多练、多读、多分析要有自信心,你们是最棒的第二十四页,共七十二页。学习方法兴趣是最好的老师!Attitudeiseverything!实践是检验真理的唯一标准!专注、扎实、细致、沉得住气、坚持第二十五页,共七十二页。学习目标了解以Intel系列微处理器为基础的PC机的基本结构(编程结构)掌握Intel系列微处理器的指令系统及寻址方式熟悉汇编程序的上机操作环境会读、会编、会调试汇编程序第二十六页,共七十二页。课程要求课堂上注意听讲、重要的是理解部分补充例题等内容需要笔记课堂外一定要看书复习或预习、独立、认真完成作业充分利用上机时间、多编程练习第二十七页,共七十二页。汇编语言预备知识复习我们的惯用思维是十进制,但计算机的世界是二进制,无论是高级语言还是汇编语言最终都要转换为机器语言,即二进制形式。本节我们要复习:1、进位计数制2、不同基数的数之间的转换,特别是二进制十进制、二进制十六进制之间的转换。3、不同基数的数的运算4、机器数的表示,重点掌握有符号数的补码表示第二十八页,共七十二页。数制十进制:基数为10,逢十进一,权为10k12.34=1×101+2×100+3×10-1+4×10-2

二进制:基数为2,逢二进一,权为2k(1101)2=1×23+1×22+1×20=(13)10十六进制:基数为16,逢十六进一,权为16k(9187)16=9×163+1×162+8×161+7×160八进制:基数为8,逢八进一,权为8k(147)8=1×82+4×81+7×80第二十九页,共七十二页。例:若要写一个八进制数197,对否例:同样的一串数字101,若表示的数制不一样,其含义也不一样,如下:十进制数101D= 二进制数101B= 八进制数101O=那么如何区分它们呢 现对常用进制数归纳总结如下:数制第三十页,共七十二页。在计算机中为了区分不同数制的数据,采用以下方法:十进制数-----后跟D八进制数-----后跟O二进制数-------后跟B十六进制数----后跟H第三十一页,共七十二页。进制转换十进制数126转换为二进制和十六进制1266331220215731021222……………………………………1111126D=1111110B

11267016E167…………126D=7Eh

余第三十二页,共七十二页。十进制小数0.8125转换为二进制和十六进制0.8125×

21.6250……1×

21.250……1×

20.5……0×

21.0……10.8125D=0.1101B

0.8125×

1613.0000

……D0.8125D=0.DH

00整第三十三页,共七十二页。二进制数和八进制数相互转换

1011101001.110101B==1

3

5

1.6

5O123.75O=

B=1010011.111101B0011010111.11010100001010011.111101第三十四页,共七十二页。算数运算二进制加法规则乘法规则0+0=00×0=0 0+1=10×1=01+0=01×0=01+1=0(进位1)1×1=1十六进制05C335+3D25-05C3

42E8H3762H11D2C18D第三十五页,共七十二页。逻辑运算(按位操作)“与”运算(AND)

ABA∧B000010100111“或”运算(OR)

ABA∨B000011101111“异或”运算(XOR)

ABA∨B000011101110“非”运算(NOT)

AA0110

第三十六页,共七十二页。例:X=00FFHY=5555H,求Z=XY=?

X=0000000011111111BY=0101010101010101BZ=0101010110101010B

∴Z=55AAH第三十七页,共七十二页。数(机器数)的表示正数8的八位二进制形式为:00001000负数8怎么表示呢?第三十八页,共七十二页。数(机器数)的表示计算机中的数用二进制表示,分为无符号数和有符号数。有符号数的符号也用二进制位表示。例如:

76543210数值位

76543210数值位8位二进制无符号数:符号位符号位有符号数的最高位符号位=0表示正数符号位=1表示负数8位二进制无符号数:第三十九页,共七十二页。机器数的表示方法1.原码把一个数的最高位定义为符号位,用0表示正,用1表示负,其余位表示真值的绝对值当机器字长n=8时,[+0]原=00000000B [-0]原=10000000B[+8]原=00001000B [-8]原=10001000B[+127]原=01111111B [-127]原=11111111B

第四十页,共七十二页。注:1)8位二进制原码表示数的范围为-127+127,16位二进制原码表示数的范围为-32767+327672)正数的原码是它本身;3)数值0的原码有两种形式:[+0]原码=00000000;[-0]原码=10000000第四十一页,共七十二页。引入反码和补码为了实现以上的功能,我们引入反码和补码的概念3-2减法运算,通常转化为3+(-2)加法运算,怎么实现?第四十二页,共七十二页。2.反码正数的反码与其原码形式相同;负数的反码是对其原码符号位不变(仍为1),其余各位“按位取反”得到的数例如,当机器字长n=8时:[+127]原=01111111B[+127]反=01111111B

[-127]原=11111111B[-127]反=10000000B当机器字长n=16时:[+8]原=0000000000001000B[-8]反第四十三页,共七十二页。反码1)8位二进制反码表示数的范围为-127+1272)16位二进制反码表示数的范围为-32767+327673)正数的反码与其原码相同4)“0”的反码有两种表示法:00000000表示+0,11111111表示-0。第四十四页,共七十二页。引入补码(-2)+3=-1

二进制(原码)加法

二进制(反码)加法10000010[-2]原

11111101[-2]反

+)00000010[+3]原

+)00000011[+3]反10000100[-4]原00000010[=+2]反日常生活我们用十进制算计算机用二进制原码算计算机用二进制反码算第四十五页,共七十二页。补码使符号位能与有效值部分一起参加运算,从而简化运算规则使减法运算转换为加法运算,进一步简化计算机中运算器的线路设计

为了统一正0和负0引入补码的原因:第四十六页,共七十二页。正数的补码与其原码、反码相同例如,当机器字长n=8时:[+8]补=[+8]反=[+8]原=00001000B [+127]补=[+127]反=[+127]原=01111111B当机器字长n=16时: [+8]补=[+8]反=[+8]原=0000000000001000B [+127]补=[+127]反=[+127]原=0000000001111111B第四十七页,共七十二页。有符号数的补码表示正数的补码形式

绝对值的二进制数形式,符号位=0负数的补码形式2n-绝对值补码,n为二进制的位数。补码的物理意义?第四十八页,共七十二页。补码物理意义考虑8位二进制数,其表示范围为0~255,即256=0。若将其想象为一个环,以0为基点,向顺时针方向移246个单位,则得246。然而,若按逆时针方向移动,则该位置就是-10。即 -10=0F6H=246因此,在8位二进制表示下,对于负数x(-128~-1)来说,存在下列等式: -x=256-∣x∣第四十九页,共七十二页。补码实例在日常生活中,补码的例子是很多的,如时钟的校对就是其中一例。设标准时间是6点整,而时针现在指向10点整。若要将时针拨到6点整,可有两种拨法:(1)10-4=6,采用倒拨的办法实现,将时针倒拨4小时。(2)10+8=6,采用顺拨的办法实现,将时针顺拨8小时,时针指向6点整。这儿倒拨与顺拨的效果是相同的,也即是互补的。在时钟以12为模的条件下,-4与+8是互补的。第五十页,共七十二页。例:机器字长8位,[-46]补码=?

[46]补码

=

00101110

1101000111010010=D2H

[46]补码

=00101110

11010010=0D2H

[-46]补码=0D2H按位求反末位加一按位求反最右的1快速得到负数补码的两种方法:先得出其绝对值对应的二进制形式,然后对该二进制数按位变反,最后再将变反后的结果加1.先得出其绝对值对应的二进制形式,然后将该二进制数最右边为1的位不变,其所有左边位按位变反。第五十一页,共七十二页。补码实例[+0]补码=00000000

1111111100000000=[-0]补码

0的表示惟一按位求反末位加一第五十二页,共七十二页。求-1105的补码表示当n=16时:|-1105|=1105=0000

01000101

0001B按位求反后得:1111

1011

1010

1110B

最低位加1后:1111

10111010

1111B所以:[-105]补=[-105]反+1=FBAEH+1=FBAFH第五十三页,共七十二页。求-1105的补码表示当n=32时:|-1105|=1105=00000000000000000000010001010001B按位求反后得:

01110101110B最低位加1后得:

01110101111B所以:[-105]补=[-105]反+1

=FFFFFBAEH+1=FFFFFBAFH第五十四页,共七十二页。反过来:求补码81A4H的真值∵补码81A4H的最高位(符号位)为1∴补码81A4H是负数的补码。对81A4求补:1.81A4H=100000011010

0100b2.按位求反得:1111111001011011b3.加1后得:111111100101

1100b=32348所以,补码81A4H对应的真值是-32348。

第五十五页,共七十二页。反过来:求补码71A4H的真值∵补码71A4H的最高位(符号位)为0∴补码71A4H是正数的补码(即原码)所以,补码71A4H对应的真值是29092第五十六页,共七十二页。1)8位二进制补码表示数的范围为-128+1272)16位二进制补码表示数的范围为-32768+327673)0的补码表示是唯一的,都为00000000第五十七页,共七十二页。补码的加减运算符号位和数值位一起参加运算,并且自动获得结果(包括符号位与数值位)补码的符号位相加后,如果有进位出现,要把这个进位舍去(自然丢失)补码运算,其运算结果亦为补码。在转换为真值时,若符号位为0,数位不变;若符号位为1,应将结果求补才是其真值

第五十八页,共七十二页。补码加法1.补码加法补码加法的运算规则为:即:两数补码的和等于两数和的补码。第五十九页,共七十二页。例已知[+51]补=00110011B,[+66]补=01000010B,[-51]补=11001101B,[-66]补=10111110B

求[+66]补+[+51]补=?[+66]补+[-51]补=?[-66]补+[-51]补=?解:

二进制(补码)加法十进制加法01000010[+66]补+66+)00110011[+51]补+)+5101110101[+117]补+117

日常生活我们用十进制算计算机用二进制补码算对比结果是否正确第六十页,共七十二页。

二进制(补码)加法十进制加法01000010[+66]补+66+)11001101[-51]补+)-5100001111[+15]补+151自动丢失对比结果是否正确

二进制(补码)加法十进制加法10111110[-66]补-66+)11001101[-51]补+)-5110001011[-117]补-1171自动丢失对比结果是否正确第六十一页,共七十二页。2.补码减法补码减法的运算规则为:

第六十二页,共七十二页。

例:

已知[+51]补=00110011B,[+66]补=01000010B[−51]补=11001101B,[−66]补=10111110B求[+66]补−[+51]补=?[-66]补--[-51]补=?解 [+66]补-[+51]补=[+66]补+[-51]补 [-66]补-[-51]补=[-66]补+[+51]补

第六十三页,共七十二页。

二进制(补码)加法十进制加法10111110[-66]补-66+)00110011[+51]补-)-5111110001[-15]补-15

二进制(补码)加法十进制加法01000010[+66]补+66+)11001101[-51]补-)+5100001111[+15]补+151自动丢失对比结果是否正确对比结果是否正确第六十四页,共七十二页。可以看出,无论被减数、减数是正数还是负数,上述补码减法的规则都是正确的。同样,由最高位向更高位的进位会自动丢失而不影响运算结果的正确性。

第六十五页,共七十二页。补码的加法和减法:求补运算

:对一个二进制数按位求反、末位加一

求补求补[X]补码

[-X]补码

[X]补码加法规则:[X+Y]补码

=[X]补码

+[Y]补码减法规则:[X-Y]补码

=[X]补码

+[-Y]补码

补码减法可转换为补码加法64(-46)

18+010000001101001000010010+例:第六十六页,共七十二页。进位和溢出进位:由于运算结果超出了位数,最高有效位向前的进位,这一位自然丢失,一般不表示结果的对错。溢出:表示结果超出了字长允许表示的范围,一般会造成结果出错。例:(-64)1100000012701111111+6401000000+10000000101

00000000128

1

温馨提示

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

评论

0/150

提交评论