微机课件_04第四章:汇编程序设计

上传人:沈*** 文档编号:244230535 上传时间:2024-10-03 格式:PPT 页数:54 大小:4.03MB
收藏 版权申诉 举报 下载
微机课件_04第四章:汇编程序设计_第1页
第1页 / 共54页
微机课件_04第四章:汇编程序设计_第2页
第2页 / 共54页
微机课件_04第四章:汇编程序设计_第3页
第3页 / 共54页
资源描述:

《微机课件_04第四章:汇编程序设计》由会员分享,可在线阅读,更多相关《微机课件_04第四章:汇编程序设计(54页珍藏版)》请在装配图网上搜索。

1、,单击此处编辑母版文本样式,,第二级,,第三级,,第四级,,第五级,,*,,*,单击此处编辑母版标题样式,,第四章 汇编语言程序设计,南理工紫金学院,,帅辉明,汇编语言,,数据和表达式,,伪指令,,语法,,程序设计,,顺序、分支、循环、子程序,,DOS,功能调用,本章重点,机器语言:由,0,、,1,代码所组成的语言。面向机器,同一组代码对不同的计算机表示不同的含义。,,汇编语言:由助记符表示的语言。面向机器。,,高级语言:用一些接近人们书写习惯的英语和数学表达式形式的句子编写程序。这种语言不面向机器,而是面向过程、面向对象。,,4.1,程序设计语言概述,高级语言,C,、,C++,、,PASC

2、AL,语言,,如:,Turbo C,、,VC++,、,DELPHI,、,GNU GCC,,汇编语言,机器语言,高级语言,虚拟机,C#,、,JAVA,,.NET,、,JVM,,,编译,,汇编,,中间语言,各种语言的关系,1.,数据,,(,1,)常数,,表示,汇编过程中已经有确定数值,的量,主要用于做指令中的立即数、寻址中的位移量,或在伪指令语句中给变量赋值。,,数值常数:由二、八、十和十六进制表达的数,,,字符串常数:用’ ’(或“ ”)括起来的一串,ASCII,码字符,等效为一组数值常数,,,4.2 8086,汇编语言介绍,0101,B,3247,O,2873,D,23AB,H,’12AB’

3、= 31H,、,32H,、,41H,、,42H,内存单元的数据,变量,值在程序运行期间可以改变,。,,需要事先定义,通过变量名引用。变量名表示变量的首地址。,,在,数据段或附加段用数据定义伪指令定义,。,,变量的属性,,段:变量所在段基址,,偏移量:变量在段内的偏移量,,类型:变量的字节数,,DB,、,DW,、,DD,,,(,2,)变量,在指令前面,代表指令所在存储单元的地址。,,通常作为程序中转移、调用、循环指令的转移目标地址。,,定义方式- 标识符:,,标号的属性:,,段:变量所在段基址,,偏移量:变量在段内的偏移量,,距离:,NEAR,段内标号、,FAR,段外标号,,(,3

4、,)标号,2,、表达式,由常数、变量或标号、运算符连接而成,,分类:数字表达式、地址表达式,,(,1,)运算符,算术运算符,+,、,-,、*、,/,、,mod,逻辑运算符,AND,、,OR,、,NOT,、,XOR,关系运算符,EQ,、,NE,、,LT,、,LE,、,GT,、,GE,——,注意与,算术运算指令,和,逻辑运算指令,的区别,AND,DX, PORT,AND,0FFH,MOV AX, VALUE MOD 7,;VALUE=50,,,MOV AL, NOT 0FH,,,MOV AX, 0FH EQ 1111B,,举例:,MOV AX, 1,MOV AL, F0H,

5、关系成立结果全为,1,否则全为,0,,MOV AX, FFFFH,对存储单元的操作,(,2,)数值返回运算符,段基址运算符,SEG,SEG,变量,/,标号,偏移量运算符,OFFSET,OFFSET,变量,/,标号,类型运算符,TYPE,TYPE,变量,/,标号,长度运算符,LENGTH,LENGTH,变量,字节总数运算符,SIZE,SIZE,变量,SEG,返回变量,/,标号的段基址,,OFFSET,返回变量,/,标号的段内偏移,,举例:,,MOV AX,SEG K1,,MOV BX,SEG ARRAY,,MOV BX,OFFSET ARRAY,,变量,K1,所在段的段基址为,0915H

