汇编语言程序设计》-相伟-电子教案第10章


编辑ppt
17
MEMORY:连接程序将本段定位在被连 接在一起的其它所有段之上(即安排在 最高地址上)。如果有几个段都选择 MEMORY组合属性,则宏汇编程序将把 遇到的第一段处理为MEMORY段,而其 它段都被处理为COMMON段。
编辑ppt
18
③ ‘类别’属性
段名的‘类别’ 属性用于连接程序在装配 时安排各个段的存放顺序。它是用单引号括起 来的字符串,该字符串可以包括任何合法的字 符。连接程序在装配时,将把‘类别’相同、 段名相同且组合属性为PUBLIC或STACK的段按 连接时的顺序连续存放,组成一个的物理段, 具有相同的段地址;而仅‘类别’和段名相同 的段将按连接时的顺序连续存放,但仍然是不 同的段,每个段都有自己的段地址。
21世纪高等院校规划教材
汇编语言程序设计
相 伟 主编 徐小平 李珍香 副主编
中国水利水电出版社
编辑ppt
1
第十章 模块化程序设计
编辑ppt
2
本章学习目标
通过本章学习,读者应该掌握以下内容: 模块的概念及设计 模块之间的通信 模块化程序设计方法
编辑ppt
3
10.1 概述
模块化程序设计是大型程序设计的常用方 法,它是指按照要实现的功能把一个大型程序 划分成多个模块,每个模块完成一个子功能, 然后按模块来分配设计人员,由设计人员编制 和调试各个模块程序,最后再把它们按照一定 的调用关系组合起来,完成指定的功能。
定位属性是对该段的起始地址所提出的 要求,即告诉连接程序,在将各个段装 配在一起时,前一个段安排完后,下一 个段将从一个什么样的地址开始存放。 定位属性是规定好的,它们是:[PARA]、 WORD、BYTE、PAGE,分别称为节地址、 字地址、字节地址、页地址。
编辑ppt
10
各个定位属性的意义如下:
从汇编语言源程序的角度来看,一个模块 就是一个以END语句作为结束标志的源程序。
பைடு நூலகம்编辑ppt
4
模块的划分与设计可参考如下规则:
① 一个模块既不能过大,也不能过小。过大则 模块的通用性较差,过小则会造成时间和空间 上的浪费。
② 力求使模块具有通用性, 通用性越强的模 块利用率越高。
③ 各模块间就在功能上、逻辑上相互独立,特 别应避免用转移语句在模块间转来转去。
④ 模块间的接口应该简单,要尽量减少公共符 号的个数,尽量不共用数据存储单元。
编辑ppt
5
采用模块化程序设计的优点:
① 容易把复杂的问题分解成一系列简单问题, 便于解决实际问题。
② 单个模块容易编写、查错、调试。
③ 单个模块容易重复使用,对一些经典模块可 以编写成标准模块供以后使用。
④ 程序员可以直接利用现有的模块,提高工作 效率。
[PARA] 节地址。表示该段的存放开始地址是 物理地址的最低4位为0的地址。定位属性省略 时,表示PARA。在前面的例题中,程序中多数 逻辑段的定位属性都被省略,说明采用了PARA 属性。
WORD 字地址。表示该段的存放开始地址是 物理地址的最低1位为0的地址。
BYTE 字节地址。表示该段的存放开始地址 可以是任何物理地址。
⑤ 软件运行之后的维护方便。
编辑ppt
6
10.2 模块命名与装配
在模块化程序设计中,一个程序通常 由一个主模块和一个或多个子模块构成, 当编写完所有模块的汇编语言源程序后, 宏汇编程序需要对包括主模块在内的所 有模块的源程序进行单独汇编,生成主 模块的目标文件和各个子模块的目标文 件,然后由连接程序将主模块和所有子 模块的目标文件连接在一起构成一个可 执行文件。
PAGE 页地址。表示该段的存放开始地址是 物理地址的最低8位为0的地址。
编辑ppt
11
② 组合属性
组合属性用于向连接程序提供本段同其 它段在连接时的组合关系。 组合属性也是规定好的,有以下几种属 性供选择,它们是:[NONE]、PUBLIC、 COMMON、AT表达式、STACK、 MEMORY。
编辑ppt
7
1.模块命名伪指令
格式:NAME 模块名 功能:给一个模块命名。通常作为一个 模块的第一条指令。
编辑ppt
8
2.段定义伪指令
段名 SEGMENT [定位属性] [组合 属性] [‘类别’]
┇ 段名 ENDS 功能:定义程序中的一个逻辑段,并指 定该逻辑段的属性。
编辑ppt
9
① 定位属性
编辑ppt
19
通常为使程序简洁,约定数据段的 ‘类别’ 属性取名为‘DATA’,附加数据 段的‘类别’ 属性取名为‘EXTRA’,堆 栈段的‘类别’ 属性取名‘STACK’,代 码段的‘类别’ 属性取名为‘CODE’。
编辑ppt
14
STACK 与PUBLIC一样,表示本段与其 它模块中的同名、同‘类别’段按各模 块连接的顺序相邻地连接在一起,组成 一个物理段,该段大小也不能超过64K。 但与PUBLIC不同的是,该段作为堆栈段。 一般情况下,各个模块的堆栈段也都定 义成同名、同‘类别’且组合属性为 STACK的段,以便使连接后生成的文件 只有一个堆栈段。
编辑ppt
12
各个组合属性的意义如下:
[NONE] 表示本段与其它段逻辑上不发生 关连,尽管在物理地址上可能相邻,但 每个段都有自己的段首址,这是隐含的 组合属性,可以省略。在前面学过的例 题中,多采用这种组合属性。
编辑ppt
13
PUBLIC 表示应将本段与其它模块中的同 名、同‘类别’段按各模块连接的顺序 相邻地连接在一起,组成一个物理段, 但该段大小不能超过64K。一般情况下, 各个模块的数据段、代码段都分别定义 成同名、同‘类别’且组合属性为 PUBLIC的段,以便使连接后生成的文件 只有一个数据段、一个代码段。
编辑ppt
15
COMMON 连接程序为本段和同名、同 ‘类别’的其他段指定相同的段地址, 即将本段与这些段相覆盖,段的长度取 决于最长的具有COMMON属性的段的长 度。
编辑ppt
16
AT 表达式 连接程序将把本段装在表 达式的值所指定的段地址上。使用这个 组合属性可以很方便地实现在某一固定 存储区(如ROM区或中断向量区)内的 固定偏移地址处定义标号或变量,这样 源程序就能以标号和变量的形式访问这 些固定的存储单元。
合集下载

