微机原理第4章汇编语言程序设计课件.ppt
《微机原理第4章汇编语言程序设计课件.ppt》由会员分享,可在线阅读,更多相关《微机原理第4章汇编语言程序设计课件.ppt(159页珍藏版)》请在淘文阁 - 分享文档赚钱的网站上搜索。
1、第4章 汇编语言程序设计4.1 汇编语言语法4.2 汇编语言程序实现4.3 汇编语言程序设计方法及应用4.4 汇编语言程序设计举例微机原理微机原理4.1 汇编语言语法【例题例题4.14.1】实现:实现:123+456sum 123+456sum 的源程序的源程序 CODECODESEGMENT SEGMENT ;语句语句6 6 ASSUME CSASSUME CS:CODECODE,DSDS:DATADATAMAIN PROC FAR MAIN PROC FAR ;语句语句8 8STARTSTART:PUSH DS PUSH DS ;语句语句9 9 .;RET RET ;语句语句1717MAI
2、N ENDP MAIN ENDP ;语句语句1818CODE ENDS CODE ENDS ;语句语句1919数据段数据段代码段代码段DATA SEGMENT DATA SEGMENT ;语句语句1 1 A DW 123 A DW 123 ;语句语句2 2 B DW 456 B DW 456 ;语句语句3 3 SUM DW SUM DW?;语句语句4 4DATA ENDS DATA ENDS ;语句语句5 5END STARTEND START ;语句语句2020名字 指令/伪指令 操作数1,操作数2段=语句1.源程序组成源程序=段段段:数据段、堆栈段、附加段、码段语句语句:指令性语句指令性语
3、句,由CPU执行,如:语句8语句17。指示性语句指示性语句,指示汇编,如语句1、5、6、19、20。名字名字:段 名,如:DATA、CODE 变量名,如:A、B、SUM 过程名,如:MAIN 标号名,如:START汇编程序构成 暨 本章主要内容指令性语句本章涉及各色运算符,用以与数据配合构成操作数指示性语句几种起定义作用的伪指令数据定义伪指令符号定义伪指令段定义伪指令1)组成名字的合法字符有:字母(不分大小写);数字09;特殊符号(“?”,“:”,“”,“_”,“$”)。2)名字的有效长度小于31个西文字符。3)名字以字母开头。4)不能把保留字用作名字。2.名字命名规则3.名字属性(1)变量名
4、(2)段名:该段起始位置的段地址值 段属性:变量所代表的数据区所在段的 段基址;偏移量:变量所代表的数据区首字节所 在段内偏移地址;类 型:BYTE、WORD、DWORD、DQ、DT长 度:变量所代表的数据区中数据元 素的个数。规 模:变量所代表的数据区中数据所 占空间大小,以字节计。(3)过程名或标号名(4)常量名:代表一常数段属性:过程起始位置或标号处 段地址值偏移量:过程起始位置或标号处 偏移地址值类 型:NEAR、FAR用于程序跳转4.1.2 汇编语言伪指令 1.数据定义伪指令 变量名 数据定义伪指令 操作数1,操作数2 DBDB、DDDD、DWDW、DQ DQ、DT DT字节、字、双
5、字、4字、5字的变量。(1)数字常量:十进制、八进制、十六进制、二进制等,缺省形式是十进制;(2)字符常量,用单引号括起来,被存储的是该字符的ASCII码;(3)符号常量,必须是预先已定义的符号;(4)符号“?”,表示预留空间,内容不定;(5)DUP,表示内容重复的数据。具体形式为:次数 DUP(被重复的内容)操作数:【例】D_A DB 10,A,BC D_B DW 1234H D_C DQ 5678H D_A 10 41H 42H 43H D_B 34H 12H D_C 78H 56H 0 0 0 0 0D_C+7 0 (1)DB定义的数据,每个数据元素占据1个存储单元;DW定义的数据,每个
6、数据元素占据2个存储单元;(2)字数据存储时,低字节存储在低地址单元中,高字节存储在高地址单元中;(3)字符被存放时为它的ASCII码,例 A的ASCII码为41H;(4)符号地址具有以下关系:D_B=D_A+3 D_D=D_B+2=D_A+6 注:注:ORG 100HD_E DB 3 DUP(?)EVEND_F DW D_ED_G DB 2 DUP(1,3,4)D_H DW$+2变量 内容 偏移地址D_E?100?101?102 103 00H 104D_F 01H 105D_G 1 106 3 107 4 108 1 109 3 10A 4 10BD_H 0CH 10C 01H 10D 下
7、一个存储位置从偶地址开始下一个存储位置从偶地址开始己定义变量,取该变量偏己定义变量,取该变量偏 移地址移地址代表当前偏移地址代表当前偏移地址2.符号定义伪指令(1)EQU 格式:名字 EQU 表达式 例例:VB EQU 641024 ;VB代表数值表达式的值 A EQU 7 B EQU A2 注意:注意:1.如果表达式中有变量,应在该语句前给出该变量的定义;2.EQU语句不能给某一变量重复定义;3.VB、A、B不占用内存(2)(2)等号等号=格式:名字=表达式 功能功能:与EQU基本相同,区别是它可以对同一个 名字重新定义。例例:COUNT=10 MOV AL,COUNT ;COUNT=5 ;
8、可重复定义 (3)(3)LABEL LABEL 格式:变量/标号 LABEL 类型 功能:定义变量或标号的类型,而变量或标号的段属性和偏移属性由该语句所处的位置确定。变量的类型有:变量的类型有:BYTE、WORD、DWORD、DQ、DT;标号的类型有:标号的类型有:NEAR、FAR。【例】利用LABEL使同一个数据区有一个以上的类型及相关属性。AREAW LABEL WORD ;AREAW与AREAB指向相同的数 据区,AREAW类型为字,而 AREAB类型为字节AREAB DB 100 DUP(?)MOV AX,1234HMOV AREAW,AX ;(AREAW)=1234HMOV BL,A
9、REAB ;BL=34H 3.段定义伪指令段名 SEGMENT 定位类型 组合类型 类别 段名 ENDS BYTEBYTE:B,即段可以从任何地址开始;WORDWORD:0B,即段的起始地址必须为偶地址;PARAPARA:0000B,即段从节(PARAGRAPH)边界开始,每16个字节 为1小段,所以,其起始地址必为16的倍数。PAGEPAGE:0000 0000B,即段从页边界开始,每256个字节为1页,所 以,其起始地址必为256的倍数。定位类型定位类型:说明段的起始地址应有怎样的边界值:组合类型组合类型:说明程序连接时的段合并方法 1 1 PUBLECPUBLEC:将同类别名段组装在一起
10、形成一个逻 辑段;2 2 STACKSTACK:与PUBLIC一样,只用于堆栈段。在汇 编及连接后,系统自动为SSSS及SPSP分配 值,在可执行程序中,SPSP初值指向栈底。3 3 COMMONCOMMON:同名段从同一个内存地址开始装入。所以,各个逻辑段将发生覆盖。连接 以后,该段长度取决于同名段中最长 的那个,而内容有效的是最后装入的 那个。4 4 MEMORYMEMORY:与PUBLIC同义,只不过MEMORY定义的 段装在所有同名段的最后。若连接时 出现多个MEMORY,则最先遇到的段按 组合类型MEMORY处理,其他段组合类 型按PUBLIC处理。5 5 PRIVATEPRIVAT
11、E:不组合,该段与其它段逻辑上不发 生关系,即使同名,各段拥有各自 的段基值。缺省值6 6 AT expAT exp:段地址为表达式exp的值(长度为16位)。此项不能用于代码段。当几个程序模块进行连接时,其中具有相同类别名的段,按出现的先后顺序被装入连续的内存区。没有类别名的段,与其它无类别名的段一起连续装入内存。类别类别:类别的作用是在连接时决定各逻辑段的装入顺序。类别名必须用单引号括起来。ASSUME 段寄存器名:段名,段寄存器名:段名 ASSUME:用于明确段与段寄存器的关系 说明说明:1.该伪指令出现在码段中;2.本伪指令只是指示各逻辑段使用段寄存器的情况,并没有对段寄存器的内容进行
12、赋值。DS、ES的值必须在程序段中用指令语句进行赋值,而CS、SS由系统负责设置,程序中也可对SS 进行赋值,但不允许对CS赋值。例:ASSUME DS:DSEG,CS:CSEG,ES:ESEG,SS:SESG例:ASSUME CS:CODE,DS:DATA,ES:DATA【例】按下面要求,写出程序框架1.数据段从0E000H开始,其中有100字节的数组,其类型属性既是字又是字节;2.堆栈段从小段开始,段组名为STACK;3.代码段中指定段寄存器,主程序从1000H开始,给有关段寄存器赋值;4.程序结束。DSEG SEGMENT AT 0E000H D_BYTE DB 100 DUP(?)D_
13、WORD EQU WORD PTR D_BYTEDSEG ENDSSSEG SEGMENT PARA STACK DB 200 DUP(?)SSEG ENDSCSEG SEGMENT ORG 1000H ASSUME CS:CSEG,DS:DSEG,SS:SSEG MAIN PROC FAR XOR AX,AX PUSH AX PUSH DS MOV AX,DSEG MOV DS,AX RET MAIN ENDPCSEG ENDS END MAIN4.1.3 汇编语句语句格式:名字 操作 操作数;注释常量、变量和表达式表达式组成由常量、变量和运算符运算符组成 算法运算符 +、*、/、MOD 逻
14、辑运算符 AND、OR、NOT、XOR 关系运算符 EQ、NE、LT、GT、LT、LE、GE 分析运算符 SEG、OFFSET、TYPE、LENGTH、SIZE 属性运算符 PTR、THIS、SHORT 其 它 LOW、HIGH 1.算术运算符例例(1)ARRAY DW 1*2+3-4,56H MOV AX,ARRAY ;汇编后为:MOV AX,1 (2)MOV AL,7FH MOD 2;汇编后为:MOV AL,1 (3)MOV AH,15/4 ;汇编后为:MOV AH,32.逻辑运算符例例1 1:MOV AH,11110000BMOV AL,NOT AH ;MOV AL,00001111BM
15、OV BL,AH OR AL ;MOV BL,11111111BMOV BH,AH XOR AL;MOV BH,11111111B例例2 2:从端口86H读取一个字节,高位屏蔽后从端口6送出。PORT EQU 86H IN AL,PORT AND1 AL,0FH ;AND1为逻辑指令 MOV DX,PORT AND2 0FH;AND2为汇编运算符 OUT DX,AL3.关系运算符 关系运算符两边的操作数必须是两个数值或同一段中两个存储单元地址,运算结果应为逻辑值,结果为真,表示为0FFFFH;结果为假,则表示为0。例:例:A EQU 80H B EQU 88H MOV AL,A EQ B MO
16、V AH,A NE B MOV BL,A LT B MOV BH,A GT B MOV CL,A LE B MOV CH,A GE B4.分析/数值返回运算符SEG SEG 变量或标号变量或标号返回变量或标号的段地址 OFFSET OFFSET 变量或标号变量或标号 返回变量或标号的偏移量 TYPE TYPE 变量或标号变量或标号 LENGTH LENGTH 变量变量 SIZE SIZE 变量变量 返回变量或标号的类型值 返回DUP定义的数据占据的单元数;非DUP定义的数据,返回1。返回DUP定义的数据占据的字节数;非DUP定义的数据,返回类型值。变量类型值:DB:1,DW:2,DD:4,DQ
17、:8,DT:10。标号类型值:NEAR:-1,FAR:-2。【例例】数据定义如下:DATA SEGMENT AT 2000H BUF1 DB 0,1,2,3,4,5,6,7,8,9 BUF2 DW 5 DUP(0)DATA ENDS则:SEG BUF1=2000H SEG BUF2=2000HOFFSET BUF1=0000H OFFSET BUF2=000AHTYPE BUF1=1 TYPE BUF2=2LENGTH BUF1=1 LENGTH BUF2=5SIZE BUF1=1 SIZE BUF2=10 5.汇编运算符(PTR)类型 PTR 变量/标号 典型应用之一:典型应用之一:重新指定
18、变量类型重新指定变量类型 例例:数据定义如下:BUFW DW 1234H,5678H 则下列指令合法:MOV AX,BUFW ;临时改变BUFW的字属性为字节属性 MOV AL,BYTE PTR BUFW 典型应用之二:典型应用之二:指定内存操作数的类型指定内存操作数的类型例:INC BX ;汇编将指示出错 INC BYTE PTR BX ;正确 INC WORD PTR BXSI;正确 分析:在寄存器间接寻址、寄存器相对寻址、基址变址寻址或相对基址变址寻址等内存寻址方式中,往往很难判断出操作数的类型属性,应对操作数类型加以说明。典型应用之三:与典型应用之三:与EQUEQU一起定义一个新的变量
19、一起定义一个新的变量 变量或标号 EQU 类型 PTR 例:BUFW DW 1234H,5678H BUFB EQU BYTE PTR BUFW ;BUFB的类型 属性为字节,其它属性与BUFW一样。MOV AX,BUFW ;AX=1234HMOV AL,BUFB ;AL=34H6.汇编运算符(THIS)格式:THIS 类型 可以像PTR一样建立一个指定类型的地址操作数,该操作数的段地址和偏移地址与下一个存储单元地址相同。例:BUFB EQU THIS BYTEBUFW DW 1234H,5678H.MOV AX,BUFW ;AX=1234HMOV BL,BUFB ;BL=34HBUFB的偏移
20、地址和BUFW完全相同,但它是字节类型;而BUFW则是字类型。程序组织结构data segment data segment ;定义数据段定义数据段 data endsdata ends;-;-extra segment extra segment ;定义附加段定义附加段 extra endsextra ends;-;-code segment code segment ;定义代码段定义代码段 assume assume cscs:code,:code,dsds:data,:data,eses:extra:extrastart:start:mov mov ax,dataax,data mov
21、dsmov ds,ax ,ax ;段地址段地址 段寄存器段寄存器 code endscode ends end start end startDSDSESESSSSSCSCSEXE程序的内存映象图装入模块文件头4.2 汇编语言程序实现开始完成编辑源程序工具:任意字处理软件输出:纯文本的.asm文件汇 编工具:汇编程序MASM输入:.asm文件输出:.obj文件、.lst文件、.crf文件连 接工具:连接程序LINK输入:.obj文件输出:.exe文件、.lib文件、.map文件调 试工具:DEBUG开发过程1:源程序的编辑源程序文件要以ASM为扩展名源程序文件的形成(编辑)可以通过任何一个文本
22、编辑器实现:DOS中的全屏幕文本编辑器EDIT其他程序开发工具中的编辑环境MASM程序员工作平台PWB中的编辑环境EDIT lt301a.asm开发过程2:源程序的汇编汇编是将源程序翻译成由机器代码组成的目标模块文件的过程MASM 6.x提供的汇编程序是ML.EXE:ML/c lt301a.asm如果源程序中没有语法错误,MASM将自动生成一个目标模块文件(lt301a.obj);否则MASM将给出相应的错误信息这时应根据错误信息,重新编辑修改源程序后,再进行汇编开发过程3:目标模块的连接连接程序能把一个或多个目标文件和库文件合成一个可执行程序(.EXE、.COM文件):LINK lt301a
23、.obj如果没有严重错误,LINK将生成一个可执行文件(lt301a.exe);否则将提示相应的错误信息这时需要根据错误信息重新修改源程序后再汇编、链接,直到生成可执行文件汇编和连接的依次自动实现ML汇编程序可自动调用LINK连接程序,实现汇编和连接的依次进行ML lt301a.asm汇编程序ML.EXE可带其他参数,常用ML/Fl/Sg lt301a.asm该命令除产生模块文件lt301a.obj和可执行文件lt301a.exe外,还将生成列表文件lt301a.lst列表文件是一种文本文件,含有源程序和目标代码,对我们学习汇编语言程序设计和发现错误很有用。采用/Sg选项,将在列表文件中得到有
24、些伪指令相应的硬指令开发过程4:可执行程序的调试经汇编、连接生成的可执行程序在操作系统下只要输入文件名就可以运行:lt301a操作系统装载该文件进入主存,并开始运行如果出现运行错误,可以从源程序开始排错,也可以利用调试程序帮助发现错误采用DEBUG.EXE调试程序:DEBUG lt301a.exeDebug与程序调试前面完成的简单程序示例,但並不是意味编程结束,最重要的是要來看看*.COM 或*.exe加载到内存是怎樣的情形,这也是将来写复杂程序时调试的必要的步驟。最简单的调试工具就是 DOS/Windows 所附的 DEBUG.EXE(Windows 9x 的 DEBUG.EXE 在 C:W
25、INDOWSCOMMAND 子目录内,NT/2000在C:winntsystem32目录,也可拷贝到汇编工作目录使用 H:MASM50)。使用 DEBUG 加载要调试的程序用法如下:(蓝色的字是你必须输入的,记得每次要按 Enter 鍵)H:MASM50.masm50debug Enter就是 DEBUG 后面接上“要调试的程序名”即可,如果程序带有参数,就直接接在“程序名”后面即可。DEBUG 的每個命令都用一个英文字母表示,进入 DEBUG 状态后你会看到屏幕上有一-,表示 DEBUG 已经准备好,等你输入调试参数。汇编程序返回DOS方法1.标准方法 MAIN PROC FAR PUSH
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 微机 原理 汇编语言 程序设计 课件
限制150内