6、,,变量,ARRAY,所在段的段基址为,0947H,,偏移为,0100H,,运算符,SEG,和,OFFSET,= MOV AX,0915H,,= MOV BX,0947H,,= MOV BX,0100H,运算符,TYPE,数据,类型,伪指令,TYPE,值,变量,字节,DB,1,,字,DW,2,,双字,DD,4,,四字,DQ,8,,五字,DT,10,标号,近程,NEAR,-1,,远程,FAR,-2,LENGTH,返回数组元素的个数,,若变量用,重复数据操作符,DUP,定义,,则返回,最外层,DUP,的值,,若变量无,DUP,说明则返回,1,,,SIZE,返回数组变量所占的总字节数,,=LENG

7、TH*TYPE,,运算符,LENGTH,和,SIZE,K1 DB 10H DUP(0),,K2 DB “ABCDEF”,,,TYPE K1 = TYPE K2 =,,LENGTH K1 = LENGTH K2 =,,SIZE K1 = SIZE K2 =,,举例:,1,10,1*10=10,1,1,1*1=1,(,3,)属性运算符,类型修改运算符,PTR,类型,PTR,地址表达式,短转移运算符,SHORT,JMP SHORT,标号,段超越运算符,段名:地址表达式,(,4,)运算符优先级,优先级,运算符,高,LENGTH,,,SIZE,,,[

8、 ],,段超越运算符,,PTR,,,OFFSET,,,SEG,,,TYPE,,,THIS,,*,,,/,,,MOD,,,SHL,,,SHR,,+,,,-,,EQ,,,NE,,,LT,,,LE,,,GT,,,GE,低,NOT > AND > OR > XOR,,SHORT,指令语句,,,伪指令语句,,,宏指令语句,,3.,伪指令,执行语句。经过汇编产生可供计算机硬件执行的机器目标代码。,说明语句。如:程序有几个段,段的名称,是否需要预留存储空间等。不直接产生目标代码。,指令语句,+,伪指令语句。替代源程序中一段有独立功能的程序,汇编时产生相应的目标代码。,定义变量,并关联变量名和存储单元地址。,

9、,定义格式:,[,变量名,],类型,数据项表,,类型:,DB DW DD DQ DT,,数据表项,:变量的长度、数组元素个数、变量的初值,,(,1,)变量定义伪指令,DBYTE DB -5H,,一个字节变量,,,值为,-5H,,DWORD DW 6*3,,一个字变量,,,值为,18,,DDWORD DD 1234H,,一个双字变量,,,值为,1234H,,数据定义例-数值初值,,FBH,12H,00H,34H,12H,00H,00H,,DBYTE,DWORD,DDWORD,,,STRING1 DB ‘AB’,,一个字节变量,,,值为’,A’,,STRING2

10、 DW ‘AB’,,一个字变量,,,值为,’AB’,,STRING3 DD ‘AB’,,一个双字变量,,,值为’,AB’,,数据定义例,—,字符串,41H,42H,42H,41H,42H,41H,00H,00H,,STRING1,STRING2,STRING3,,,,伪指令:,DUP,,重复赋值,,格式:重复次数,DUP(,操作数,,…..,,操作数,),,SUBB DW 1000 DUP (?),,包含,1000,数组元素,,值不确定,,SDKP DB 2 DUP (0,2 DUP(1)),,包含,2,个数组元素,,每个元素由,2,部分构成,,0,和另一个数组,B,,数组,B

11、,包含,2,个元素,,,值为,1,,数据定义例,——,数组,(1),BUFF DB 16 DUP (‘Welcome’),,包含,16,个元素,,每个元素的值为’,Welcome’,,LING DB 4 DUP (0,1),,包含,4,个元素,,每个元素的数据为,0,和,1,,数据定义例,——,数组,(2),数组共占,16*7,个字节,!,数组共占,4*2,个字节,!,数组实际所占空间和用,SIZE,求得数值不一定相同,!,赋值伪指令,:,EQU,,定义格式:符号名,EQU,表达式,,,等号伪指令,:,=,,定义格式:符号名 =,,表达式,,,特点,:都不直接产生,机器指令,,区别,:赋值伪

12、指令不可以重名,,,(,2,)符号定义伪指令,COUNT =,5,,;,常数,,NUM=,13+5-4,,;,数值表达式,,NUM = NUM+1,,ADR1 EQU,DS:[BP+4],;,地址表达式,,CREG EQU,CX,,;,寄存器名,,CBD EQU,DAA,;,指令名,,L1 EQU,SUBSTART,,;,标号名,,WO EQU,WORD PTR DBYTE,;,变量名,,举例:,把源程序划分成若干逻辑段,便于汇编程序生产相应代码,便于连接程序生产可执行程序。,,一个汇编语言源程序可以包含若干个逻辑段(代码段、数据段、附加段或堆栈段),段与段之间的顺序可随意排列