汇编语言程序设计-第十章_图形与发声系统的程序设计

汇编语言程序设计-第十章_图形与发声系统的程序设计

河南师范大学计算机与信息技术学院
34
IBM-PC 汇编语言程序设计
计时器0的初始化程序-1
计数器0作为定时器为系统时钟提供计时基准。 计数器0的OUT端与中断控制器8259A的中断请求端IRQ0相连, 为IRQ0提供18.2次/秒的中断信号,即OUT0的输出频率应当是 18.2Hz,这正是CLK0的输入频率1.1931817MHz与216相除的 结果。 计数器0选择Mode3;读/写LSB、MSB。 则控制字应为:00110110B=36H 在IBM PC BIOS中,计数器0的初始化程序如下:
2020/2/27
河南师范大学计算机与信息技术学院
10
IBM-PC 汇编语言程序设计
10.3.1 读写像素
2020/2/27
河南师范大学计算机与信息技术学院
11
IBM-PC 汇编语言程序设计
10.3.2 图形方式下的文本显示
2020/2/27
河南师范大学计算机与信息技术学院
12
IBM-PC 汇编语言程序设计
2020/2/27
河南师范大学计算机与信息技术学院
33
IBM-PC 汇编语言程序设计
例10.12-2
;将计数器2设定为模式3,计数初值为65536
MOV OUT SUB OUT OUT
AL , 10110110B 43H , AL AL , AL 42H , AL 42H , AL
2020/2/27
7
IBM-PC 汇编语言程序设计
10.2.2 数据到颜色的转换
2020/2/27
河南师范大学计算机与信息技术学院
8
IBM-PC 汇编语言程序设计
10.2.3 直接视频显示

《汇编语言程序设计》-相伟-电子教案第2章

《汇编语言程序设计》-相伟-电子教案第2章

③ TYPE 返回其后变量或标号的类型。
表2-4 TYPE返回值
变量 标号
类型
DB DW DD DQ NEAR FAR
返回值
1 2 4 8 -1 或 0FFH -2 或0FEH
例如:在下面的数据段中。
DATA
SEGMENT
A
DB 87H,45H,92H
B
DW 34D6H,0F67H
C
DD ?
DATA
段属性:指标号所在段的段地址。
偏移地址属性:指标号所定义的单元到标号所 在段的开始位置之间的字节距离。
类型属性:标号的类型属性分为近类型NEAR 和远类型FAR。NEAR类型的标号称为近标号, 近标号只能用于段内转移。FAR类型的标号称 为远标号,远标号既可用于段内转移,也可用 于段间转移。
表2-3 逻辑运算符
逻辑运算符
AND OR XOR NOT SHR SHL
功能
与 或 异或 非 逻辑右移 逻辑左移
例如: 假设NUM的值为6BH 则:
NUM AND 87H NUM OR 87H NUM XOR 87H NOT 87H NUM SHR 2 NUM SHL 2
;表达式的值是03H ;表达式的值是0EFH ;表达式的值是0ECH ;表达式的值是78H ;表达式的值是1AH ;表达式的值是0ACH
DATA SEGMENT
STR DB “How do you do ?$”
DATA ENDS
STACK SEGMENT
STACK
DB
200 DUP(?)
STACK ENDS
CODE SEGMENT
ASSUME DS:DATA,SS:STACK,CS:CODE

汇编语言程序设计教程(第4版)课件全套 卜艳萍

汇编语言程序设计教程(第4版)课件全套  卜艳萍

2018/9/26
汇编语言程序设计教程
5
汇编语言程序的建立及汇编过程
2018/9/26
汇程
(1)编辑 • 为了将源程序送入计算机并建立一个源程序名为*.ASM的 源文件,我们可以使用任何流行的字处理程序或能编辑 ASCII码文字符号的编辑程序。 (2)汇编 • 对已经编辑好的名为*.ASM的源文件,我们可以调用DOS 下的宏汇编程序MASM或小汇编程序ASM进行汇编。 • 为了适应编制多模块组成的大程序和调用 DOS支持下的公 共子程序的需要,汇编以后的目标程序中的地址部分仍不 是可执行的绝对地址,而是可浮动的相对地址。
2018/9/26 汇编语言程序设计教程 22
常见错误信息及其含义
Operand must be segment or group. • 操作数应当是段名或组名。提供的却是其他名字或常数。 Symbol has no segment. • 不知道标识符的段属性。 Operand must be type specifier. • 操 作 数 应 给 出 类 型 说 明 符 , 如 NEAR 、 FAR 、 BYTE 、 WORD等。 Symbol already defined locally. • 已被指定为内部( Local )标识符,又说明为 EXTRN 的操 作数。
2018/9/26
汇编语言程序设计教程
8
常用DOS命令
• • • • • • • • • 查看目录命令DIR,它列出指定盘上的文件目录。 如:C>DIR D: 或 C>DIR D:/W 它们将列出D盘上全部文件。 显示命令 TYPE ,它将磁盘上所指文件的内容显示在屏幕 上或在打印机上输出(若打印机已联机)。 如:C>TYPE TEST.ASM 此命令将当前目录下的文件TEST.ASM的内容显示出来。 拷贝命令COPY,它把一个或多个文件拷贝成副本。 如:C>COPY TEST1.ASM A: 将把C盘的文件TEST1.ASM同名复制到A盘上。

《汇编语言程序设计》-相伟-电子教案第4章-54页PPT精品文档

