汇编语言基础知识-进制转换.ppt

上传人:max****ui 文档编号:15493854 上传时间:2020-08-12 格式:PPT 页数:71 大小:1.72MB
返回 下载 相关 举报
汇编语言基础知识-进制转换.ppt_第1页
第1页 / 共71页
汇编语言基础知识-进制转换.ppt_第2页
第2页 / 共71页
汇编语言基础知识-进制转换.ppt_第3页
第3页 / 共71页
点击查看更多>>
资源描述
汇编语言程序设计,考核方式,期末考试: 60 平时成绩: 40,作业: 10,上机: 30,作业: 40,程序一词来自生活,通常指完成某些事务的一种既定方式和过程 在日常生活中,可以将程序看成对一系列动作的执行过程的描述,什么是程序,介绍你从住处到学校上课的过程,银行,1、带上存折/银行卡去银行,3、将存折或储蓄卡递给银行职员并告知取款数额,2、取号排队,5、银行职员办理取款事宜,生活中的程序,6、拿到钱并离开银行,4、输入密码,什么是指令?,1、做口述笔记 2、键入信函的内容 3、发送传真,mov ax, y add ax, x mov sum ,ax,指令被逐条执行,程序员,老板,秘书,计算机程序:为了让计算机执行某些操作或解决某个问题而编写的一系列有序指令的集合,要执行的一组指令,程序,计算机中的程序,编写程序的工具就是计算机语言,汇编就是多种语言中的一种,汇编语言是什么?,汇编语言能做什么?,汇编语言为什么学?,汇编语言怎么学?,初始汇编语言,汇编语言,机器语言,高级语言,FORTRAN BASIC PASCAL C/C+ JAVA Script ,x word ? y word ? sum word ? mov x, 100 mov y,200 mov ax, y add ax, x mov sum ,ax,66C705002040006400 66C70502204000C800 66A102204000 66030500204000 66A304204000,int x, y, sum; x=100; y=200; sum=x+y;,机器语言,汇编语言,C/C+语言,3种类型语言之间的直观比较,机器语言,机器语言 真正唯一能让CPU直接识别的语言。它是用二进制编码表示的机器指令的集合及一组使用机器指令的规则。,例1:用8086机器语言实现简单加法(2200H)+(2201H) 结果存放在(2202H)中的程序片段:用16进制表示,A0 00 22 ;将(2200H)中的数送到AL中 02 06 01 22 ;将(AL)+(2201H),和数送到AL中 A2 02 22 ;将(AL)送回(2202H)中,机器语言,优缺点,优点:目标程序小,执行速度快,效率高; 缺点:表达的意义不直观,编写、阅读、调试较困难。,汇编语言,汇编语言:是一种符号语言,与机器语言一一对应;使用助记符表示相应的操作,并遵循一定的语法规则。 与机器语言有类似的优缺点,比机器语言更容易所理解。,A0 00 22 02 06 01 22 A2 02 22,MOV AL , 2200H ADD AL , 2201H MOV 2202H , AL,高级语言,高级语言:面向人的语言,有多种类型。,优缺点,优点:便于阅读,易学易用,不涉及硬件,具有通用性; 缺点:目标代码冗长,占用内存多,从而执行时间长,效 率不高,不能对某些硬件进行操作。,高级语言与汇编语言开销对比,下面是两个小例子,例2是用高级语言VC+编写的,例3是用汇编语言编写的。它们完成相同的功能。 例2,#include stdio.h main() int a,b,c; a=1; b=2; c=a+b; printf(“c=%dn,c); ,编译后的目标文件 达到3.59KB,高级语言与汇编语言开销对比,data segment a db ? b db ? c db ? string db c=$ data ends code segment main proc far assume cs:code, ds:data, es:data start: push ds sub ax,ax push ax mov ax,data mov ds,ax mov es,ax,mov a,1 mov b,2 mov al,a add al,b mov c,al lea dx,string mov ah,09 int 21h add c,30h mov dl,c mov ah,2 int 21h mov dl,0ah int 21h mov dl,0dh int 21h ret main endp code ends end start,汇编后的目标 文件只有 208字节,例 3,用高级语言和汇编语言书写的程序均不能被CPU 直接识别并执行,这些程序通称源程序。 因此,所有源程序都必须翻译成目标程序后才能被CPU执行。,高级语言程序、汇编语言程序和机器语言程序的关系:,高级语言源程序,编译 解释,汇编语言源程序,汇编,目标程序,相应编译器或解释程序,汇编程序,汇编语言相对于高级语言的特点:,汇编语言是面向机器的语言,它的指令语句与机器指令一一对应,是 机器指令的符号表示。因此,对于不同类型的cpu,要求使用不同的汇编语言和汇编程序。 汇编语言保持了机器语言的特点,具有直接和简捷的特点。 汇编语言可有效地访问、控制计算机的各种硬件设备,如磁盘、存储器、cpu、I/O端口等。 汇编语言程序目标代码简短,占用内存少,执行速度快,是高效的程序设计语言。 汇编语言程序编写繁琐。 汇编语言程序调试困难。,单条指令功能有限 通用集成编程环境少,汇编语言能做什么?(应用),对软件的执行时间或存储容量有较高要求的场合。 例如:实时控制系统、智能化仪器仪表及高性能软件。 需要提高大型软件性能的场合。 例如:某些快速处理、位处理等高效程序用汇编语言编写的 与硬件关系密切,要直接有效控制硬件的场合。 其它不适合高级语言的场合。 经常和高级语言配合使用。,是否采用汇编语言编程,主要权衡软件的开发时间及软件的质量。,适度地追求“时空”效率,为什么学习汇编语言,评论语言优劣,如同争论兵器高下!,高级语言,长兵器,汇编语言,威力强大却难免滞重,长于大型应用,可谓“一寸长,一寸强”,轻巧灵活却难免有风险,长于底层应用,可谓“一寸短,一寸险”,西门吹雪的一剑西来,那是c语言;李寻欢的小李飞刀,那是汇编语言;陆小凤的灵犀一指,那是机器语言。,短兵器,汇编语言指令是用一些具有相应含义的助记符来表达的,是对机器指令的一种直观对应表达,汇编语言指令与机器密切相关,不同的机器有不同的指令系统,比如:8086 vs 80386,使得移植性差,正是因为汇编语言有“机器相关”特性,所以程序员写汇编程序时候,可以充分发挥自己的聪明才智,对机器的各种资源进行合理的安排,使他们始终处于最佳的使用状态,最终效果是:程序的执行代码短,执行速度快。现在高级语言编译程序在进行寄存器分配和目标代码生成时,都有一定程度的“优化策略”,但是这种策略要适应各种不同情况,所以,高级语言的这种优化只能在宏观上,不能在微观上。反观汇编,程序员几乎就是直接在写执行代码,故此,可以在具体细节上进行优化。(这是汇编高效率的直接原因),汇编语言怎么学好,汇编语言怎么学好,汇编语言是一种面向机器的语言,其汇编指令与机器指令基本上一一对应,所以汇编语言也同机器指令一样具有功能单一、具体的特点。要想完成某件工作(比如计算A+B+C),就必须安排CPU的每步工作(比如:先计算A+B,再将C加到前者的结果上)。 故此:由于汇编语言要安排运算的每一个细节,这就使得编写汇编语言程序比较繁琐,复杂。一个简单的计算公式,也要用一系列汇编指令一步一步来实现。,我们可以看出,编程者是个事无巨细的导演,要操心每一步,对每一个演员(数据)的每个动作进行指导(指令) 。而不能象高级语言那样当甩手掌柜! “事事操心、操心事事”,对汇编程序调试的复杂性要有心理准备,在通常情况下,调试汇编语言程序要比调试高级语言困难: 1.汇编语言指令涉及到机器资源的细节,在调试过程中,要清楚每个资源的变化情况; 2.在编写汇编语言程序时,为了提高资源的利用率,可以使用各种实现技巧,而这些技巧完全有可能破坏程序的可读性。于是,在调试过程中,除了要知道每条指令的执行功能,还要清楚它在整个目标实现过程中的作用; 3.高级语言几乎不显示的使用“转移指令”,但汇编语言要用到大量的各类转移指令,这些跳转指令大大增加了调试的难度。如果在汇编语言中不使用“转移指令”,那么,汇编程序就变成了单调的顺序程序,这很不现实!,汇编语言怎么学好,对初学者而言,汇编的命令太复杂,往往学习很长时也写不出一个漂漂亮亮的程序,以至妨碍了我们学习汇编语言的热情,不少人就此放弃。要有持之以恒的必胜信心!,为了使学习汇编语言有个好的开始,你必须要先排除那些华丽复杂的命令,将注意力集中在一些重要的指令上,比如:CMP、LOOP、MOV、JMP、。,汇编语言怎么学好,最重要的一点就是:,实践出真知,多写、多练、多读、多分析 要有自信心,你们是最棒的,学习方法,兴趣是最好的老师! Attitude is everything! 实践是检验真理的唯一标准!,专注、扎实、细致、沉得住气、坚持,学习目标,了解以Intel系列微处理器为基础的PC机的基本结构(编程结构) 掌握Intel系列微处理器的指令系统及寻址方式 熟悉汇编程序的上机操作环境 会读、会编、会调试汇编程序,课程要求,课堂上注意听讲、重要的是理解 部分补充例题等内容需要笔记 课堂外一定要看书复习或预习、独立、认真完成作业 充分利用上机时间、多编程练习,汇编语言预备知识复习,我们的惯用思维是十进制,但计算机的世界是二进制,无论是高级语言还是汇编语言最终都要转换为机器语言,即二进制形式。 本节我们要复习:,1、进位计数制 2、不同基数的数之间的转换,特别是二进制 十进制、 二进制 十六进制之间的转换。 3、不同基数的数的运算 4、机器数的表示,重点掌握有符号数的补码表示,数制,十进制:基数为10,逢十进一,权为10k 12.34 = 1101 + 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 + 481 + 7 80,例:若要写一个八进制数 197,对否,例:同样的一串数字101,若表示的数制不 一样,其含义也不一样,如下: 十进制数 101D= 二进制数 101B= 八进制数 101O= 那么如何区分它们呢 现对常用进制数归纳总结如下:,数制,在计算机中为了区分不同数制的数据,采用以下方法:,进制转换,十进制数126转换 为二进制和十六进制,126,63,31,2,2,0,2,15,7,3,1,0,2,1,2,2,2,1,1,1,1,126D=1111110B,1,126,7,0,16,E,16,7,126D=7Eh,余,十进制小数0.8125转换为二进制和十六进制,0.8125,2,1.6250,1,2,1.250,1,2,0.5,0,2,1.0,1,0.8125D=0.1101B,0.8125,16,13.0000,D,0.8125D=0.DH,0,0,整,二进制数和八进制数相互转换,1 011101 001. 110 101 B = = 1 3 5 1 . 6 5 O,1 2 3 . 7 5 O = B = 1010011.111101B,001,101,011,1,.,110,101,00,001,010,011,.,111,101,算数运算,二进制 加法规则 乘法规则 0+0=0 00=0 0+1=1 01=0 1+0=0 10=0 1+1=0 (进位1) 11=1 十六进制 0 5 C 3 3 5 + 3 D 2 5 - 0 5 C 3,4,2,E,8,H,3,7,6,2,H,1,1,D,2,C,18D,逻辑运算(按位操作),“与”运算(AND) A B AB 0 0 0 0 1 0 1 0 0 1 1 1,“或”运算(OR) A B AB 0 0 0 0 1 1 1 0 1 1 1 1,例: X=00FFH Y=5555H, 求 Z=X Y=? X=0000 0000 1111 1111 B Y=0101 0101 0101 0101 B Z=0101 0101 1010 1010 B Z=55AAH,数(机器数)的表示,数(机器数)的表示,计算机中的数用二进制表示,分为无符号数和有符号数。有符号数的符号也用二进制位表示。例如:,7 6 5 4 3 2 1 0,数值位,7 6 5 4 3 2 1 0,数值位,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+32767 2)正数的原码是它本身; 3)数值0的原码有两种形式: +0原码00000000;-0原码10000000,引入反码和补码,为了实现以上的功能,我们引入反码和补码的概念,2. 反码,正数的反码与其原码形式相同;负数的反码是对其原码 符号位不变(仍为1),其余各位“按位取反”得到的数,例如,当机器字长n=8时: +127原=01111111B +127反=01111111B -127原=11111111B -127反=10000000B 当机器字长n=16时: +8原=0000000000001000B -8反=1111111111110111B,反码,1)8位二进制反码表示数的范围为-127+127 2)16位二进制反码表示数的范围为-32767+32767 3)正数的反码与其原码相同 4)“0”的反码有两种表示法: 00000000表示+0,11111111表示-0。,引入补码,二进制(原码)加法 二进制(反码)加法 1000 0010 - 2原 1111 1101 - 2反 +) 0000 0010 + 3原 +) 0000 0011 + 3反 1000 0100 - 4原 0000 0010 =+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位二进制数,其表示范围为0255,即256 = 0。若将其想象为一个环,以0为基点,向顺时针方向移246个单位,则得246。然而,若按逆时针方向移动,则该位置就是-10。即 -10 = 0F6H = 246 因此,在8位二进制表示下,对于负数x(-128-1)来说,存在下列等式: -x = 256 -x,补码实例,在日常生活中,补码的例子是很多的,如时钟的校对就是其中一例。设标准时间是6点整,而时针现在指向10点整。若要将时针拨到6点整,可有两种拨法: (1)1046,采用倒拨的办法实现,将时针倒拨4小时。 (2) 1086,采用顺拨的办法实现,将时针顺拨8小时,时针指向6点整。 这儿倒拨与顺拨的效果是相同的,也即是互补的。在时钟以12为模的条件下,-4与+8是互补的。,例: 机器字长8位,- 46补码 = ? 46补码 = 0 0 1 0 1 1 1 0 1 1 0 1 0 0 0 1 1 1 0 1 0 0 1 0 = D2H 46补码 = 0 0 1 0 1 1 1 0 1 1 0 1 0 0 1 0 =0 D 2 H -46补码 = 0D2H,按位求反,末位加一,按位求反,最右的1,快速得到负数补码的两种方法: 先得出其绝对值对应的二进制形式,然后对该二进制数按位变反,最后再将变反后的结果加1. 先得出其绝对值对应的二进制形式,然后将该二进制数最右边为1的位不变,其所有左边位按位变反。,补码实例,+0补码 = 0 0 0 0 0 0 0 0 1 1 1 1 1 1 1 1 0 0 0 0 0 0 0 0 = - 0补码 0 的表示惟一,按位求反,末位加一,求-1105的补码表示,当n=16时: |-1105| = 1105 = 0000 0100 0101 0001B 按位求反后得: 1111 1011 1010 1110B 最低位加1后: 1111 1011 1010 1111B 所以: -105补=-105反+1=FBAEH+1=FBAFH,求-1105的补码表示,当n=32时: |-1105|=1105 = 00000000000000000000010001010001B 按位求反后得: 11111111111111111111101110101110B 最低位加1后得: 11111111111111111111101110101111B 所以: -105补-105反1 FFFFFBAEH+1FFFFFBAFH,反过来:求补码81A4H的真值,补码81A4H的最高位(符号位)为1 补码81A4H是负数的补码。 对81A4求补: 1. 81A4H 1000 0001 1010 0100b 2.按位求反得: 1111 1110 0101 1011b 3.加1后得: 1111 1110 0101 1100b =32348 所以, 补码81A4H对应的真值是-32348。,反过来:求补码71A4H的真值,补码71A4H的最高位(符号位)为0 补码71A4H是正数的补码(即原码) 所以,补码71A4H对应的真值是29092,1)8位二进制补码表示数的范围为-128+127 2)16位二进制补码表示数的范围为-32768+32767 3)0的补码表示是唯一的,都为00000000,补码的加减运算,符号位和数值位一起参加运算,并且自动获得结果(包括符号位与数值位) 补码的符号位相加后,如果有进位出现,要把这个进位舍去(自然丢失) 补码运算,其运算结果亦为补码。在转换为真值时,若符号位为0,数位不变;若符号位为1,应将结果求补才是其真值,补码加法,1. 补码加法 补码加法的运算规则为: 即:两数补码的和等于两数和的补码。,例 已知 +51补=0011 0011B,+66补=0100 0010B, -51补=1100 1101B, -66补=1011 1110B 求 +66补+51补=?+66补+-51补=?-66补+-51补=?,解:,日常生活我们用十进制算,计算机用二进制补码算,2. 补码减法 补码减法的运算规则为:,例: 已知 +51补=0011 0011B,+66补=0100 0010B 51补=1100 1101B,66补=1011 1110B 求 +66补+51补=? -66补- -51补=? 解 +66补- +51补=+66补+-51补 -66补- -51补=-66补+51补,可以看出,无论被减数、减数是正数还是负数,上述补码减法的规则都是正确的。同样,由最高位向更高位的进位会自动丢失而不影响运算结果的正确性。,补码的加法和减法: 求补运算 :对一个二进制数按位求反、末位加一 求补 求补 X补码 -X补码 X补码 加法规则:X+Y补码 = X补码 + Y补码 减法规则:X-Y补码 = X补码 + -Y补码 补码减法可转换为补码加法,64 (-46) 18,0100 0000 1101 0010 0001 0010,例:,进位和溢出 进位: 由于运算结果超出了位数,最高有效位向前的进位,这一位自然丢失,一般不表示结果的对错。 溢出:表示结果超出了字长允许表示的范围, 一般会造成结果出错。 例: (64) 11000000 127 01111111 64 01000000 + 1 00000001 0 1 00000000 128 10000000 进位 溢出,非数值信息的表示,BCD码 BCD(Binary-Coded Decimal)码又称为“二十进制编码”,专门解决用二进制数表示十进数的问题。最常用的是8421编码,其方法是用4位二进制数表示1位十进制数,自左至右每一位对应的位权是8、4、2、1。,BCD码,BCD码有两种格式: (1)压缩BCD码格式(Packed BCD Format) 用4个二进制位表示一个十进制位,就是用0000B-1001B来表示十进制数0-9。例如:十进制数4256的压缩BCD码表示为:0100 0010 0101 0110 B (2)非压缩BCD码格式(Unpacked BCD Format) 用8个二进制位表示一个十进制位,其中,高四位无意义,我们一般用xxxx表示,低四位和压缩BCD码相同。 例如:十进制数4256的非压缩BCD码表示为: xxxx0100 xxxx0010 xxxx0101 xxxx0110 B,字符编码,使用最多、最普遍的是ASCII字符编码,即美国标准信息交换代码(American Standard Code for Information Interchance),具体见表1.2。,字符的表示 ASCII码: 用一个字节来表示一个字符,低7位为字符的ASCII值,最高位一般用作校验位。 例: A 41H a 61H 1 31H 换行 0AH 回车 0DH 空格 20H,汇编语言中的基本数据类型,字节:由8位二进制数组成,是读写存储器的最小信息单位 字:由两个字节组成 D15-D0 双字:由两个字组成D31-D0 四字:由4个字组成 D63-D0 十字节:由10个字节组成 字符串:由若干个字符组成,程序中的字符数据全部用单引 号或双引号括起来。,
展开阅读全文
相关资源
相关搜索

最新文档


当前位置:首页 > 图纸专区 > 课件教案


copyright@ 2023-2025  zhuangpeitu.com 装配图网版权所有   联系电话:18123376007

备案号:ICP2024067431-1 川公网安备51140202000466号


本站为文档C2C交易模式,即用户上传的文档直接被用户下载,本站只是中间服务平台,本站所有文档下载所得的收益归上传人(含作者)所有。装配图网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。若文档所含内容侵犯了您的版权或隐私,请立即通知装配图网,我们立即给予删除!