13、。需独立运行的程序,必须包含一个代码段,,并指示程序执行的起始点,一个程序只有一个起始点。,,(,3,)段定义伪指令,段名,SEGMENT [,定位类型,][,组合类型,][,‘,类别名,’,],,,……,,段名,ENDS,,,定位类型:表示对该段起始边界的要求,,组合类型:段与段之间如果连接和定位,,类别名:用于分类排序,,逻辑段定义格式,STACK,SEGMENT STACK,,......,,STACK,ENDS,,DATA SEGMENT,,......,,DATA ENDS,,CODE,SEGMENT,,,ASSUME,CS:CODE,DS:DATA,SS:STACK,,....

14、..,,CODE,ENDS,,格式:,ORG,表达式,,功能:表明从表达式所指地址开始存放程序或数据,,举例:,,DATA SEGMENT,,BUFF1 DB 23,,,56H,,‘,EOF’,,,ORG 2000H,,BUFF2 DB ‘STRING’,,DATA ENDS,,(,4,)设置起始地址伪指令,表示整个源程序结束,,停止汇编,。,,定义格式:,END,标号,,注意:,,与第一条指令的标号相同;,,必须是最后一条语句;,,若有多个,END,语句,只有,第一个有效,。,,(,5,)汇编结束伪指令,说明段寄存器和用户编写的段的对应关系,,,表示出用户编写的段属于系统规定的哪个段,,一般

15、设在代码段中,,定义格式:,,ASSUME,段寄存器名,:,段名,[,,段寄存器名,:,段名,],,(,6,)段寄存器设定伪指令,注意,:,该语句仅仅说明段寄存器和段的对应关系,但不等于段基址已经装入了段寄存器,3.3,汇编语言程序设计,汇编程序的结构框架,DATA SEGMENT,,……,,DATA,ENDS,,CODE,SEGMENT,,,ASSUME,CS:CODE, DS:DATA,,;,定义过程,,……,,START,:,MOV AX,,,DATA,,MOV DS,,,AX,,……,,MOV AH,,,4CH,,INT 21H,,CODE,ENDS,,END,START,,

16、数据段定义变量,段寄存器定义,DS,的装入,,退出程序,,过程:具有一定功能的子程序,,CALL,调用,,定义格式:,,过程名,PROC[,距离类型,],,……ret,,,过程名,ENDP,,注意:,,过程和段可以互相嵌套,但不可交叉覆盖,,每个过程一定有返回指令,RET,,可能有多个,,最后一条指令必须是,RET,,(,7,)过程定义伪指令,[,名字,],,操作码,[,操作数,] [,注释,],,START,:,,,MOV AX,,,30H ; AX,30H,,名字,,以字母开头,由字母、数字、特殊字符,(?,、*、,_,、,$,、,@,等,),组成,不超过,31,字符,

17、,不能与保留字相同,,任选,多数指令不用,伪指令用,,指令语句名字用“,:,”分界,伪指令语句用,空格,分界,,标号名、变量名、常量名、过程名、段名等,4,、汇编语言语句结构,操作码,,必不可少的核心,规定了所要执行的操作,由指令或伪指令助记符组成,,操作数,,参与操作的数据或地址,可以有多种表达形式,之间用‘,,,’,隔开,,注释,,‘,; ’,后面的字符串,,,1,、程序设计的基本步骤,,分析题目与,确定算法,,合理分配存储空间和存储器,,编制程序流程图,,编写源程序,,调试源程序,,4.3,汇编语言程序设计,2,、顺序结构,[,例,4-15],把,BUF,开始的两个字节单元中的压缩,BC

18、D,数相加,结果存入字节单元,RES,中,,,BCD,码:为了让计算机能识别十进制数,,例如:通常十进制数,49,在计算机中为,31H,,不方便程序员观察和记忆,用,BCD,码存放则直接为,49H,,,buf,db 89h,34h,,res,dw,?,,,,,LEA BX,BUF,;BX,为,BUF,的有效地址,,MOV AL,BUF,;BUF,中的第一个字节,,ADD AL,[BX+1],; [BX+1],为,BUF,中的第二个字节,,,DAA,,MOV RES,AX,[,例,4-18],求数,X,的绝对值,并送值回原处,,STACK,SEGMENT STACK,,DW 256 DUP(?)