《汇编语言程序设计》-相伟-电子教案第4章-54页PPT精品文档
JMP BX 指令执行后,将BX的内容直接赋给IP。所以, (IP)= 3000H 。
JMP WORD PTR[BX] 指令执行后,先计算出存储单元地址23000H, 再从该单元中取出内容送给IP。所以,(IP) = 2536H 。
4.1.2 段间寻址
段间寻址分为段间直接寻址和段间间接 寻址两种方式。其转移方式是从当前代 码段跳转到另一个代码段,因此需要修 改CS段地址和IP偏移地址的值。
NEXT:……
分析:本程序段使用了无符号数跳转指令JA,若(AL)>5 则转NEXT,否则顺序执行。
(1)(AL)= 20H>5,满足条件,跳至NEXT处执行。 (2)(AL)= 5,不满足条件,顺序执行“ADD AL, 5 ”。 (3)(AL)= 0FFH,由于JA是无符号数跳转指令,对无符
无符号数条件转移指令
① JA/JNBE
用于两个无符号数a、b的比较,若a>b则条件满足,实现转。 ② JNA/JBE
用于两个无符号数a、b的比较,若a≤b则条件满足,实现转移。
③ JB/JNAE
用于两个无符号数a、b的比较,若a<b则条件满足,实现转移。
④ JNB/JAE
用于两个无符号数a、b的比较,若a≥b则条件满足,实现转移。
程序段如下:
MOV CL ,0 ;保存BX中1的个数,初值为0
AGAIN:AND BX ,BX
JZ EXIT ,(BX)= 0时,结束循环转EXIT
SAL BX ,1 ;将BX中的最高位移入CF中
JNC AGAIN ;如果CF= 0转AGAIN
INC CL
;否则,CL的值加1
JMP AGAIN ;转AGAIN处继续处理
分析:求一个数的绝对值时,首先要测试该数的正负。我们可

汇编语言程序设计

汇编语言程序设计

