微机原理课件第8讲(电子ok)
合集下载
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
19
汇编语言的一个实例: hello.asm
SEGMENT DB ‘Hello, world!’,0DH,0AH,’$’ ENDS SEGMENT ASSUME CS:prog,DS:data start: MOV AX,data MOV DS,AX LEA DX,hello ;取字符串首地址 MOV AH,9 INT 21H ;Dos9号功能调用显示字符串 MOV AH,4CH INT 21H ;退回DOS prog ENDS END start
数据,能被机器直接识别的计算机语言。速度快、 占用内存少。
汇编语言(Assembly Language):采用助记符表示
的程序设计语言。内存空间少,而且执行速度快。
高级语言(High Level Language):高级语言则
是面向用户的语言。
2
机器语言
①指令中仅包含“0”和“1”。 优点:执行速度快 缺点:难记,编程时容易出错,修改程序时更是 如此 ②不同种机器之间程序不能通用。 不同生产厂家,不同种计算机指令系统不相同, 所以,在一台计算机上执行的程序,要想在另一台 计算机上执行,必须另编程序,造成了重复工作。
汇编语言的指令语句可以由1~4部分构成: 【标号:】助记符 【操作数1】…【操作数n 】 【;注释】 LOOPER: MOV AL,DATA2[SI] ;取一个字节加数 其中方括号中间的内容可以省略。
16
伪指令语句格式 汇编语言的伪指令语句可以由1~4部分构成: 【名字】指示符 【操作数1】…【操作数n 】 【;注释】 DATA1 DB 0F8H,60H,0ACH,74H,3BH ;被加数 名字是给伪指令取的名称,它用符号地址标识,名 字后面不允许带“:”,名字可以是变量名、段名、过 程名。
数据段
• data SEGMENT <数据、变量在此定义> data ENDS
10
分段结构
每个段以段定义伪指令 SEGMENT 语句开始,以 ENDS语句结束。格式形如: 段名 SEGMENT …… 段名 ENDS 其中,代码段是必须有的;堆栈段如果用户不定义 系统会自动分配。不同的段通过ASSUME识别。 ASSUME CS:段名,DS:段名, SS段名, ES:段名 整个源程序的结尾是END语句,汇编程序遇见END 就结束。
3
汇编语言
①用一些简洁的英文字母、符号串来替代一个特定的指 令的二进制串,例如: “ADD”代表加法,“MOV”代表数据传递 ②有了助记符,读懂、纠错及维护程序都变得方便了。 ③计算机不认识这些助记符,需要一个专门的程序,专 门负责将这些符号翻译成二进制数的机器语言,这种 翻译程序被称为汇编程序。 ④依赖计算机的硬件结构和指令系统,移植性较差 。
变量名。变量名代表存储器中一个数据区的名字。 例如,DATA1、DATA2就是变量名。
17
标号 标号实质上是指令的符号地址,用来代表指令在存 储器中的地址。 标号后必须带 “:” ,如 “ str1 : ” 。汇编后就会 转变为地址,最长31个字符。 只能出现在指令语句中,且标号后必须带冒号
18
名字 段、过程、变量的名字,用来代表它们在存储器中 的地址。 只能出现在伪指令语句中,名字后不加冒号
5
Pascal语言举例
读入两个数,将大数存入x,小数存入y
PROGRAM larger(input,output); VAR x,y,temp:real; BEGIN read(x,y); writenln(‘x=’,x,’y=’,y); IF x<y THEN BEGIN temp:=x; x:=y; y:=temp END; writenln(‘x=’,x,’y=’,y); END.
可能的运行结果 25 37↙ X=25 y=37 X=37 y=25
6
c语言举例
读入两个数,将大数存入x,小数存入y
Main() { float x,y,temp; scanf(“%f %f”,&x,&y); printf((“%f %f”,x,y); if(x<y) { temp=x; x=y; y=temp } printf(“%f %f”,x,y); }
4
高级语言
这种语言接近于数学语言或人的自然语言,同时又不 依赖于计算机硬件,编出的程序能在所有机器上通用。 经过努力,1954年,第一个完全脱离机器硬件的高级 语言—FORTRAN问世了,多年来,共有几百种高级语 言出现,有重要意义的有几十种,如pascal,c语言。 高级语言也有缺点: ①高级语言需要翻译成机器语言,与直接用汇编语言 编写的程序比,占用内存大,执行时间长 ②访问机器的硬件资源比较困难
25
常数 【注意事项】 ①数值常数的第一位必须是数字,否则汇编时将 被看成是标识符,如常数B7H应写成0B7H,FFH应写 成0FFH。 ②字符串常数必须用单引号括起来,否则汇编时 将被看成是标识符。例如'ABCDEFG'和'179'。单引号 内的字符在汇编时都以ASCII的代码形式存放在存储单 元中。如上述两字符串的ASCII代码为41H,42H, 43H,44H,…,48H和31H,37H,39H。
0
第8讲教学目的和要求
【教学目标】通过汇编语言的讲解,使学生了解计算机语言的 发展和汇编语言的执行过程。掌握汇编语言的程序 结构和语句格式,了解伪指令的格式。 【教学重点】①汇编程序的基本结构; ②运算符的类型和含义; 【教学难点】运算操作和指令的区别。
1
4.1汇编语言的程序结构和语句格式 语言的发展 机器语言(Machine Language):二进制表示指令和
13
汇编语言源程序 CODE SEGMENT;代码段 ASSUME CS:CODE,DS:DATA START: MOV AX,DATA MOV DS,AX MOV CX,5 ;循环5次 MOV SI,0 CLC MOV AH,4CH LOOPER: INT 21H;返回DOS MOV AL,DATA2[SI] ADC DATA1[SI],AL CODE ENDS INC SI END START DEC CX JNZ LOOPER 14
28
变量 变 量——内存中的存储单元或数据区。
变量名——是存储单元(数据区)的符号地址或名字。 变量也有三个属性: 段地址:变量所在段的段地址 偏移量:变量单元地址与段首地址之间的位移量。 类 型:有BYTE、WORD和DWORD三种。 ★变量在程序中作为存储器操作数被引用。
29
标号和变量名的使用规则 使用规则 组成:A-Z(不分大小写), 0-9, ?@ . _ $; 不能以数字开头,句号(.)只能作为首字符; 长度小于31个字符; 不能与保留字(指令助记符、伪指令、预定义符号等) 重名; 不能重复定义。 【举例】 正确的:LP1, AGAIN, NEXT, _GO, OK_1 错误的:4M, LOOP, AAA, #HELP, +ONE
26
寄存器与标号 寄存器 8086/8088CPU 的寄存器可以作为指令的操作数。 标号 由于标号代表一条指令的符号地址,因此可以 作为转移(无条件转移或条件转移)、过程调用CALL 以及循环控制LOOP指令的操作数。
27
标号的属性 标号具有三个属性:段地址、偏移量和类型 段地址:即标号所在段的段地址; 偏移量:标号所代表存储单元的段内偏移地址; 类 型:NEAR或FAR: NEAR—表示标号所在语句与转移指令/ 调 用 指令在同一码段内,跳转时只需改变IP即可。 FAR—标号所在语句与转移指令/调用指令不 在同一代码段内。 ★若没有对类型进行说明,默认为NEAR。
30
表达式 表达式由运算对象和运算符组成,汇编时,程序对 它进行运算,运算结果作为语句中的一个操作数使用, 按其性质可分为两种:数值表达式和地址表达式。 数值表达式产生一个数值结果,只有大小,没有属 性。 地址表达式的结果是一个存储器的地址,它有三种 属性:段、偏移量和类型。
31
表达式 表达式由运算对象和运算符组成,汇编时,程序对 它进行运算,运算结果作为语句中的一个操作数使用, 按其性质可分为两种:数值表达式和地址表达式。 表达式是常数、寄存器、标号、变量与运算符 的组合。 汇编时按优先规则对表达式进行计算,计算出 具体的数值或地址。运行时不能改变。
rcldx1loopnext22第四章汇编语言程序设计41汇编语言的程序结构和语句格式43汇编语言程序设计44常见程序设计举例42伪指令语句33第8讲教学目的和要求教学目标通过汇编语言的讲解使学生了解计算机语言的发展和汇编语言的执行过程
第四章 汇编语言程序设计
4.1 汇编语言的程序结构和语句格式 4.2 伪指令语句 4.3 汇编语言程序设计 4.4 常见程序设计举例
8
汇编语言源程序
汇编语言源程序包含的内容 堆栈段:一般为STACK SEGMENT……STACK ENDS 数据段:一般为DATA SEGMENT……DATA ENDS 代码段:一般为CODE SEGMENT……CODE ENDS 下面是一个完整的汇编语言程序的框架。
9
汇编语言程序框架
堆栈段
• stack SEGMENT PARA ‘stack‘ DB 100 DUP(‘stack’) stack ENDS 代码段 • code SEGMENT ASSUME CS:code, DS:data, ES:data start: MOV AX, data MOV DS, AX MOV ES, AX <此处加入你自己的程序段> MOV AL, 4CH INT 21H code ENDS END start
可能的运行结果 25 37↙ X=25 y=37 X=37 y=25
7
汇编语言 汇编语言源程序 使用汇编语言编写的程序,不能被机器识别。 汇编与汇编程序 汇编程序是把源程序翻译成与之等价的机器语 言程序的翻译程序,相应的过程叫汇编。 连接程序 将目标程序和库文件相连,形成可执行文件。
源程序.asm 汇编程序 目标程序.obj 连接程序 可执行程序.exe
20
名字 标号
data Hello data prog
助记符
在指令语句中的第二部分是 CPU 指令系统中指令 的助记符,如MOV、ADC等。 在伪指令语句中的第二部分是伪指令的定义符, 如 DB 、 SEGMENT 、 ENDS 、 END 等。它们在程序中 的作用是定义变量的类型、定义段以及告诉汇编程序 结束汇编等。
21
操作数 操作数即指令的操作对象 对指令性语句——0,1,2个; 对指示性语句——根据需要而定; 操作数之间以逗号分隔; 操作数可以是:寄存器、存储单元、常数或表达 式。 【举例】AX,[DI+BX+10],200,16*8+TABLE
22
注释
以分号开头,可放在指令后,也可单独一行。
11
DOS 返回 程序开始部分
PUSH DS MOV AX,0 PUSH AX
程序结束前
MOV AX,4C00H INT 21H
12
汇编语言源程序举例 【例】要求将两个5字节十六进制数相加,可以编写 出以下汇编语言源程序。 分析: 没有指令能直接完成两个如此长的十六进制数 的相加;需要将数据从最低位开始相加,高位利用低 位的进位和本位数相加,直到五个字节的数据都加完, 利用循环完成操作。 DATA SEGMENT ;数据段 DATA1 DB 0F8H,60H,0ACH,74H,3BH DATA2 DB 0C1H,36H,9EH,0D5H,20H DATA ENDS
汇编语言语句的类型和格式
指令语句:与机器指令对应,汇编程序能将其翻译成 目标代码,CPU 可以执行的能完成特定功能的语句。 伪指令语句:它是一种不产生目标代码的语句,它仅 仅在汇编过程中告诉汇编程序应如何汇编。主要完成 数据定义、存储区分配、段定义、段分配、指示程序 结束等功能。
15
指令语句的格式
★注意注解的写法。要写指令(段)在程序中的作用, 而不要写指令的操作。 【举例】以下为同一条指令写的注释 1)MOV CX,100 2)MOV CX,100 ;传送100到CX ;循环计数器置初值
显然,第二种写法要比第一种写法要好。
23
操作数的种类
操作数的种类包括常量、变量、标号及表达式。
24
常量 常量就是指令中出现的那些固定值,分为数值常 量和字符串常量两类。 二进制数,以B结尾。如01001101B。 十进制数,如85。 十六进制数,以H结尾。如2160H。 字符串:用引号括起来的1个或多个字符。如 ‘ERROR!’, ’a’, 。