19、,,STACK,ENDS,,DATA,SEGMENT,,XADR DW 3456H, 8192H,,DATA,ENDS,,CODE,SEGMENT,,ASSUME,CS:CODE,DS:DATA,SS:STACK,,3,、分支结构,,定义了一个空栈,START: MOV AX, DATA,MOV DS, AX,,MOV AX, XADR,AND AX, AX,JNS DONE,NEG AX,MOV XADR, AX,DONE: MOV AH, 4CH,INT 21H,CODE,ENDS,END START,[,例,4-2

20、0],求某数据区内负数的个数,,设数据区第一个单元存放数据个数,第二单元开始存放数据,最后一个单元存放结果。,,STACK SEGMENT STACK,,DW 64 DUP(?),,STACK ENDS,,CODE SEGMENT,,ASSUME,CS:CODE,SS:STACK,,DS:CODE,,4,、循环结构,START:MOV DI, 3000H,;,设置数据区首地址,,,MOV CL, [DI],,;,设置循环次数,(,即数据个数,),(设置初值),,,XOR CH, CH,,;CH,清,0,,MOV BL, CH,;BL,统计负数个数,,,初值为,0,,,INC DI,,;,指向

21、第一个元素,(循环条件改变),,A1: MOV AL, [DI],,TEST AL, 80H,;,测试数据首位,=1?,,JE A2,;ZF=1,,数据首位,=0,,INC BL,;,负数个数,+1,,A2: INC DI,;,指向下一个元素,,,LOOP A1,,MOV [DI], BL,;,存放统计结果,注意:,,主程序与子程序之间的参数传递,,保护和恢复主程序中寄存器的现场数据,,主程序与子程序之间的参数传递方式,,寄存器传递参数,,堆栈传递参数,,指定存储单元传递参数,,5,、子程序设计,[,例,4-23],求,2,个,32,位数的和。(利用堆栈传递参数),,CODE SEGMENT,

22、,,ASSUME,,CS:CODE,DS:CODE,SS:CODE,,ORG 100H,;,以下指令从偏移为,0100H,处开始,,START: JMP MAIN,,ADDT1 DW 1200H, 1200H,;,数据定义,,ADDT2 DW 2100H, 2100H,,SUM DW 2 DUP(?),,MAIN :,MOV AX, CODE,,MOV DS, AX,MOV CX, 0002,;,定义调用次数,,,MOV SI, 0,;,定义数据指针,,,CLC,;CF,0,,REPEAT: MOV AX, ADDT1,;,取当前数,X,,PUSH AX,;,压入堆栈,,,MOV

23、AX, ADDT2[SI],;,取当前数,Y,,PUSH AX,;,压入堆栈,,,CALL ADDITION,,;,调用加法子程序,,,MOV SUM[SI], AX,;,送当次运算结果,,,INC SI,,INC SI,;,指向下一个数据,,LOOP REPEAT,MOV AX, 4C00H,;,结束调用,,,INT 21H,,ADDITION,PROC,NEAR,,MOV BP, SP,;,指向栈顶,,,MOV AX, [BP+,2,],;,取第一个加数,,,ADC,AX, [BP+,4,],;,取第二个加数,,,RET 4,;,弹出两个加数,,ADDITION,ENDP,,C

24、ODE,ENDS,,,END,START,DOS,系统功能调用和,BIOS,中断调用,,,1,.常用,DOS,系统功能调用,,DOS,系统功能调用即,DOS,为用户提供的一组例行子程序,其调用和返回不是用,CALL,和,RET,,而是用,INT n,和,IRET,。这些子程序可分为以下几个方面:,,磁盘的读写及控制管理。,,内存管理,,基本输入,/,输出管理(如键盘、打印机、显示器),,其他管理(如日期、时间),,所有这些子程序按顺序编号(调用号),分别为,0,~,75H,。,,调用方法:子程序入口参数送相应寄存器,,调用功能号送,AH,,INT 21H,(,1,),1,号功能调用(键盘输入

25、并显示),,,MOV AH,,,1,,INT 21H,,,功能:扫描键盘,等待输入,若有键盘按下,则将键值读入并判断是否为,Ctrl+Break,键,若是,退出;若不是,则将键值(字符的,ASCII,码)送,AL,,同时在,CRT,上显示该字符。,,,(,2,),2,号功能调用(显示一个字符),,,MOV AH,,,2,,MOV DL,,待显字符,ASCII,码,,,INT 21H,,(,3,),9,号功能调用(字符串显示),,,MOV DX,,待显示字符串首地址,,,MOV AH,,,9,,INT 21H,,,功能:将以‘,$’,为结束标志的字符串在屏幕上显示。,,,说明:,