第四章汇编语言程序设计(assembly languageprogramming)§4.1 汇编语言(assembly language)一.概述汇编语言:一种符号语言,它用助记符表示指令的操作码和操作数,用标号或符号代表地址、常量和变量,与机器语言几乎一一对应汇编语言程序:用汇编语言编写的程序汇编:把汇编语言源程序翻译成机器语言目标程序的过程汇编语言源程序手工汇编或汇编程序机器语言目标程序汇编程序:用来完成汇编工作的程序,有小汇编ASM宏汇编MASM动态调试程序DEBUG二.汇编语言的语句格式: [名称] 指令助记符 [操作数] [;注释]带方括号的项有时可没有,注释项完全可以没有每个部分用空格分开每行最多可有132个字符,但最好不要超过屏宽80语句可分成指令性语句和指示性语句(伪指令语句)指令性语句汇编后可生成机器码[标号:] 指令助记符 [操作数] [;注释]指示性语句指示汇编程序处理一些工作[名称] 伪指令(指示符) [操作数] [;注释]1.名称(或称标识符)给指令或存储单元地址起的名字,由字母、数字、字符组成字母:A~Z ,a~z数字:0~9字符:可打印+-*/=()[]〈〉;.' ’ ,_:?@$&(非打印空格制表符TAB 回车换行)(界符:,;:.()[]〈〉+-*/=?_@&$' ’界符用来表示某个标志的结束)数字不能作名称的第一个字符,圆点.仅能作第一个字符保留字不能作标识符($、?是保留字,与其它字符组合除外)名称最长为31个字符当名称后跟冒号,表示该名称是其后指令的标号,代表该指令的开始地址,其他指令可以用该标号作为转移地址当名称不跟冒号,它可能是标号或变量名,伪指令前的名称不跟冒号冒号隐含NEAR属性,例:供段内调用写成 OUTPUT:OUT DX ,AL供段间调用写成 OUTPUT OUT DX ,AL2.指令助记符8086/8088指令,也可以是伪指令,如果指令有前缀(LOCK、REP等)则前缀和指令用空格分开3.操作数指令执行的对象,可能有一、二个或没有名称指令助记符操作数注释RET ;返回(无操作数)COUNT: INC CX ;CX加1(1个操作数)MOV AL,BL ;ALBL(2个操作数)伪指令可有多个操作数COST DB 3,4,5,6,7,8 ;(6个操作数,用逗号分开)操作数可以是常数、寄存器名、标号、变量、表达式,MOV AX,[BP+4];(第二个操作数为表达式)4.注释可选项,使程序易读,汇编时不作处理注释前面要加分号,它可位于操作数之后,也可位于行首三.常量与变量1.常量,也叫常数,没有属性的纯数,汇编时已确定的值·数字常量为0~65535中的数(16位寄存器使用,伪操作可定义32位),进制加后缀说明,十进制加D(可省),二进制加B,八进制加Q,十六进制加H,若十六进制第一位为字母,则前头应加0·字符和字符串叫串常量,是ASCII码字符串,必须加单(或双)引号例:‘A’,“ABC”,汇编后变成41H,414243H2.变量,用于表达数值(或串)的标识符,有三个属性① 段属性(SEGMENT)② 偏移地址属性(OFFSET)③ 类型属性(TYPE),用DB、DW、DD定义§4.2 伪指令(pseudo-instruction)一.符号定义伪指令1.等值EQU格式:符号名 EQU 表达式用来给符号定义一个值,程序中出现该符号就用其值代替,EQU只能定义一次DATA EQU 1234 ;代表一个数XYZ EQU ALPHA[SI] ;代表一个地址2.等号 =格式:符号名 = 表达式意义与EQU一样,但程序中可重新定义符号的值EMP = 6 ;EMP代表6EMP =EMP + 1 ;EMP现在代表73.解除PURGE格式:PURGE 符号名(符号1,符号2,……,符号n)用于解除所定义的符号使该符号在以后的定义中有效例:原定义 TAB EQU 5可用 PURGE TAB 来解除然后可重新定义 TAB EQU 10二.数据定义伪指令用于预置存储器或定义变量1.定义字节DB格式:[变量名称] DB 表达式例:DATA1 DB 2,3,4,5;从DATA1单元开始存放4字节数据2.定义字DW格式:[变量名称] DW 表达式例:TAB DW 1234H;TAB单元内容为34H,TAB+1单元内容为12H 3.定义双字DD格式:[变量名称] DD 表达式每个数据二字(四字节)低位部分在低地址,高位部分在高地址·用DB/DW/DD定义的数每行不得超过16项,超过16项必须换行DB/DW/DD用法<1> SUM DB ? ;给SUM单元分配一个字节,内容未定<2> TAB DB 20 DUP(0);给TAB开始单元分配20字节,内容为0<3> TIME DW 100 DUP(?);给TIME开始单元分配100字,内容未定<4> ADDR DD TABLE ;TABLE的地址(双字)给ADDR例:DATA SEGMENTORG 100HTABLE DB 1,2,3,4ADDR DD TABLEDATA ENDS假设汇编后DS=13A2H(如果ADDR用DW定义,只得偏移量)(如果TABLE是变量,ADDR得地址,是常量,ADDR得数值)<5> LETTER DB ‘ABCDEFG’;将字符串以ASCII码形式填入LETTER开始的内存<6> HIS DB 3 DUP(‘WELCOME!’,0DH,0AH);从HIS单元开始重复3次存放WELCOME!和回车换行符4.标号LABEL格式:标号名 LEBEL 类型标号用于说明可执行代码在汇编语言程序中的位置,即符号地址,供调用和转移之用标号有三个属性段属性偏移量属性距离属性(即格式中的类型):NEAR(近程)和FAR(远程)NEAR:本标号为段内标号,调用本标号只提供偏移地址,段基址为当前代码段FAR:本标号为段间标号,调用本标号提供偏移地址和段基址一个具有NEAR属性的标号也可用标号加冒号作后缀,并排列在代码行的开头来隐含如 AGAIN LABEL NEARXOR AX,BUFF[BX]可写成 AGAIN:XOR AX,BUFF[BX]例:ROOT LABEL NEAR ;以下程序所用的ROOT标号是段内属性COMP PROC NEAR ;以下程序所用的过程下的标号是段内属性TIME PROC FAR ;以下程序所用的过程下的标号是段间属性三.运算符1.算术运算符+、-、*、/、MOD即加、减、乘、除、除法取余数(如19 MOD 7=5)操作数是数字,结果也是数字存储器地址运算时只有加减,例TAB+2、BETA-5等2.逻辑运算符AND、OR、XOR、NOT即与、或、异或、非操作数是数字,结果也是数字例:AND BX,DAT AND 0FEH3.关系算符EQ、NE、LT、GT、LE、GE即相等、不等、小于、大于、小于等于、大于等于若关系是假结果为0,若关系是真结果为0FFFFH例:MOV BX,PAD LT 3则PAD的值小于3时,汇编成MOV BX,0FFFFH否则,汇编成MOV BX,04.分析运算符可把存储器操作数分解成它的组成部分,如段值、段内偏移量、类型5.合成算符由已存在的存储器操作数生成一个段值与偏移量相同,而类型不同的新的存储器操作数以下讨论分析算符和合成算符1.取段基址SEG它加于一个变量或标号之前,回送段基址,例:ASSUME CS:SEG BEGIN ;令CS为BEGIN程序段段基址MOV AX,SEG VARN ;将VARN的段基址送AX2.取偏移量OFFSET它加于一个变量或标号之前,取其偏移量,例:MOV BX,OFFSET SUM ;将SUM的段内偏移量存入BX3.取类型码TYPE它加于一个变量或标号之前,取其类型代码DB DW DD DQ DT NEAR FAR1 2 4 8 10 -1 -2例:NG1 DB ‘A’,‘D’,3NG2 DW 88,265……MOV AL,TYPE NG1 ;NG1定义字节,AL 1MOV AL,TYPE NG2 ;NG2定义字,AL 24.取长度LENGTH它加于一个变量之前,取分配给变量的项数例:TAB DB 150 DUP(?);150项,150字节FUM DW 150 DUP(?);150项,300字节则,MOV CX,LENGTH TAB ;CX 150MOV AX,LENGTH FUM ;AX 150·注意:LENGTH返回的存储区必须用DUP()来定义,否则返回为1 5.取字节数SIZE它加于一个变量之前,取回变量所占字节总数,有SIZE = LENGTH * TYPE由上例,LENGTH TAB = 150,TYPE TAB = 1LENGTH FUM = 150,TYPE FUM = 2可知: SIZE TAB = 150SIZE FUM = 300以上5个叫数值返回算符6.类型指示PTR格式:类型 PTR 地址表达式表示PTR右边的(存储器)操作数是左边的类型,有:BYTE、WORD、DWORD、NEAR、FAR例:INC BYTE PTR [BX] ;将BX指向的单元字节加1MOV WORD PTR [DI],99 ;立即数99送DI指向的字中JMP NEAR PTR FOK ;以近程方式跳转到FOK(只取FOK偏移地址)7.指定符THIS(合成算符)用于定义当前所指单元中的类型格式:THIS 类型/距离经THIS定义过的标号具有当前汇编段、偏移量和所规定的类型或距离等属性,例:FOOB EQU THIS BYTE;下面的字类型变量FOOW在这里指定为字节型FOOBFOOW DW 120 DUP(?)定义后,对同一数据块(FOOB和FOOW有相同的段和段内偏移量)有两种类型访问FOOB时为字节操作,访问FOOW时为字操作ADD AL,FOOB[3] ;将数组第四字节与AL相加MOV AX,FOOW[4]将数组第五六字节组成的字送AX也可以这样来构成FOOB:FOOB EQU BYTE PTR FOOW又例:DATAF EQU THIS FARDATAN:MOV AX,FOO这时 JMP DATAN为近程转移JMP DATAF为远程转移8.段修改符:用于对某一地址表达式指定临时段基址,如MOV AX,ES:[BX];指定ES为BX的段基址,对当前指令有效9.短程符SHORT与NEAR、FAR功能类似,位移量一字节范围 -128~+127,对应一条短转移指令例:JMP SHORT LAB;转移到标号LAB的地址10.方括号 [ ]表示操作数(加方括号)是一个地址偏移量,不是数值格式:[表达式] 或者 [表达式][ ]例:MOV [BX],AX ;将AX内容送BX所指单元MOV [BX+7],AX ;将AX内容送BX+7所指单元MOV AX,[BX][SI] ;将BX+SI所指单元内容送AX11.取高/低字节HIGH/LOW用来分离常量的高/低字节,对存储器操作数无效例:DATA EQU 789AHMOV AL,HIGH DATA ;AL=78HMOV AL,LOW DATA ;AL=9AH四.段定义伪指令1.SEGMENT—ENDS格式:[段名] SEGMENT [定位类型] [组合类型] [‘类别名’]┇[段名] ENDS·段名·定位类型(Align),给出实际段地点的种类或段长度的信息<1> PARA 段起始地址从一个节(paragraph)的边界开始<2> BYTE 段地址可从任意绝对地址开始<3> WORD 段地址从任意一个字的边界开始<4> PAGE 段地址从某一页的边界开始(一页等于256字节)<5> INPAG 段长度小于一页未说明定位类型时则默认为PARA·组合类型(Combine),又称联合类型,程序中各程序段的连接和定位方法<1> PUBLIC 将段名相同的程序段(亦称模块)依此紧密连接,但彼此不相互覆盖<2> COMMON将段名相同的程序段连接,各段都从同一地址开始<3> AT表达式段定位在由表达式(结果必须是常数)所指定的节的边界上例:AT 1234H,则段地址被定位在物理地址为12340H处,如果希望从12345H开始,则在SEGMENT命令的下一行写上ORG 5AT 不能向前引用<4>STACK 表示这个段是运行期间的堆栈段<5>MEMORY 该段是相互连接的几个段中地址最高的段<6>NONE本段与其他段无组合关系未说明联合类型时则默认为NONE,不和别的段连接·‘类别名’(Class),也叫组名,加单引号,汇编后类别名相同的程序段代码集中在一起定位,形成一个统一的物理段,类别名可自定,约定的有CODE (代码段)、DATA(数据段)、STACK(堆栈段)、CONST(常数)、MEMORY(存储)等2.ASSUME段寄存器说明伪指令,指明所定义的段名所使用的段寄存器(告诉汇编程序在运行期间通过哪一个段寄存器寻址才能找到所要的指令和数据),本语句一般在定义的代码段中第一条出现格式:ASSUME 段寄存器:段名 [,…]例: ASSUME CS:CODE,DS:DATA ;用SEGMENT—ENDS定义ASSUME CS:SEG KGF,DS:SEG BEGIN;由算符定义ASSUME ES:NOTHING ;用关键字定义,表示不使用ES(取消ES段寄存器)(保留字NOTHING在这里作为一个段名参数,ASSUME NOTHING表示取消所有段寄存器,各个段寄存器只能在指令性语句中由MOV指令赋值)·ASSUME只是设定段寄存器与逻辑段的对应关系,并没给段寄存器装入实际值,所以程序中必须对DS、ES、SS赋值,而CS由系统赋值3.ORG定点伪指令(段内定位),用以确定下一条指令(或变量)在当前段中的偏移地址格式:ORG 表达式表达式以65536(64K)为模计算,超过64K则取其余数本语句前未定义过的变量不可出现在表达式中,表达式可包含$(程序计数器当前值)如:ORG OFFSET $+1000表达式必须为正值,若为负值,就会从当前段的地址高端开始表达式最好不要写成OFFSET $-1000,以免把汇编过的1000个字节覆盖掉ORG指令不能带标识符,如START:ORG 0和SKIP ORG 100都是错的例:CODE SEGMENT ;段起始ORG 100H ;本程序代码从偏移地址100H开始装入ASSUME CS:CODE ;装入代码段地址到CS中START:IN AL,30H ;程序段SHL AL,1OUT 32H,ALJMP STARTCODE ENDS ;程序段结束END START ;汇编结束例:DATA SEGMENTORG 50HDAT DW 1,2,$+1┇DATA ENDS注意DAT不能定义为字节,否则与$不匹配五.过程定义伪指令格式:过程名 PROC 属性┇过程体RET过程名 ENDP·过程名不可缺省,它和标号一样有三个属性:段属性、偏移地址属性、距离属性·距离属性在PROC后指定,有NEAR和FAR,如果希望过程能让别的程序调用,则必须是FAR属性·一个过程允许多个入口,入口处有标号,标号要说明距离属性例:延时100ms子程序DELAY PROC ;隐含NEARMOV BL,10 4TDLY1: MOV CX,2801 ;内循环延时10ms 10TWAIT0: LOOP WAIT0 9/5T DEC BL 2TJNZ DLY1 8/4TRET 8TDELAY ENDP六.结束伪指令·NAME:给模块(源程序)命名格式:NAME 模块名称它出现在源程序的最前端·END:汇编结束格式:END [标号名]它通知汇编程序本模块汇编到此结束标号名是可选项,若选取,应指向执行本程序的起始地址若一个源程序是多模块,只有主模块的END后加标号,子模块只有END七.宏指令宏指令:在汇编语言源程序中多次重复出现的程序段,用一个名字来定义,然后当成一条指令来使用宏汇编:源程序中的宏指令经汇编程序翻译后扩展成对应程序段的机器码宏指令用MACRO—ENDM来定义,如:CRLF MACROMOV DL,0DHMOV AH,02HINT 21H┇ENDM(CRLF作回车换行)§4.3 汇编语言程序设计(assembly language programming)一.设计要求1.程序简明、易读、易调试、易修改2.程序占用内存要少(包括程序长度及运行时所需空间)3.程序运行速度要快二.基本设计方法1.选择合适的计算方法2.绘制程序流程图3.编制程序4.上机调试三.汇编语言程序格式和基本结构一般一个完整的汇编语言程序至少应包括以下三个程序段简化段格式:.MODEL SMALL.STACK 64H.DATA……;紧接指令代码从偶地址开始存放.CODESTART: MOV AX,@DATAMOV DS,AX……END STARTDATA SEGMENT ‘DATA’┇数据段DATA ENDSSTACK SEGMENT ‘STACK’┇堆栈段STACK ENDSCODE SEGMENT ‘CODE’ASSUME CS:CODE,DS:DATA,SS:STACKSTART:MOV AX,DATAMOV DS,AXMOV AX,STACKMOV SS,AX┇代码段CODE ENDSEND START程序的基本结构分为顺序结构、分支结构、循环结构和子程序结构(一)顺序结构一种简单程序,按顺序执行例1.将200H单元的低4位和高4位分别送入201H和202H单元的低4位,这二单元的高4位清0200HX X201H 0202H 0DATA SEGMENTORG 200HBCD DB 47HDB 2 DUP(?)DATA ENDSSTACK SEGMENTSTA DB 20 DUP(?)TOP EQU LENGTH STASTACK ENDSCODE SEGMENTASSUME CS:CODE,DS:DATA,SS:STACKSTART:MOV AX,DATAMOV DS,AXMOV AX,STACK MOV SS,AXMOV AX,TOPMOV SP,AXMOV BX,OFFSET BCD MOV AL,[BX]AND AL,0FHMOV [BX+1],AL MOV AL,[BX]MOV CL,4ROL AL,CLAND AL,0FHMOV [BX+2],AL HLTCODE ENDS END START例2.将ADDR1和ADDR2两单元开始的二个16位无符号数相加,考虑到进位,将其结果存放在SUM开始的三个单元中DATA SEGMNETADDR1 DW 7854HADDR2 DW 9981HSUM DB 3 DUP(0)DATA ENDSSATCK SEGMENTSTA DB 20 DUP(?)TOP EQU LENGTH STASTACK ENDSCODE SEGMENTASSUME CS:CODE,DS:DATA,SS:STACKSTART: MOV AX,DATAMOV DS,AXMOV AX,STACKMOV SS,AXMOV AX,TOPMOV SP,AXMOV AX,ADDR1ADD AX,ADDR2MOV WORD PTR SUM,AXADC SUM+2,0HLTCODE ENDSEND START例3.查表将DATA1单元中字节类型数据(0~0FH)转换成ASCII码,并存入ASCII单元中DATA SEGMENTASCTAB DB 30H,31H,32H,33H,34H,35H,36H,37HDB 38H,39H,41H,42H,43H,44H,45H,46HDATA1 DB 09HASCII DB ?DATA ENDSSTACK SEGMENT STACKDW 10 DUP(?)STACK ENDSCODE SEGMENTASSUME CS:CODE,DS:DATA,SS:STACKSTART PROC FARASCTAB 30 031 1┇93941 A42 B┇46 F┇ASCIIPUSH DSMOV AX,0PUSH AXMOV AX,DATAMOV DS,AXMOV BX,OFFSET ASCTABMOV AL,DATA1XLATMOV ASCII,ALRETSTART ENDPCODE ENDSEND START例4.将200H和201H单元字节的高4位对调,低4位不变CODE SEGMENT200H201HORG 200HDATA1 DB 0F3H,47HASSUME CS:CODE,DS:CODESTART:MOV AX,CODEMOV DS,AXMOV CL,4MOV AX,WORD PTR DATA1 ;AX=47F3HROL AX,CL ;AX=7F34H ROL AH,CL ;AX=F734H ROL AL,CL ;AX=F743H MOV WORD PTR DATA1,AXHLTCODE ENDSEND START(二)分支结构通过判断产生分支,借助于条件转移指令跳转到相应的分支地址执行分支程序分支程序由三部分组成① 测试部分,负责产生决定分支的条件② 定向部分,根据测试条件是否满足,决定程序是否分支③ 标注部分,标明分支的去向利用跳转表也可使程序转移到分支地址例1.16位二进制补码X在DATA1单元,求其绝对值送DATA2单元(设X≠8000H)∣X∣= X,X≥0-X, X<0DATA SEGMENTDATA1 DW 9F87HDATA2 DW ?DATA ENDSSTACK SEGMENTSTA DB 20 DUP(?)TOP EQU LENGTH STA STACK ENDSCODE SEGMENTASSUME CS:CODE,DS:DATA,SS:STACK START:MOV AX,DATAMOV DS,AXMOV AX,STACKMOV SS,AXMOV AX,TOPMOV SP,AXMOV AX,DATA1AND AX,AXJNS ABS0NEG AXABS0: MOV DATA2,AXHLTCODE ENDSEND START例2.多重分支学生成绩按分数段划分为:A、90~100(5AH~64H)B、80~89 (50H~59H)C、70~79 (46H~4FH)D、60~69 (3CH~45H)E、 <60 ( <3CH)已知分数存放在MARK单元,请用ASCII码的A、B、C、D、E去代表MARK单元中的分数所属的段,并存于GRADE单元DATA SEGMENTMARK DB 81GRADE DB ?DATA ENDSCODE SEGMENT ASSUME CS:CODE,DS:DATA START:MOV AX,DATAMOV DS,AXMOV BX,OFFSET MARKMOV AL,[BX]CMP AL,3CHJC LPECMP AL,46HJC LPDCMP AL,50HJC LPCCMP AL,5AHJC LPBMOV AL,41H ;‘A’JMP SHORT DONELPB: MOV AL,42H ;‘B’JMP SHORT DONELPC: MOV AL,43H ;‘C’JMP SHORT DONELPD: MOV AL,44H ;‘D’JMP SHORT DONELPE: MOV AL,45H ;‘E’DONE: MOV BX,OFFSET GRADE MOV [BX],ALHLTCODE ENDSEND START法2:直接查表转换(顺序结构)DATA SEGMENTTAB DB ‘EEEEEEDCBAA’MARK DB 81GRADE DB ?DATA ENDSCODE SEGMENTASSUME CS:CODE,DS:DATA START:MOV AX,DATAMOV DS,AXMOV BX,OFFSET TABMOV AL,MARKMOV AH,0MOV CL,10DIV CLXLATMOV GRADE,ALHLTCODE ENDSEND START(三)循环结构使机器重复执行一系列指令,是一种闭合的分支结构循环程序由四部分组成① 初始化部分(或预置部分),负责设置循环初值② 处理部分,循环过程的主体③ 控制部分,修改初值,判断是否循环循环次数由一计数器控制循环次数由某一指定条件是否满足来决定④ 结束部分,处理循环程序的最后结果例1.将DTAB单元开始的一组字节补码数(≤255个)求平均值,结果存入AVE单元,若结果为负,在SYM置FFH否则置0DATA SEGMENTDTAB DB 0FDH,0FCH,05H,0F8H,……DB 08H,25H,83H,97H,……COUNT EQU $-DTABAVE DB ?SYM DB ?DATA ENDSSTACK SEGMENT STACKSTA DB 20 DUP(?)STACK ENDSCODE SEGMENTASSUME CS:CODE,DS:DATA,SS:STACK AVER PROC FARSTART:PUSH DSMOV AX,0PUSH AXMOV AX,DATAMOV DS,AXLEA BX,DTABMOV CX,COUNTXOR DX,DXNEXT: MOV AL,[BX]CBWADD DX,AXINC BXLOOP NEXTMOV AX,DX MOV CL,COUNTIDIV CLMOV AVE,ALMOV SYM,0AND AL,ALJNS DONEMOV SYM,0FFHDONE: RETAVER ENDPCODE ENDSEND START循环控制方法:循环次数由计数器控制例2.将8位二进制小数规格化设需规格化的小数在DATA1单元,要求规格化后使其最高位为1,并存入DATA2单元,办法是把小数左移至最高为位为1为止,左移次数存入DATA3单元,若小数是0,则在DATA2和DATA3单元存入0示例:DATA1 DATA2 DATA322H 88H 02H01H 80H 07HCBH CBH 00H00H 00H 00HDATA SEGMENTDATA1 DB 22HDATA2 DB ?DATA3 DB ?DATA ENDSSTACK SEGMENTSTA DB 20 DUP(?)TOP EQU LENGTH STA STACK ENDSCODE SEGMENTASSUME CS:CODE,DS:DATA,SS:STACKSTART:MOV DATAMOV DS,AXMOV AX,STACKMOV SS,AXMOV AX,TOPMOV SP,AXMOV CL,0MOV AL,DATA1 ;取数AND AL,AL ;设ZF、SF标志JZ DONECHKSF:JS DONEINC CLADD AL,AL ;左移一位JMP SHORT CHKSFDONE: MOV DATA2,ALMOV DATA3,CLHLTCODE ENDSEND START循环控制方法:循环次数由某一指定条件是否满足来决定例3.多重循环将n个无符号字节数从小到大排序,方法是依此比较相邻两单元的数,若前小后大不交换第一轮比较n-1次,最大数沉底(高地址)第二轮比较n-2次,次大数沉到最大数上面第n-1轮比较完若在某一轮比较时没有出现交换,说明顺序已排好,不必后续比较,故设交换标志AH=1代表不交换,AH=2代表有交换DATA SEGMENTLIST DB 18,6,11,3,1,2,3,9,8,7,6 DB 111,110,99,112,115,114,113,98,96,97 COUNT EQU $-LISTDATA ENDSSTACK SEGMENT STACKSTA DW 10 DUP(?)STACK ENDSCODE SEGMENTASSUME CS:CODE,DS:DATA,SS:STACKSET PROC FARSTART:PUSH DSMOV AX,0PUSH AXMOV AX,DATAMOV DS,AXMOV DX,COUNT-1 ;n-1轮(外循环)EXGO:MOV CX,DX ;每轮次数(内循环)MOV AH,01H ;交换标志MOV BX,OFFSET LIST ;数据块首址INGO: MOV AL,[BX]INC BXCMP AL,[BX]JC NEXT ;数1小,不交换XCHG AL,[BX] ;数1>数2,交换DEC BXXCHG AL,[BX]INC BX ;恢复数据指针MOV AH,02H ;有交换标志NEXT: LOOP INGODEC DXJZ DONEDEC AHJNZ EXGODONE: RETSET ENDPCODE ENDSEND START(四)子程序结构基本要求:① 子程序的开始(入口处)应给予一个标号,结束处有返回指令② 通用子程序要说明入口条件(入口参数)和出口条件(出口参数)③ 调用子程序要注意保护现场和恢复现场调用—返回的堆栈操作:CALL target ;段内SPSP-2,[SP+1,SP] IP,IPIP+disp段间SPSP-2,[SP+1,SP] CS,CSsegSPSP-2,[SP+1,SP] IP,IPoffsetRET ;段内IP [SP+1,SP],SPSP+2;段间IP [SP+1,SP],SPSP+2CS [SP+1,SP],SPSP+2RET n ;如上操作后SPSP+n·子程序入口标号应说明距离属性·对于一个FAR过程,过程初必须先保护程序段前缀中的中断指令INT 20H 的断点地址(DS:0000),它是一个程序正常结束退出的中断处理程序例1.将内存200H单元开始的一个五字节十六进制数显示出来(低位在低地址)DATA SEGMENTORG 200HNUM DB 9AH,78H,56H,34H,12HDATA ENDSSTACK SEGMENTSTA DB 20 DUP(?)TOP EQU LENGTH STASTACK ENDSCODE SEGMENTASSUME CS:CODE,DS:DATA,SS:STACKSTART:MOV AX,DATAMOV DS,AXMOV BX,5MOV AX,STACKMOV SS,AXMOV SP,TOPMOV SI,OFFSET NUMNEXT: MOV DH,[SI+BX-1] ;(不用AL,因调用MOV DL,DH ; display返回时DL→AL)MOV CL,4ROL DL,CLAND DL,0FHCALL DISPLAYMOV DL,DHAND DL,0FHCALL DISPLAYDEC BXJNZ NEXTMOV AX,4C00HINT 21HDISPLAY PROC NEARADD DL,30HCMP DL,3AHJB OKADD DL,07H;(如果DL=3AH,3AH+7=41H是‘A’)OK: MOV AH,02HINT 21HRET。

