微机原理与接口技术4章.ppt
![资源得分’ title=](/images/score_1.gif)
![资源得分’ title=](/images/score_1.gif)
![资源得分’ title=](/images/score_1.gif)
![资源得分’ title=](/images/score_1.gif)
![资源得分’ title=](/images/score_05.gif)
《微机原理与接口技术4章.ppt》由会员分享,可在线阅读,更多相关《微机原理与接口技术4章.ppt(84页珍藏版)》请在淘文阁 - 分享文档赚钱的网站上搜索。
1、 第四章第四章 汇编语言程序设计汇编语言程序设计微机原理与接口技术微机原理与接口技术 第四章 汇编语言程序设计主要内容汇编语言程序的结构汇编语言语句类型和组成汇编语言程序设计 文件名.ASM 文件名.OBJ 文件名.EXE汇编语言汇编语言源程序源程序 汇编汇编目标目标程序程序连接连接执行执行/调试调试程序程序编辑程序编辑程序EDIT.EXE汇编程序汇编程序MASM.EXE连接程序连接程序LINK.EXE汇编语言程序的开发过程汇编语言程序的开发过程4.14.1机器指令机器指令/汇编语言汇编语言ML 文件名文件名.ASM 汇编语言程序的开发过程汇编语言程序的开发过程1.源程序的编辑:源程序文件要以
2、ASM为扩展名源程序文件的形成(编辑)可以通过任何一个文本编辑器实现:如DOS中的全屏幕文本编辑器EDIT2.源程序的汇编汇编是将源程序翻译成由机器代码组成的目标模块文件的过程.MASM hello.asmhello.asm如果源程序中没有语法错误,MASM将自动生成一个目标模块文件(hello.obj);否则MASM将给出相应的错误信息,这时应根据错误信息,重新编辑修改源程序后,再进行汇编3.目标模块的连接连接程序能把一个或多个目标文件和库文件合成一个可执行程序(.EXE、.COM文件):LINK hello.objLINK hello.obj如果没有严重错误,LINK将生成一个可执行文件(
3、hello.exe).汇编语言程序的开发过程汇编语言程序的开发过程4.可执行程序的运行与调试可执行程序的运行与调试经汇编、连接生成的可执行程序在操作系经汇编、连接生成的可执行程序在操作系统(统(DOSDOS)下只要输入文件名就可以运行:)下只要输入文件名就可以运行:hello.exehello.exe操作系统装载该文件进入主存,并开始运操作系统装载该文件进入主存,并开始运行。行。在在DOS下运行程序时,下运行程序时,COMMAND.COM把把.EXE文件装入内存。装入后,自动设置文件装入内存。装入后,自动设置DS和和ES寄存器指向程序段前缀,寄存器指向程序段前缀,CS、IP、SS、SP寄存器设
4、置为由连接程序传过来寄存器设置为由连接程序传过来的值(所以必须在程序中给的值(所以必须在程序中给DS、ES赋值)。赋值)。PSPDS,ES用用户户程程序序区区汇编语言程序的开发过程汇编语言程序的开发过程程序结束返回DOS的方法:START PROC FARPUSH DS MOV AX,0PUSH AX:RETSTART ENDP如果出现运行错误,如果出现运行错误,可以从源程序开始排错,可以从源程序开始排错,也可以利用调试程序也可以利用调试程序帮助发现错误帮助发现错误.采用采用DEBUG.EXEDEBUG.EXE调试程序:调试程序:DEBUG hello.exeDEBUG hello.exe4.
5、2汇编语言源程序的结构汇编语言的源程序是分段的,由几个段形成一个源程序,每一段有一个段名,以SEGMENT为段开始,以ENDS结束;源程序最后以END作结束;一般有DATA段,CODE段,STACK段;一个段由若干语句组成MY_DATA SEGMENT MY_DATA SEGMENT;定义数据段;定义数据段SUM DB?SUM DB?;为符号;为符号SUMSUM保留一个字节保留一个字节MY_DATA ENDS MY_DATA ENDS;数据段结束;数据段结束MY_CODE SEGMENT MY_CODE SEGMENT;定义代码段;定义代码段ASSUME CS:MY_CODE,DS:MY_DA
6、TAASSUME CS:MY_CODE,DS:MY_DATA;规定规定CS,DSCS,DS的内容的内容 PORT_VAL EQU 3 PORT_VAL EQU 3;端口的符号名;端口的符号名GO:MOV AX,MY_DATA GO:MOV AX,MY_DATA;DSDS初始化为初始化为 MY_DATA MY_DATA MOV DS,AX MOV DS,AX MOV SUM,0 MOV SUM,0 ;SUMSUM单元为单元为0 0CYCLE:CMP SUM,100 CYCLE:CMP SUM,100 ;SUMSUM与与100100比较比较 JNA NOT_DONE JNA NOT_DONE ;若
7、未超过转至;若未超过转至NOT_DONENOT_DONE MOV AL,SUM MOV AL,SUM ;若超过把;若超过把SUMSUM的内容的内容 OUT PORT_VAL,AL OUT PORT_VAL,AL;通过;通过ALAL输出然后停机输出然后停机 HLT HLTNOT_DONE:IN AL,PORT_VAL NOT_DONE:IN AL,PORT_VAL;输入下一个字节;输入下一个字节 ADD SUM,AL ADD SUM,AL ;与以前的结果累加;与以前的结果累加 JMP CYCLE JMP CYCLE ;转至;转至CYCLECYCLEMY_CODE ENDS MY_CODE END
8、S ;码段结束;码段结束END GO END GO ;整个程序结束;整个程序结束4.2汇编语言源程序的结构一、汇编语言的语句格式 标号标号:指令助记符指令助记符 操作数操作数;注注解解 名字名字 伪指令助记符伪指令助记符 参数参数;注解注解 1 1标号标号(名字名字):):是给指令或某一存是给指令或某一存储单元地址所起的名字。储单元地址所起的名字。可由下列字可由下列字符组成:符组成:字母:字母:A z A z;数字:数字:0 9 0 9;特殊字符:特殊字符:?、一、一、$。当标识符后跟冒号时,表示是标当标识符后跟冒号时,表示是标号。它代表该行指令的号。它代表该行指令的起始地址起始地址;当;当标
9、识符后不带冒号时,表示标识符后不带冒号时,表示变量变量;伪;伪指令前的标识符不加冒号。指令前的标识符不加冒号。2 2(伪伪)指令助记符指令助记符:表示不同操作表示不同操作的指令的指令,可为,可为80888088的指令助记符,或的指令助记符,或伪指令。伪指令。3 3操作操作(参参)数数:是指令执行的对象。是指令执行的对象。依指令的要求,可能有一个、两个或依指令的要求,可能有一个、两个或者没有者没有.4 4注解注解例如:例如:COUNTCOUNT:INC CX INC CX ;一个操作数;一个操作数COST DB 3COST DB 3,4 4,5 5,6 6,7 7 ;伪指令;伪指令,5,5个操作
10、数个操作数MOV AXMOV AX,BPBP十十44 ;二个操作数;二个操作数4.2汇编语言源程序的结构汇编语言源程序的结构二、段定义语句与段寻址二、段定义语句与段寻址 段定义伪指令一般格式为段定义伪指令一般格式为:段名段名 SEGMENT 定位类型定位类型 组合类型组合类型 类别类别 段名段名 ENDS(1)定位类型:)定位类型:用来规定段起始边界的要求,可以为以下四种,缺省为用来规定段起始边界的要求,可以为以下四种,缺省为 PARA)PAGE:16位段地址的最低位段地址的最低8位必须为位必须为0,即从一页的起点开始。,即从一页的起点开始。PARA:16位段地址的最低位段地址的最低4位必须为
11、位必须为0,即从一段的起点开始。,即从一段的起点开始。WORD:16位段地址的最低位段地址的最低1位必须为位必须为0,即从偶地址开始。,即从偶地址开始。BYTE:16位段地址可以为任意值,即段可以从任何字节开始位段地址可以为任意值,即段可以从任何字节开始4.2汇编语言源程序的结构(2)组合类型(表示本段与其他段的关系,为连接程序使)组合类型(表示本段与其他段的关系,为连接程序使用,缺省为用,缺省为NONE):):NONE:与其他段不发生关系,每段都有自己的基地址:与其他段不发生关系,每段都有自己的基地址PUBLIC:与其他同名同:与其他同名同类别类别的段连接在一起,使用的段连接在一起,使用 一
12、个共同一个共同的基地的基地址址STACK:与:与PUBLIC同样处理,但作为堆栈段同样处理,但作为堆栈段COMMON:与其他同名同:与其他同名同类别类别的段相互重叠在一起,使用一个共同的段相互重叠在一起,使用一个共同的的基地址基地址AT表达式:把本段装在表达式值所指定的段地址上(值为表达式:把本段装在表达式值所指定的段地址上(值为16位;不能位;不能指定代码段)指定代码段)MEMORY:把本段定位在所有其他段之上,若有多个则只有:把本段定位在所有其他段之上,若有多个则只有连接时遇到的第一个有效连接时遇到的第一个有效,其余按其余按COMMON处理)处理)(3)类别名:为连接程序使用,把类别名相同
13、的段放在连续的存储区间)类别名:为连接程序使用,把类别名相同的段放在连续的存储区间(一般有(一般有STACK、CODE、DATA)。)。4.2汇编语言源程序的结构段寻址格式格式:ASSUME 段寄存器:段名段寄存器:段名,段寄存器:段名,段寄存器:段名,例如,CODE SEGMENT ASSUME CS:CODE,DS:DATA,SS:STACK MOV AX,DATA ;DATA段值送AX MOV DS,AX ;AX内容送DS,DS才有实际段值CODE ENDS 4.2汇编语言源程序的结构四、汇编程序结束伪指令END 一般格式:END 表达式表达式 其中表达式表示该汇编程序的启动地址。例如:
14、END START ;表明该程序的启动地址为START。4.2汇编语言源程序的结构stacks segment stack stackdw 100h dup(?)stacks endsdata segment ;Contains all variables for the programmsgdbHello World!,0Ah,0Dh,$data ends4.2汇编语言源程序的结构code segment;Contains all codeassume cs:code,ds:data,ss:stacksorg 100hmain proc mov ax,data mov ds,axmov ax
15、,0900hmov dx,offset msg int 21h mov ax,4C00h;terminate the program normallyint 21hmain endpcode endsend main符号定义语句1.等值语句等值语句EQU给符号定义一个值或别的符号名,或一条可执行的指令。给符号定义一个值或别的符号名,或一条可执行的指令。例:例:NEW_PORT EQU 32 COUNT EQU CX CBD EQU AAD一个符号一经一个符号一经EQU赋值后,不能重新再定义。赋值后,不能重新再定义。2.等号(等号(Equal Sign)语句语句与与EQU类似,使用它能对符号进行
16、再定义。类似,使用它能对符号进行再定义。例:例:B1=6 ;B1定义为定义为6 B1=10 ;B1重新定义为重新定义为10数据定义伪指令格式格式1:变量名变量名 伪指令名伪指令名 表达式表达式1,表达式,表达式2,这里伪指令可为这里伪指令可为DB,DW,DD,表达式有以下几种情况:表达式有以下几种情况:数值表达式数值表达式 例:例:DA_BYTE DB 50H,50,0caH DA_WORD DW 0a3f1H,498dH A1 DD 12345H ;Memory:45H,23H,01H,00H?表达式,不带引号的?表示可预置任何内容表达式,不带引号的?表示可预置任何内容 例:例:DA_B D
17、B?,?;要求分配两个字节单元;要求分配两个字节单元 DA_W DW?,?;要求分配两个字单元;要求分配两个字单元 字符串表达式字符串表达式 数据项可以写成字符串形式,但只能用数据项可以写成字符串形式,但只能用DB、DW、DD定定义,而且义,而且DW、DD语句定义的串只允许包含两个字符。语句定义的串只允许包含两个字符。例:S1 DB ABCDEF S2 DW AB,CD,EF S3 DD AB,CD 这几个变量在存储器中存放情况如下:S1 41H S2 42H S3 42H 42H 41H 41H 43H 44H 00H 44H 43H 00H 45H 46H 44H 46H 45H 43H
18、00H 00H 注意:定义多于两个以上字符的字符串时,只能使注意:定义多于两个以上字符的字符串时,只能使 用用DB伪指令,不能使用伪指令,不能使用DW和和DD等伪指令。等伪指令。数据定义伪指令格式2:变量名变量名 伪指令名表达式伪指令名表达式DUP(表达式)(表达式)用于定义重复的数据或分配一数据块空间例:D_B1DB 20H DUP(?);保留20H个字节 D_B2 DB 10H DUP(ABCD);字符串ABCD 重复10H次 D_W1 DW 10H DUP(4);字4重复10H次 4.3.3 过程定义的伪指令过程定义的伪指令PROC和和ENDP 一个过程由伪指令PROC和ENDP来定义,
19、其格式为:过程名过程名 PROC 类型类型 过程体过程体 RET 过程名过程名 ENDP其中,过程名过程名是为过程所起的名称,不能省略,类型类型由FAR(远过程,为段间调用)(远过程,为段间调用)和NEAR(近过程,(近过程,在本段内调用)在本段内调用)来确定,如果缺省类型,则该过程就默认为近过程。ENDP表示过程结束。过程体内至少应有一条RET指令,以便返回被调用处。过程可以嵌套,也可以递归使用。4.3.4 ORG 伪指令伪指令ORG伪指令规定了在某一段内,程序或数据代码存放的起始偏移地址。一般格式:ORG 例如:DATA SEGMENT ORG2000H BUFF DB STRING DA
20、TA ENDS上述变量定义中,BUFF从DATA段偏移为2000H的单元开始存放。4.4 常量、变量和标号常量、变量和标号(1)常量 二进制:10111001B 十进制:1234D或1234 八进制:255Q或255O 十六进制:3A5DH,第一位为字母时前面加数字0 字符串常数:用单引号括起来的一个或多个字符组成一个字符串常数,例如:The 在内存中以字符的ASCII码值存放,注意一个空格也是一个字符。如The,在内存中是:54H、68H、65H和20H。(2)变量:代表存放在某些存储单元的数据。这些数据在程序运行期间随时可以修改。变量有三个属性:段属性、偏移属性和类型属性(所具有的字节数)
21、。(3)标号 标号是一条指令的目标代码的符号地址,它常用作转移指令(或子程序调用指令)的操作数。标号有三个属性:段属性、偏移属性和类型属性。段属性是该标号的段地址,偏移属性是该标号的偏移地址,类型属性是表示该标号的范围是本段(NEAR)或段间(FAR),或称为近或远属性。4.5 汇编语言的表达式和运算符表达式:由常数、操作数、操作符和运算符组成。有六种运算符:算术运算符、逻辑运算符和关系运算符、分析运算 符、综合运算符和分离运算符。1、算术运算符 +、*、/、MOD(取余)、SHL(左移)、SHR(右移)例:32 MOD 5 ;结果为2 21H SHL 2 ;结果为84H 2、逻辑运算符(按位
22、操作)AND(与)24H AND 0FH=04H OR (或)24H OR 0FH=2FH XOR(异或)24H XOR 0FH=2BH NOT(非)NOT 24H =0DBH 4.5 汇编语言的表达式和运算符3、关系运算符 关系运算是逻辑判定,当为真时结果为全1(0FFFFH),为假时结果为全0。EQ(等于);若PP=25,则25 EQ PP=0FFFFH NE(不等于);25 NE PP=0 LT(小于);25 LT 26=0FFFFH LE(小于等于);25 LE PP=0FFFFH GT(大于);26 GT PP=0FFFFH GE(大于等于);24 GE PP=0关系运算符一般不单独
23、使用,常与其它运算符结合使用。例如:ADD AX,(port GT 60)AND 50)OR(port LE 60)AND 70)当port 的值大于60时,上述指令汇编为 ADD AX,50当port 的值小于或等于60时,上述指令汇编为 ADD AX,70 4、分析运算符 把存储器地址操作数分解成它的组成部分:SEG (求段地址),格式:SEG 符号名 OFFSET(求偏移地址),格式:OFFSET 符号名 TYPE (求符号名类型值),格式:TYPE 符号名 SIZE ,求为符号名分配的字节数 格式:SIZE 符号名 回送分配给该符号名的字节数,但此值是LENGTH的值和TYPE的值的乘
24、积。类型byteworddwordNEARFAR类型值124-1(0FFFH)-2(0FFEH)4.5 4.5 汇编语言的表达式和运算符汇编语言的表达式和运算符 LENGTH,求为符号名分配的项数。格式:LENGTH 符号名 这里为符号名定义的数据项必须是用 重复格式DUP()定义的。而对于其他情况则回送1。例:K2 DW 10 DUP(?)则 LENGTH K2=10 TYPE K2=2 SIZE K2 =20 例:AARR DW 2,4,6 则 LENGTH AARR=1,TYPE AARR=2 SIZE AARR=2可以看出:SIZE =(LENGTH)*(TYPE 符号名)4.5 4.
25、5 汇编语言的表达式和运算符汇编语言的表达式和运算符 4.5 汇编语言的表达式和运算符5、综合运算符(1)定义符号名为新类型 格式:格式:类型类型 PTR 符号名符号名 PTR的功能归纳如下:保证运算时操作数类型的匹配 例:F1DB16H,38H F2DW1234H,26ABH MOV AX,WORD PTR F1;AX=3816H MOV BL,BYTE PTR F2;BL=34H 4.5 汇编语言的表达式和运算符 通过PTR指明是字单元还是字节单元 例:MOVBYTE PTR BX,10H;BX为字节单元MOVWORD PTR SI,20H;SI为字单元 用PTR来改变距离属性 例:JMP
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 微机 原理 接口 技术
![提示](https://www.taowenge.com/images/bang_tan.gif)
限制150内