微机4-12上第2章已学汇编

上传人:xiao****1972 文档编号:78605334 上传时间:2019-02-14 格式:PPT 页数:169 大小:2.12MB
返回 下载 相关 举报
微机4-12上第2章已学汇编_第1页
第1页 / 共169页
微机4-12上第2章已学汇编_第2页
第2页 / 共169页
微机4-12上第2章已学汇编_第3页
第3页 / 共169页
微机4-12上第2章已学汇编_第4页
第4页 / 共169页
微机4-12上第2章已学汇编_第5页
第5页 / 共169页
点击查看更多>>
资源描述

《微机4-12上第2章已学汇编》由会员分享,可在线阅读,更多相关《微机4-12上第2章已学汇编(169页珍藏版)》请在金锄头文库上搜索。

1、,第2章 指令系统及汇编语言程序设计,2.1 8088/8086的寻址方式 2.2 8088/8086的指令系统 2.3 汇编语言 汇编语言源程序格式 伪指令 汇编语言源程序结构 2.4汇编语言程序设计 基本程序设计方法 DOS功能调用 顺序程序设计 分支程序设计 循环程序设计 子程序设计,本次课内容,请 大 家 复 习 汇编语言 掌 握 本 节 内 容,第二章复习小结,下次课5.9汇编语言单元考试及讲第3章,2.3 汇编语言,汇编语言的特点 汇编语言是一种以处理器指令系统为基础的低级程序设计语言,它采用助记符表达指令操作码 利用汇编语言编写程序的主要优点是可以直接、有效地控制计算机硬件,因而

2、容易创建代码序列短小、运行快速的可执行程序 在有些应用领域,汇编语言的作用是不容置疑和无可替代的 汇编程序设计的过程是与其他高级语言程序设计大致相同,什么是汇编语言,以助记符形式表示计算机指令 助记符(mnemonic)是便于人们记忆、并能描述指令功能和指令操作数的符号 助记符是表明指令功能的英语单词或其缩写 汇编格式指令以及使用它们编写程序的规则就形成汇编语言(Assembly Language) 汇编语言程序:用汇编语言书写的程序 汇编程序:将汇编语言程序“汇编”成机器代码目标模块的程序,汇编语言程序与汇编程序是两个概念,汇编语言程序的语句格式, 执行性语句由硬指令构成的语句,它通常对应一