汇编课件第10章

汇编课件第10章

10.1 汇编语言与C/C++语言的混合编程
1.嵌入汇编语言
说明: 在嵌入的汇编语言指令中,可以使用C/C++语言的数据格式。例如,1a69h可以书写 为0x1a69。 嵌入的汇编语言代码不能使用MASM的伪指令来定义数据。 在嵌入的汇编语言代码中,不需要保护寄存器EAX、EBX、ECX、EDX、ESI和EDI 的值,必要时由C/C++编译器负责生成保护指令。需要保护寄存器DS、SS、ESP、EBP 以及方向标志DF的值。
10.2 并发程序设计
5.信号量
(3)信号量的实现 void up(SEMAPHORE *sem) { int* pflag= &(sem->flag); __asm { mov eax, pflag InUse: lock bts [eax], 0 jc InUse } sem->value++; sem->flag = 0; } 通过使用lock bts指令,以确保一个信号量同一时刻最多有一个进程或线程对其进 行操作。
第10章 汇编语言编程高级主题 10章
本章要点
要学习本章,需要具备一定的C/C++语言程序设计基础 了解Microsoft Visual C++ 6.0环境下汇编语言与C/C++语言混合 编程的基本方法 了解设计并发程序必须考虑的问题 了解并发环境下实现进程(或线程)同步的基本方法 本章关于并发程序设计方面的知识,对于学习操作系统课程会有所 帮助
10.1 汇编语言与C/C++语言的混合编程
1.嵌入汇编语言
(1)格式 __asm } 例如: __asm { mov mov out } 也可以将__asm放在每条汇编语言指令前。例如: __asm mov ax, 1a69h __asm __asm mov out dx, 378h dx, ax ax, 1a69h dx, 378h dx, ax { ; 汇编语言指令序列

精品课件-计算机原理与汇编语言程序设计(方春春)-第10章

第10章 输入/输出系统
第10章 输入/输出系统
10.1 概述 10.2 程序查询传送方式 10.3 程序中断传送方式 10.4 8086 CPU的中断 10.5 直接存储器存取(DMA)方式 10.6 通道控制方式 习题
第10章 输入/输出系统
10.1 概 述 计算机与人之间的交流是通过输入/输出(I/O)设备来实现的。 输入/输出设备也被称为外部设备(外设),是计算机系统的一个 重要组成部分。在计算机系统中,常用的外设有键盘、鼠标、打 印机、显示器、扫描仪等,还有一些其他的专用设备。 计算机中的内存和CPU都是半导体器件,工作原理和速度相 当,所以它们之间可以直接相连。而外部设备则种类繁多,各类 外部设备不仅结构和工作原理不同,而且与主机的连接方式也可 能完全不同。为了方便地将主机与各种外设连接起来,需要在 CPU与外设之间使用一个特殊的连接电路作为CPU与外设交换信息 的转换器,称为输入/输出接口(I/O接口),简称接口。主机与外 设之间存在以下主要差异:
从I/O的接口可以看出,I/O接口中可能存在三种信息,即数 据信息、状态信息和控制信息。
第10章 输入/输出系统
图10-1 I/O接口电路的典型结构
第10章 输入/输出系统
1. 数据信息 数据信息是可以通过输入/输出设备送到计算机的原始数据, 也可以是经过计算机处理后送往输出设备的结果数据。 CPU与外设交换的数据信息将在I/O接口中被缓冲或锁存。这 些数据信息可能以以下几种形式出现: (1) 数字量:二进制数以及ASCII码形式的数据信息。 (2) 开关量:用“0”和“1”来表示两种状态,如开关的通 /断、电机的转/停、阀门的开/关等。 (3) 模拟量:模拟的电压、电流或者非电量。一般接口会对 电模拟量进行A/D或D/A转换后再完成CPU与外设之间的数据传送。

《汇编语言程序设计》-相伟-电子教案第8章

21世纪高等院校规划教材
汇编语言程序设计
相 伟 主编 徐小平 李珍香 副主编
中国水利水电出版社
第八章 输入输出与中断
本章学习目标
通过本章学习,读者应该掌握以下内容: 输入输出及输入输出控制方式 中断技术 DOS与BIOS中断调用
8.1 输入输出
状态
CPU
接口
数据
外设
控制
图8-1 I/O接口
8086/8088CPU的中断源分类如图8-4所 示。
1.外部中断
外部中断是由来自CPU外部的硬件电 路产生的中断,又称硬件中断。外部中 断分不可屏蔽中断NMI和可屏蔽中断 INTR。
① 不可屏蔽中断NMI
所谓不可屏蔽中断是指该中断请求不能通 过软件的方式对其屏蔽,一旦出现NMI中断请 求,CPU必须立即响应。因此,对系统能否正 确运行有重大影响的中断请求可以作为NMI中 断请求信号。如在IBM-PC机中,有以下三种情 况是作为不可屏蔽中断请求信号的,即:系统 板上的动态RAM奇偶校验错误、I/O通道扩展 板上的存储器奇偶校验错误、协处理器8087的 中断请求。
;(40H)→AL ;AL→(80H)
;(379H)→AL
1.无条件传送方式
例8-1 假设有一个包含8个开关的输入接口 电路,其端口地址为80H,读取开关数据 并存入BUF单元。
则程序段为: LEA BX,BUF IN AL,80H MOV [BX] ,AL
例8-2 假设有一个包含8个LED的输出接口电路, 其端口地址为82H,编写程序显示TAB缓冲区 中的20个数据,每个数据的显示间隔是5s。
则实现查询输出数据的程序段为: LEA BX,TAB MOV CX,COUNT2
LP: IN AL,SADDR2 TEST AL,02H JNZ LP OUT DADDR2,AL INC BX LOOP LP

汇编语言程序设计知识BHPPT学习教案


32
内部RAM
+4
10H 42
+5
19H 52
第36页/共76页
步骤:
ORG 1000H
1. 送表头首地址
START: MOV DPTR ,#TABLE
2. 取X到A 3. 求X2 存于A 4. 将X2存于内部RAM21H 5. 建立平方表
MOV A , 20H MOVC A ,@A+DPTR MOV 21H , A SJMP $ ORG 2000H
汇编语言程序设计知识BH
会计学
1
内容提要
第1章 微机基础知识 第2章 89C51单片机硬件结构和原理 第3章 89C51指令系统 第4章 汇编语言程序设计知识 第4章 C-51程序设计知识 第5章 中断系统 第6章 定时器及应用 第7章 89C51串行口及通信技术 第8章 单片机小系统片外扩展 第9章 应用系统配置及接口技术
格式:END 功能:通知汇编程序结束汇编。在END之
后所有的汇编指令均不予以处理。
第24页/共76页
EQU 赋值命令
格式:字符名称 EQU 项(数或汇编符号) 功能:把“项”赋给“字符名称”。 注意:字符名称不等于标号(其后没有冒号);
其中的项,可以是数,也可以是汇编符号。 EQU赋值过的符号名可以用作数据、代码地址、 位地址或一个立即数。可以是8位的,也可以 是16位的。 例如:
是标号,其后没有冒号,但字符名是必须的。 例如: A1 BIT P1.0 A2 BIT 02H 汇编后,P1口第0位的位地址90H就赋给了A1,而A2
的值则为02H。
第33页/共76页
4.3 程序设计基础与举例
4.3.0 MCS-51汇编语言程序代码框架 4.3.1 顺序程序设计 4.3.2 分支程序设计 4.3.3 循环程序设计 4.3.4 子程序设计及调用 4.3.5 逻辑运算程序设计
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
相关文档
最新文档