26、,(,1,)执行前要在,DS,数据段定义一个字符串,该字符串必须在‘,$’,结尾。,,(,2,)若字符串无‘,$’,结尾,则在其尾部加一‘,$’,;若字符串中间有‘,$’,,则只能采用,2,号功能调用逐个字符输出。,,,(,4,),10,号功能调用(字符串输入),,,MOV AH,,,10,,MOV DX,,待存数据区首地址,,,INT 21H,,,功能:从键盘上接收字符串送到内存数据中。,,,注意:数据区的定义形式:,,,BUF DB 50,;数据区长度,,,DB,? ;实际输入字符的个数,,,DB 50 DUP,(?) ;存放

27、输入的字符,,,如果输入的字符数大于数据区所定义的字符个数,就会发出“嘟嘟”声。,,(,5,),4CH,号功能调用(返回操作系统),,,MOV AH,,,4CH,,INT 21H,,,功能:结束当前正在执行的程序,返回操作系统,屏幕显示操作系统提示符。,,,2,.,BIOS,中断调用,,驻留在,ROM,中的,BIOS,提供了系统加电自检、引导装入,I/O,设备的处理程序及接口控制等功能模块来处理所有的系统中断。与,DOS,系统功能调用类似,用户可以直接用指令设置参数,然后中断调用,BIOS,中的程序。,,,下面介绍几条常用的中断调用。,,,(,1,)键盘中断调用(,INT 16H,),,软

28、中断,INT 16H,有多个功能,其中常用的是,0,、,1,、,2,号功能,,①,0,号:,MOV AH,,,0,,INT 16H,,功能:从键盘读字符,并将其,ASCII,码送,AL,。扫描码送,AH,。与,DOS,的,1,、,8,号功能类似。,,,②,1,号:,MOV AH,,,1,,INT 16H,,功能:判断是否有键按下。有键按下,,ZF=0,,且,AL,,,AH,同上。无键按下,,ZF=1,。与,DOS,的,6,号、,0B,号功能类似。,例:按任意键,程序退出执行。,,,DOS,功能调用(,11,号功能):,,,MOV AH,,,0BH,,INT 21H,,CMP AL

29、,,,0FFH,,JZ STOP,;有键按下,,AL=0FFH,,…,,STOP,:,MOV AH,,,4CH,,INT 21H,DOS,功能调用(,6,号功能):,,,MOV AH,,,06H,,MOV DL,,,0FFH,,INT 21H,,JNZ STOP,;有键按下,,ZF=0,,…,,STOP,:,MOV AH,,,4CH,,INT 21H,,,BIOS,中断调用(,INT 16H,):,,,MOV AH,,,1,,INT 16H,,JNZ STOP,;有键按下,,ZF=0,,…,,STOP,:,MOV AH,,,4CH,,INT 21H,(,2,)显示器中断调用(,INT 10H,),,,INT 10H,的功能调用可以进行屏幕设置。共有,16,种功能号,其中的,0E,号功能与,DOS,的,2,号功能类似。,,,例:在当前光标位置显示人处字符“,7”,,并使光标进,1,。,,,MOV AH,,,0EH,,MOV AL,,,37H,,INT 10H,,,DOS,调用可实现相同的功能:,,,MOV AH,,,2,,MOV DL,,,37H,,INT 21H,

展开阅读全文
温馨提示:
1: 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
2: 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
3.本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
5. 装配图网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

相关资源

更多
正为您匹配相似的精品文档
关于我们 - 网站声明 - 网站地图 - 资源地图 - 友情链接 - 网站客服 - 联系我们

copyright@ 2023-2025  zhuangpeitu.com 装配图网版权所有   联系电话:18123376007

备案号:ICP2024067431-1 川公网安备51140202000466号


本站为文档C2C交易模式,即用户上传的文档直接被用户下载,本站只是中间服务平台,本站所有文档下载所得的收益归上传人(含作者)所有。装配图网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。若文档所含内容侵犯了您的版权或隐私,请立即通知装配图网,我们立即给予删除!