3、条机器指令,出现在程序的代码段中: 标号: 硬指令助记符 操作数,操作数 ;注释, 说明性语句由伪指令构成的语句,它通常指示汇编程序如何汇编源程序: 名字 伪指令助记符 参数,参数, ;注释,硬指令和伪指令,汇编程序 将汇编语言源程序翻译成在机器上能执行的机器语言程序(目的代码程序 硬指令-执行性语句 使CPU产生动作、并在程序执行时才处理的语句,就是第2章学习的处理器指令 与具体的处理器有关、与汇编程序无关。汇编后对应一条指令代码 伪指令(Directive)-说明性语句 不产生CPU动作、在程序执行前由汇编程序处理的说明性语句,例如,数据说明、变量定义等等 伪指令与具体的处理器类型无关,但

4、与汇编程序的版本有关,本课程采用微软宏汇编程序 MASM 6.15,硬指令和伪指令采用易于记忆的符合表达,这就是助记符,MOV CX,0 ;传送指令,具有2个操作数 DELA: NOP ;空操作指令,没有操作数,带有标号 LOOP DELA ;循环指令,标号DELA说明转移位置 BUF DB 1,2,3,4,5,6,7 ;数据定义伪指令,在主存中开辟7个连续的字节单元,初值依次为17,BU表示首地址,汇编语言语句实例,一.汇编语言源程序格式 (4部分),标号 硬指令的位置(逻辑地址),后加冒号: 名字 伪指令的位置或存储单元名称(变量名) ,后不加冒号: 一般最多由31个字母、数字及规定的特殊

5、符号(如 _、$、?、)组成 不能以数字开头(如 1ABC错),不能是保留字 指令助记符 必须有,其它3部分可无 伪指令助记符- 伪指令 硬指令助记符-硬指令 注释 语句中由分号“;”开始的部分为注释内容,用以增加源程序的可读性 必要时,一个语句行也可以由分号开始作为阶段性注释 汇编程序在翻译源程序时将跳过该部分,不对它们做任何处理,标号: 硬指令助记符 操作数1,操作数2 ;注释 名字 伪指令助记符 参数1,参数2, ;注释,例: 硬指令 Done: mov al,02h 伪指令 Sum db 02h,标号 指令助记符 操作数 ;注释,保留字,保留字(Reserved Word)是汇编程序已

6、经利用的标识符(也称为关键字),主要有: 硬指令助记符例如:MOV、ADD 伪指令助记符例如:DB、DW 操作符例如:OFFSET、PTR 寄存器名例如:AX、CS 预定义符号例如:data,汇编语言大小写不敏感,汇编语言源程序格式-操作数,操作数 常数、数值表达式、寄存器、标号 、变量等 数值表达式 一般是指由运算符连接的各种常数所构成的表达式 汇编程序在汇编过程中计算表达式,最终得到一个确定的数值,所以也是常数 常用的运算符是加减乘除( * / ) 例: mov ax,3*4+5 ;等价于mov ax,17,汇编语言源程序格式-操作数,操作数 常数、寄存器、标号 、数值表达式、变量等 常数

7、 汇编时已确定的数据 如硬指令中立即数 二进制数 如 MOV AL,10110101B 十进制常数 如MOV AL,181 十六进制数常数 以字母开头的十六进制数前加“0”。例:MOV AL,0B5H 字符和字符串常数 例: MOV AX,AB ;AX4142h MOV AX,1 ;AX31h 用单引号括起来的单个字符或多个字符,其数值是每个字符对应的ASCII码的值.例如:d = 64H, AB= 4142H 符号常数 用符号名表示一个常数,可以提高程序的可读性,同时更具有通用性 符号定义伪指令格式 等价EQU伪指令 符号名 EQU 表达式 例: XY EQU 5 等号=伪指令 符号名=表达

8、式 例: XY=5,例: XY EQU 5 MOV AH,XY ; 等价于 MOV AH,5,符号定义 DosWriteChar equ 2 CarriageReturn = 13 CallDOS equ 符号应用(左边程序段等价右侧的符号形式) mov ah,2 ;mov ah,DosWriteChar mov dl,13 ;mov dl,CarriageReturn int 21h ;CallDOS,符号常数实例,二. 伪指令,1. 符号(常量)定义伪指令 EQU 符号常量使用符号名表达一个数值 格式 符号名 EQU 表达式 例 X EQU 7,2.变量定义伪指令(定义数据伪指令 ),变量

9、定义伪指令 为变量申请固定长度的存储空间,同时将相应存储单元初始化(参数为?则不初始化)。格式为: 变量名 DB/DW/DD/DQ 参数1,参数2, DB(或BYTE)定义字节 其后每个参数占1个字节存储单元 DW(或WORD)定义字 其后每个参数占2个字节(先低字节后高字节)存储单元 DD (或DWORD) 定义双字 其后每个参数占4个字节存储单元 DQ (或QWORD)定义4个字 其后每个参数占8个字节存储单元 多个存储单元如果初值相同,可以用复制操作符DUP进行定义: 重复次数 DUP(重复参数) 变量实质指内存单元的数据,变量需要事先定义才能使用.定义后的变量可用变量名等引用其中的数据

10、,即变量的数值,例:alpha byte 30h,2 DUP(55H),34h,? mov cx,alpha ; cx5530h mov bx,offset alpha mov al,bx+3 ;al34h,变量定义伪指令最常使用,定义字节单元伪指令DB,DB伪指令用于分配一个或多个字节单元,并可以将它们初始化为指定值 初值表中每个数据一定是字节量(Byte),存放一个8位数据: 可以是0255的无符号数 或是128127带符号数 也可以是字符串常数,字节变量定义实例,;数据段 X db 61h, 0fbh db 2 dup(64h),? Y db ABC,应用 mov al,X dec X+

11、1 mov Y,al,ASCII a=61h A=41h B=42h C=43h,;此处X表示它的第1个数据,故AL61h,;对X为始的第2个数据减1,故为0fah,;Y=al=61h,现在Y这个字符串成为 aBC,实例,程序如下 count db 80h, B,? maxint equ 04h number dw maxint array db maxint dup(3) mov cx,count dec byte ptr array mov bx,offset number mov ah,bx+2 mov al,bx-2 hlt 问:程序执行后ax=?cx=?,答案: cx=4280h a

12、h=2 al=42h,定义字单元伪指令DW,DW伪指令用于分配一个或多个字单元,并可以将它们初始化为指定值 初值表中每个数据一定是字量(Word),一个字单元可用于存放任何16位数据: 一个段地址 一个偏移地址 两个字符 065535之间的无符号数 3276832767之间的带符号数,字变量定义实例,;数据段 count dw 8000h,?,AB maxint equ 64h number dw maxint array dw maxint dup(0),ASCII A=41h B=42h,;数据段 字变量和字常量的定义: WNUM EQU 5678H ;定义WNUM为常量 COUNT DW

13、 20H ;定义COUNT变量,假设在数据段的偏移地址为0010H ;代码段 字变量和字常量的应用: MOV AX,BX+SI+WNUM 等价于 MOV AX,BX+SI+5678H MOV AX,COUNT 等价于 MOV AX,0010H ;AX0020H MOV AX,SI+COUNT 等价于 MOV AX,SI+0010H LEA BX,COUNT 等价于 LEA BX,0010H ;BX 0010H MOV BX,OFFSET COUNT 等价于 MOV BX,0010H ; BX 0010H,字变量和字常量实例,例. 数据复制20次和显示,;数据段 source db 33h,34

14、h,35h,36h ;定义4个字符数据 target db 80 dup(?) ;分配数据空间420=80 ;代码段 mov ax,ds mov es,ax ;data也作为附加段 cld mov si,offset source mov di,offset target mov cx,80 rep movsb ;串传送 mov si,0 ;显示 mov bx,offset target again: mov dl,bx+si mov ah,2 int 21h inc si cmp si,80 jc again,movsb,int 21h,串操作类指令,8088的串操作类指令能对主存中一个连续

15、区域的数据(如数组、字符串等)进行传送、比较等同样操作。当DF=0 地址自动增量,从低地址到高地址处理字符串;当DF=1地址减量 指令有: 传送数据串:MOVS,STOS,LODS 检测数据串:CMPS,SCAS 重复前缀:REP,REPZ,REPNZ 源操作数-DS:SI 目的操作数-ES:DI 每执行一次串操作指令,SI和DI将自动修改: 1(对于字节串)或2(对于字串) 执行指令CLD后,DF = 0,地址指针增1或2 执行指令STD后,DF = 1, 地址指针减1或2 利用循环程序也可以实现串操作指令的功能,例:MOVSB (move string byte) ;ES:DIDS:SI ;当DF=0,SISI+1 DIDI+1 当DF=1,SISI-1 DIDI-1,例. 数据复制和显示,.model small .stack .data source db 33h,34h,35h,36h ;定义4个字符数据 target db 80 dup(?) ;分配数据空间420=80 .code .startup mov ax,ds mov es,ax ;data也作为附加段 cld mov si,offset source mo

展开阅读全文
相关资源
相关搜索

当前位置:首页 > 高等教育 > 大学课件

电脑版 |金锄头文库版权所有
经营许可证:蜀ICP备13022795号 | 川公网安备 51140202000112号