微机原理第四章1
合集下载
相关主题
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
4.2.1 数据定义伪指令
为一个数据项或数据表分配存储单元,用 一个符号名与这个或这些存储单元相联系,并为 这个数据项提供一个任选的初始值。 – 语句格式: 变量名 DB/DW/DD/DQ/DT 数据项表例 如:
• • •
•
THING DB ? BIG-THING DW ?
;定义一个字节 ;定义一个字 (两个字节) BIGGEST-THING DD ? ;定义一个双字 (四个字节) BUFFER DB 30 DUP(?) ;定义连续30个字节
3)关系运算符
关系运算符包括EQ(相等)、NE(不等)、 LT(小于)、GT(大于)、LE(小于或等 于)、GE(大于或等于)6种。 关系运算符的两个操作数必须是数据,或是同 一段内的两个存储单元的地址。进行关系运算 的比较操作后,结果是一个数值。若结果为真, 输出全是1,即0FFH或0FFFFH。若结果为假, 输出全是0。关系运算符一般与逻辑运算符组 合起来使用。 例:MOV AX, 5 EQ 0101B MOV AX,0FFFFH MOV BX, 10H GT 16 MOV BX, 0000H
4.1 汇编语言源程序
• 用指令助记符、符号地址、标号和伪指令等 符号书写程序的语言称为汇编语言。用汇编 语言编写的程序称为汇编语言源程序。 • 把源程序翻译成机器语言程序(目标程序)的 过程叫做汇编。 • 完成汇编任务的程序叫做汇编程序,常用的 有ASM、MASM等。 • MASM称为宏汇编程序。
[例 ]
• 源程序指令如下: – DA EQU 300 – MOV AX, DA-80 – MOV BX, DA MOD 100 – MOV CX, DA/100 – MOV DH, 01100100B SHR 1 • 汇编时,计算表达式形成指令为: DA EQU 300 MOV AX, 220 MOV BX, 0 MOV CX, 3 MOV DH, 32H
则 (AX)=0500H, (BX)=1000H
属性运算符 PTR
• 格式: • 类型/距离 PTR 变量或标号 • 功能:将PTR左边的类型属性赋给右边 的变量或标号。PTR本身并不分配存储 单元,仅给已分配的存储单元赋予新的 属性,这样可以保证运算时操作数类型 的匹配,常与类型BYTE、WORD、 NEAR、FAR等连用。 • PTR运算符仅对当前指令有效。
• 汇编语言源程序
•
用助记符编写
源程序的编译程序
汇编程序
汇编语言 源程序
汇编程序
机器语言 目标程序
4.1.1 汇编语言源程序的结构
• 8086汇编语言的源程序是分段的,每 一段都有名字,以符号SEGMENT作 为段开始,以语句ENDS作为段的结束。 两者都必须有名字,而且名字必须相 同。 • 由若干段组成一个源程序,整个源程 序以语句END作为结束。
操作码
百度文库
注释前加分号
CYCLE: CMP SUM,100
;SUM单元与100比较
伪指令语句
• 格式:
[名字] 伪指令指示符 操作数[,操作数…] [;注释]
变量的符号地址 其后不加冒号
指示性语句中至 少有一个操作数
THING
DB
?
;定义一个字节
4.1.3 数据项及表达式
1.常 量
• 数字常量
不同进制数表示的常量 用单引号引起的字符或字符串
36
4.2.2 符号定义伪指令 [1]赋值伪指令EQU
– 赋值伪指令是为表达式赋予一个符号名,其后 指令中凡需要用到该表达式的地方均可以用此 名字来代替。编写程序时,通过使用赋值伪指 令可以使汇编语言简明易懂,便于程序的调试 和修改。赋值伪指令的格式如下: • 符号名 EQU 表达式 • 必须用PURGE(解除语句)来解除定义的 符号 例:BUFFER_SIZE EQU 32 NEW_PORT EQU PORT_VAL+1 PURGE BUFFER_SIZE, NEW_PORT
常用的术语
• 汇编语言语句可分为三种基本语句:指令语句、伪指 令语句和宏指令语句。 • 每一个指令语句在汇编时产生目标代码,对应着机器 的一种操作。如:MOV BX, 0 与ADD SI, AX 等,即 每一条指令语句对应着机器的一条或几条指令。 • 伪指令语句没有目标代码与之对应,主要是为汇编程 序服务的。 • 宏指令主要是为了简化程序的书写而设计的。若在汇 编语言源程序中某个程序段要多次使用,为了使在源 程序中不重复书写这个程序段,可以用一条宏指令来 代替。由汇编程序在汇编时产生所需的代码。
12
3.变 量
• 代表内存中的数据区,程序中视为存储器 操作数 • 变量的属性: 段 值 偏移量 类 型
变量所在段的段地址 变量单元地址与段首地址之 间的位移量。 字节型、字型和双字型
变量和标号
• 变量 存储单元中的操作数是变量,值可以改变。在程 序中出现的是存储单元地址的符号,即它们的名字 – 段属性 段的起始地址的高16位,低4位始终为0 – 偏移量属性 变量单元与段地址的偏移量16位 – 类型属性 字节、字、双字 • 标号 是指令存放单元的符号地址,是转移指令或调用 (CALL)指令的目标操作数。 – 段属性 – 偏移量属性 – 类型(距离)属性 NEAR和FAR 对于汇编程序来说,标号和变量是类似的,都 是存储单元的符号地址。只是标号对应的存储单元中 存放的是指令,而变量所对应的存储单元中存放的是 数据。
4)取值运算符和属性运算符
• 取值运算符OFFSET、SEG
它们加在变量或标号前,返回运算对象的 某个参数值。例如偏移地址值、段地址值
SEG和OFFSET
• SEG返回一个存储单元的段地址。 • OFFSET返回每一个存储单元的段内偏移量。
例:DATA-SEG 是从存储器0500H处开始的 一个数据段。OP1是其中一个变量名,偏移 地址为1000H。 MOV AX, SEG OP1 MOV BX, OFFSET OP1
以上变量在内存 中的存放形式
33
数据定义伪指令例_变量在内存中的分布
DATA3 DATA1
DATA2
11 22 33 44 11 00 22 00 44 33
22 00 00 00 22 00 00 00 66 55 44 33
34
数据定义伪指令的几点说明
• 伪指令的性质决定所定义变量的类型; • 定义字符串必须用DB伪指令 • 例: DATA1 DB ‘ABCD’,66H
微型计算机系统原理及应用
Institute of Electrical Engineering
第四章 汇编语言程序设计
主讲人: 沈 虹
燕山大学电气工程学院
第4章 汇编语言程序设计
• 本章介绍以下内容 – 汇编语言源程序的结构 – 语句行的构成(汇编语言语句格式) – 指示性语句(伪指令) – 汇编语言程序设计及举例
data string cr data stack
stack code start begin:
start code
name length_of_string segment db ‘abcduvwxyz’,0dh ;0DH为回车(CR) equ 0dh ends segment para stack’stack’ db 100 dup(?) ends segment assume cs:code,ds:data, ss:stack,es:data proc far push ds ;DS中包含程序段前缀起始地址 mov ax, 0 push ax …… endp ends end begin
• 字符串常量
• 例:‘A’
– MOV AL,’A’
• 例:’ABCD’
汇编时被译成对应的ASCII 码41H,42H,43H,44H
2. 标号
• 标号后有冒号,在指令性语句前 • 英文字母、数字及专用字符组成,最大长度不 能超过31个,且不能由数字打头,不能用保留字
(如寄存器名,指令助记符,伪指令)。
4.1.2 汇编语言语句类型及格式
1. 汇编语言语句类型
指令性语句
CPU执行的语句, 能够生成目标代码
指示性语句(伪指令)
CPU不执行,而由汇 编程序执行的语句, 不生成目标代码
2 汇编语言语句格式
指令语句
• 格式: [标号:] [前缀] 指令助记符 [操作数[,操作数]] [;注释]
指令的符号地址 标号后要有冒号
– – – – MOV AH, NOT 0FFH MOV BH, 8CH AND 77H MOV AL, 8CH OR 73H MOV BL, 0FFH XOR 44H
• 汇编时,计算表达式形成指令为:
MOV AH, 00H MOV BH, 04H MOV AL, 0FFH MOV BL, 0BBH
2)逻辑运算符
共有4种逻辑运算符 AND, OR, NOT, XOR 说明:
逻辑运算符与8086指令系统中的指令助记符 AND、OR、NOT、XOR符号完全相同,但 二者是不会混淆的。作为MASM的运算符是 在汇编过程中进行计算的,而指令助记符是 在程序执行时进行运算的。
[例 ] • 源程序指令如下:
1.
• DB • DW • DD • DQ • DT
数据定义伪指令助记符
定义的变量为字节型 定义的变量为字类型(双字节) 定义的变量为双字型(4字节) 定义的变量为4字型(8字节) 定义的变量为10字节型
32
数据定义伪指令例
• DATA1 DB 11H,22H,33H,44H
• DATA2 DW 11H,22H,3344H • DATA3 DD 11H*2,22H,33445566H
1)算术运算符
共有7种算术运算符 +, -, * , /, MOD, SHL, SHR 说明:
/ (除,只取除法运算结果之商)、MOD(模,只 取除法运算结果之余数)、SHL(左移,左移1位相当 于乘2)、SHR(右移,右移1位相当于除2)。 所有的算术运算符均可以对数据进行运算,运算 对象与运算结果都是整数。若对地址运算,通常是在 标号上加/减某一个数字量,例如SUM+2、 CYCLE-3各表示一个存储单元的地址,对地址乘是 没有意义的。
例:
N1 DB 15H, 36H N2 DW 1122H, 3344H LO: MOV AX, WORD PTR N1 ;使N1类型转换成字与AX类型匹配 MOV BL, BYTE PTR N2 ;使N2类型转换成字节与BL类型匹配
5)其它运算符
• 方括号[ ]。 指令中用方括号表示存储器操作数, 方括号里的内容表示操作数的偏移地址。 • 段重设运算符“:”。 运算符“:”跟在某个段寄存器名 (DS、ES、SS)之后表示段重设。 MOV AX, ES:[DI]
4.2 指示性(伪指令)语句
• 伪指令语句没有对应的机器代码,并不 像指令语句那样由CPU来执行,它是由 MASM汇编程序对源程序汇编期间进行 处理的。主要完成变量定义,存储器分 配,指示程序开始和结束,段定义,段 分配等。
伪指令的类型
• 伪指令语句有如下几种类型:
数据定义伪指令 DB,DW,DD 符号定义伪指令 EQU,= 段定义伪指令 SEGMENT…ENDS 设定段寄存器伪指令 ASSUME 过程定义伪指令 PROC…ENDP 模块定义与连接伪指令 END,NAME
41H 42H 43H 44H 66H ‘A’ ‘B’ ‘C’ ‘D’
35
• 数据定义伪指令例:
– 数据段起始 – M1 DW 10H,20H – M2 DB 11H,’Hello!’ – 数据段结束
M1
M2
10 00 20 00 11 48 65 6C 6C 6F 21
0000H
0004H ‘H’ ‘e’ ‘l’ ‘l’ ‘o’ ‘!’
[例 ]
• • • • IN AL, PORT ;PORT为输入端口号 AND DX, PORT AND 0FEH OUT DX, AX ;DX为输出端口号 第2条指令说明:
后一个AND(运算符),汇编时计算表达式, 得到一个端口号,如原输入端口号PORT为80H, 则表达式PORT AND 0FEH的值为80H,若原输 入端口号PORT为81H,则计算表达式值也得到 80H。前一个AND(指令助记符),在运行程序时 将DX内容与计算出的表达式值相'与',结果送 到DX中,DX为输出端口号。
【例】 ARRAY DW 12H,13H,14H XT DW ? MOV CX, (XT-ARRAY)/2 因XT与ARRAY是顺序存放, (XT-ARRAY)/2 即为数组字长度数
4
表达式
• 汇编语言中使用了运算符有以下几种,即: • 算术运算符 • 逻辑运算符 • 关系运算符 • 取值和属性运算符 • 其它运算符