汇编语言——入门

合集下载
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

语言的翻译
计算机体系的层次
ISA
高级语言和汇编语言
高级语言在第 4 层
面向应用的语言
C++,Java,Pascal,Visual Basic ...
程序编译为汇编语言(第 3 层)
汇编语言在第 3 层
指令助记符,与机器语言有一一对应的关系 程序被翻译为指令集体系级别的机器语言(第 2 层)
指令集结构(ISA)和数字逻辑
1
整数存储的大小
标准存储尺寸;
存储类型 无符号字节 无符号字 无符号双字 无符号四字
范围(由低到高) 0 到 255 0 到 65,535 0 到 4,294,967,295 0 到 18,446,744,073,709,551,615
2 的幂 0 到 (28 -1) 0 到 (216 -1) 0 到 (232 -1) 0 到 (264 -1)
应用实例――系统特点和任务
1. 最多使用 32 Kbytes 内存 2. 汇编语言编写 3. 性能优化,改变困难 软件的责任:
通过选择当前最佳可用传感器,进行适当的整合/平滑,从 而计算出真实值(如位置和高度) 通过向飞行员提供当前位置进行导航,共有18种导航模式 计算弹道武器方案
100 种不同武器类型 21 种不同发射模式
成绩评定
期末考试:60% 作业:10% 实验:15% 出勤:15%
汇编语言的应用
一些代表性的应用:
单一平台的业务应用 硬件设备驱动程序 多平台的业务应用 嵌入式系统和计算机游戏
应用实例
A-7E 航空电子系统 Avionics System
使用时期:1960-1980 年代 读取传感器信息,改变驾驶舱操作显示,以帮助飞行员将武 器投向目标。软件并不真正操控飞机飞行。
加权位置的符号,显示如何将每个二进制数位计算为十进制 的值 dec = (Dn−1 ×2n−1 )+(Dn−2 ×2n−2 )+. . .+(D1 ×21 )+(D0 ×20 ) 其中 D= 二进制数位 举例:二进制数 00001001 = 十进制数 9 (1 × 23 ) + (1 × 20 ) = 9
106 109 10
12
1015 1018 1021 1024
十六进制整数
二进制数经常用十六进制数来表示
二进制 0000 0001 0010 0011 0100 0101 0110 0111 十进制 0 1 2 3 4 5 6 7 十六进制 0 1 2 3 4 5 6 7 | | | | | | | | | 二进制 1000 1001 1010 1011 1100 1101 1110 1111 十进制 8 9 10 11 12 13 14 15 十六进制 8 9 A B C D E F
在正确时间释放所选择的武器
比较汇编语言与高级语言
为单一平台编写的业务应用软件(中到大规模) :
高级语言:有正式结构,容易组织和维护代码的大部分内容 汇编语言:有少量正式结构,程序员必须有丰富的各种经验,导致代码维护比较困难。
硬件设备驱动:
高级语言:语言不提供直接访问硬件的机制,即使提供,复杂的变成技巧,也会导致维护困难。 汇编语言:硬件访问直接,简单,当程序不很长,有良好文档时容易维护。
,余数是
十六进制数减法
当需要借位时,加一个十进制数 16 到当前的数码值上:
问题:如果 var1 的地址是 00400020H,紧接在 var1 后的下 一个变量的地址是 0040006AH。 var1 共占多少字节?
带符号整数
最高的 bit 是数字的符号。 1 = 负数,0 = 正数
如果 16 进制整数最高数位的值 > 7,这个整数值就是负数, 例如:8AH,C5H,A2H,9DH
x86 微处理器 汇编语言程序设计
北方工业大学
课程安排
课程性质
计算机硬件系统必修课
课程时间
1. 课堂讲授学时:48 学时 2. 周三(双周) ,上午9:50-11:25,周五,下午 13:30-15:05 3. 实验学时:12 学时
教师
1. 徐迟 xuc@ 答疑时间:周五下午 15:30-17:30 2. 办公室:五教 1102 电话:88803939
为多平台编写的业务应用软件(不同操作系统) :
高级语言:一般移植性很好,在不同操作系统上可以重新编译源代码,只需做很小改动。 汇编语言:对于不同平台,大都需要单独重新编码,不同汇编编译器使用不同语法,维护困难。
需要直接访问硬件的嵌入式系统和计算机游戏应用:
高级语言:产生很多可执行代码,但不一定都有很高效率。 汇编语言:理想的工具,执行代码一般都少而且运行速度快。
十进制数转换成十六进制数
除法 422/16 26/16 1/16 422D = 1A6H
商 26 1 0
余数 6 A 1
十六进制加法
将对应位置的两个十六进制数码相加,再把和除以基数 (16) ,得到的商作为进位的值,余数作为和的数码。 重要技能:程序员经常需要对变量和指令的地址做加法或减 法 (1) 36 + 42 78 28 45 6D 28 58 80 (1) 6A 4B B5
二进制减法
做减法 A-B,把 B 转换为补码 做加法 A + (-B) 的补码
如何完成下列任务
十六进制整数的补码 带符号二进制数转换为十进制数 带符号十进制数转换为二进制数 带符号十进制数转换为十六进制数 带符号十六进制数转换为十进制数
带符号整数的范围
由于最高一位作为符号的标示位,整数的表示范围就改变 了:
二进制数的减法
字符的存储
二进制数
二进制的数码 digit 包括 0 和 1
1 = true 0 = false
MSB - most significant bit LSB - least significant bit Bit 的编号
二进制数
二进制的数码不是 0 就是 1 每位都表示 2 的某次幂
每个二进制数都是若干个 2 的幂的和
存储类型 有符号字节 有符号字 有符号双字 有符号四字 范围(由低到高) -128 - +127 -32,768 - +32,767 -2,147,483,648 - +2,147,483,647 -9,223,372,036,854,775,808 - +9,223,372,036,854,775,807 2 的幂 -27 到 (27 -1) -215 到 (215 -1) -231 到 (231 -1) -263 到 (263 -1)
无符号十进制数转换为二进制数
反复将十进制整数除以 2。余数就是二进制的数位值。 除法 37/2 18/2 9/2 4/2 2/2 1/2 37 = 100101 商 18 9 4 2 1 0 余数 1 0 1 0 0 1
二进制加法
从 LSB 开始,把对应的每对数位相加,如果有进位出现, 也要加上进位值。
学习目标
为什么要学习汇编语言? 学习汇编语言需要的背景知识有哪些? 什么是汇编语言使用的编译器? 学习汇编语言需要的软件/硬件有哪些? 汇编语言是怎样的代码? 通过学习这门课程能学到什么? 汇编语言与机器语言的关系是什么? C++ 和 Java 与汇编语言的关系是什么? 汇编语言的移植性如何? 为什么要学习汇编语言?
二进制数补码
负数都用补码表示 用加法做减法,被称为“加性逆元” (additive inverse)或变 补 起始值: 第一步:每位取反 第二步:把第一步的值加 1 求和:变补码表示为 00000001 11111110 11111110 +00000001 11111111
注意:特例 00000001 + 11111111 = 00000000
数字数据的表示
纯二进制数
可以被直接计算
ASCII 二进制表示
数码字符串: “01010101”ASCII 十进来自表示数码字符串: “65”
ASCII 十六进制表示
数码字符串: “9C”
布尔运算操作
NOT AND OR 运算符的优先级 真值表
布尔代数
基于逻辑符号的运算,由 George Boole 设计 布尔表达式由基本逻辑操作构成
NOT,AND,OR
表达式 ¬X X∧Y X∨Y ¬X∧Y ¬(X∧Y) X∧¬Y | | | | | |
描述 非X X与Y X或Y (非 X)与 Y 非(X 与 Y) X 与(非 Y)
“非”操作
将布尔值反转 “非”操作的真值表和逻辑符号 X F T | | | ¬X T F
“与”操作
指令集结构在第 2 层
被称为传统机器语言 由第 1 层的数字逻辑执行命令
数字逻辑在第 1 层
CPU,数字逻辑门发送的指令 系统总线 存储 使用双极型晶体管实现
计算机数据的表示
二进制数
二进制数与十进制数的转换
二进制加法 整数存储大小 十六进制整数
十进制数与十六进制数的转换 十六进制数的减法
带符号整数
二进制数转换十六进制数
十六进制数的每一位对应 4 位二进制数 例如:把二进制数 000101101010011110010100 转换为十六 进制数
0001 1 0110 6 1010 A 0111 7 1001 9 0100 4
十六进制数到十进制数的转换
十六进制数的每一位数码乘以相应的 16 的幂: dec = (D3 × 163 ) + (D2 × 162 ) + (D1 × 161 ) + (D0 × 160 ) 其中,D = 十六进制数
2n 20 21 22 23 24 25 26 27 十进制数 1 2 4 8 16 32 64 128 | | | | | | | | | 2n 28 29 210 211 212 213 214 215 十进制数 256 512 1024 2048 4096 8192 16384 32768
二进制数转换为十进制数
如果用 20 bit 存储,能存储的最大的正整数值是多少?
字符的存储
字符集
1. 标准 ASCII (0-127) 2. 扩展 ASCII (0-255) 3. ANSI (0-255) 4. Unicode (-65,535)
以空(Null)作结尾的字符串
字符串数组由 Null 字节作为结束
使用 ASCII 表
如果存储大小为 20 bits,最大的无符号整数是多少?
数据名称
字节的次方单位
十进制 (SI) 名称 千字节 兆字节 吉字节 太字节 拍字节 艾字节 泽字节 尧字节 缩写 KB MB GB TB PB EB ZB YB 次方 10
3
| | | | | | | | | | |
二进制 (IEC 60027-2) 名称 kibibyte mebibyte gibibyte tebibyte pebibyte exbibyte zebibyte yobibyte 缩写 KiB MiB GiB TiB PiB EiB ZiB YiB 次方 210 220 230 240 250 260 270 280
十六进制数 1234H 等于 (1×163 )+(2×162 )+(3×161 )+(4×160 ),或十进制数 4,660D 十六进制数 3BA4H 等于 (3×163 )+(11×162 )+(10×161 )+(4×160 ),或十进制数 15,268D
16 的幂
表中的数据可以用来计算 8 位十六进制数的大小: 16n 160 161 162 163 十进制数 1 16 256 4,096 | | | | | 16n 164 165 166 167 十进制数 65,536 1,048,576 16,777,216 268,435,456
虚拟机的概念
解剖编程语言
计算机自己的母语,可以直接在其硬件上运行:机器语言 (L0) 建立在机器语言之上,较为人类友好的语言,称为 L1
处在 L1 级别的编程语言,可用两种方式运行:
解释方式:L0 程序解释,并一条一条逐个执行 L1 的指令 翻译方式:L1 程序被完全翻译成 L0 程序,再在计算机硬件 上运行
参考资料
课程幻灯片 教科书,参考书
1. 沈美明,温冬婵,IBM-PC 汇编语言程序设计(第 2 版) ,清 华大学出版社,2007 2. Kip R. Irvine, Assembly Language for x86 Processors, 6th Ed, Pearson Education, 2011 3. 王爽,汇编语言(第 2 版) ,清华大学出版社,2008
l1程序被完全翻译成l0程序再在计算机硬件上运行语言的翻译计算机体系的层次cjavapascalvisualbasic使用双极型晶体管实现计算机数据的表示字符的存储二进制数二进制的数码digit包括0mostsigni?cantbitleastsigni?cantbitbit的编号二进制数二进制的数码不是0就是1每位都表示2的某次幂10102411204812409613819214163841532768二进制数转换为十进制数其中d二进制数位反复将十进制整数除以2
相关文档
最新文档