微机4-12上第2章(已学汇编).ppt
《微机4-12上第2章(已学汇编).ppt》由会员分享,可在线阅读,更多相关《微机4-12上第2章(已学汇编).ppt(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动作、在程序执行前由汇编程序处理的说明性语句,例如,数据说明、变量定义等等伪指令与具体的处理器类型无关,但与汇编程序的版本有关,本课程采用微软宏汇编程序 MASM 6.15,硬指令和伪指令采用易于
4、记忆的符合表达,这就是助记符,MOV CX,0;传送指令,具有2个操作数DELA:NOP;空操作指令,没有操作数,带有标号 LOOP DELA;循环指令,标号DELA说明转移位置BUF DB 1,2,3,4,5,6,7;数据定义伪指令,在主存中开辟7个连续的字节单元,初值依次为17,BU表示首地址,汇编语言语句实例,一.汇编语言源程序格式(4部分),标号 硬指令的位置(逻辑地址),后加冒号:名字 伪指令的位置或存储单元名称(变量名),后不加冒号:一般最多由31个字母、数字及规定的特殊符号(如 _、$、?、)组成不能以数字开头(如 1ABC错),不能是保留字指令助记符 必须有,其它3部分可无伪指
5、令助记符-伪指令硬指令助记符-硬指令注释语句中由分号“;”开始的部分为注释内容,用以增加源程序的可读性必要时,一个语句行也可以由分号开始作为阶段性注释汇编程序在翻译源程序时将跳过该部分,不对它们做任何处理,标号:硬指令助记符 操作数1,操作数2;注释名字 伪指令助记符 参数1,参数2,;注释,例:硬指令 Done:mov al,02h 伪指令 Sum db 02h,标号 指令助记符 操作数;注释,保留字,保留字(Reserved Word)是汇编程序已经利用的标识符(也称为关键字),主要有:硬指令助记符例如:MOV、ADD伪指令助记符例如:DB、DW操作符例如:OFFSET、PTR寄存器名例如
6、:AX、CS预定义符号例如:data,汇编语言大小写不敏感,汇编语言源程序格式-操作数,操作数 常数、数值表达式、寄存器、标号、变量等数值表达式一般是指由运算符连接的各种常数所构成的表达式汇编程序在汇编过程中计算表达式,最终得到一个确定的数值,所以也是常数常用的运算符是加减乘除(*/)例:mov ax,3*4+5;等价于mov ax,17,汇编语言源程序格式-操作数,操作数 常数、寄存器、标号、数值表达式、变量等常数 汇编时已确定的数据 如硬指令中立即数二进制数 如 MOV AL,10110101B十进制常数 如MOV AL,181十六进制数常数 以字母开头的十六进制数前加“0”。例:MOV
7、AL,0B5H字符和字符串常数例:MOV AX,AB;AX4142h MOV AX,1;AX31h用单引号括起来的单个字符或多个字符,其数值是每个字符对应的ASCII码的值.例如:d=64H,AB=4142H符号常数 用符号名表示一个常数,可以提高程序的可读性,同时更具有通用性符号定义伪指令格式等价EQU伪指令 符号名 EQU 表达式例:XY EQU 5等号=伪指令 符号名=表达式例:XY=5,例:XY EQU5 MOV AH,XY;等价于 MOV AH,5,符号定义DosWriteChar equ 2CarriageReturn=13CallDOS equ 符号应用(左边程序段等价右侧的符号
8、形式)mov ah,2;mov ah,DosWriteCharmov dl,13;mov dl,CarriageReturnint 21h;CallDOS,符号常数实例,二.伪指令,1.符号(常量)定义伪指令 EQU符号常量使用符号名表达一个数值格式 符号名 EQU 表达式 例X EQU 7,2.变量定义伪指令(定义数据伪指令),变量定义伪指令为变量申请固定长度的存储空间,同时将相应存储单元初始化(参数为?则不初始化)。格式为:变量名 DB/DW/DD/DQ 参数1,参数2,DB(或BYTE)定义字节 其后每个参数占1个字节存储单元DW(或WORD)定义字 其后每个参数占2个字节(先低字节后高
9、字节)存储单元DD(或DWORD)定义双字 其后每个参数占4个字节存储单元DQ(或QWORD)定义4个字 其后每个参数占8个字节存储单元多个存储单元如果初值相同,可以用复制操作符DUP进行定义:重复次数 DUP(重复参数)变量实质指内存单元的数据,变量需要事先定义才能使用.定义后的变量可用变量名等引用其中的数据,即变量的数值,例:alphabyte30h,2 DUP(55H),34h,?movcx,alpha;cx5530h movbx,offset alpha moval,bx+3;al34h,变量定义伪指令最常使用,定义字节单元伪指令DB,DB伪指令用于分配一个或多个字节单元,并可以将它们
10、初始化为指定值初值表中每个数据一定是字节量(Byte),存放一个8位数据:可以是0255的无符号数 或是128127带符号数 也可以是字符串常数,字节变量定义实例,;数据段X db 61h,0fbh db 2 dup(64h),?Y db ABC,应用mov al,Xdec X+1mov Y,al,ASCII a=61h A=41h B=42h C=43h,;此处X表示它的第1个数据,故AL61h,;对X为始的第2个数据减1,故为0fah,;Y=al=61h,现在Y这个字符串成为 aBC,实例,程序如下countdb 80h,B,?maxintequ 04hnumberdw maxintarr
11、aydb maxint dup(3)mov cx,countdecbyte ptr arraymovbx,offset numbermovah,bx+2moval,bx-2hlt 问:程序执行后ax=?cx=?,答案:cx=4280h ah=2 al=42h,定义字单元伪指令DW,DW伪指令用于分配一个或多个字单元,并可以将它们初始化为指定值初值表中每个数据一定是字量(Word),一个字单元可用于存放任何16位数据:一个段地址一个偏移地址 两个字符 065535之间的无符号数 3276832767之间的带符号数,字变量定义实例,;数据段countdw 8000h,?,ABmaxintequ 6
12、4hnumberdw maxintarraydw maxint dup(0),ASCII A=41h B=42h,;数据段 字变量和字常量的定义:WNUM EQU 5678H;定义WNUM为常量COUNT DW 20H;定义COUNT变量,假设在数据段的偏移地址为0010H;代码段 字变量和字常量的应用:MOV AX,BX+SI+WNUM 等价于 MOV AX,BX+SI+5678H MOV AX,COUNT等价于 MOV AX,0010H;AX0020HMOV AX,SI+COUNT等价于 MOV AX,SI+0010H LEA BX,COUNT等价于 LEA BX,0010H;BX 001
13、0HMOV BX,OFFSET COUNT等价于 MOV BX,0010H;BX 0010H,字变量和字常量实例,例.数据复制20次和显示,;数据段source db 33h,34h,35h,36h;定义4个字符数据target db 80 dup(?);分配数据空间420=80;代码段mov ax,dsmov es,ax;data也作为附加段cldmov si,offset sourcemov di,offset targetmov cx,80rep movsb;串传送mov si,0;显示mov bx,offset targetagain:mov dl,bx+si mov ah,2int
14、21hinc sicmp si,80jc again,movsb,int 21h,串操作类指令,8088的串操作类指令能对主存中一个连续区域的数据(如数组、字符串等)进行传送、比较等同样操作。当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利用循环程序
15、也可以实现串操作指令的功能,例:MOVSB(move string byte);ES:DIDS:SI;当DF=0,SISI+1 DIDI+1 当DF=1,SISI-1 DIDI-1,例.数据复制和显示,.model small.stack.datasource db 33h,34h,35h,36h;定义4个字符数据target db 80 dup(?);分配数据空间420=80.code.startupmov ax,dsmov es,ax;data也作为附加段cldmov si,offset sourcemov di,offset targetmov cx,80rep movsb;串传送mov
16、 si,0;显示mov bx,offset targetagain:mov dl,bx+si mov ah,2int 21hinc sicmp si,80jb again.exit 0end,3.宏(Macro)命令伪指令,为简化程序编制,对多次使用的程序,既可用子程序也可用宏指令、宏汇编实现宏定义 宏是具有宏命令名的一段汇编语句序列宏命令名 MACRO 形参数1,参数2,;宏定义体(硬指令、伪指令)ENDM宏调用 宏命令名 实参数1,参数2,宏需要先定义,然后才可在程序中宏调用,形式上类似其他指令,常称其为宏指令宏指令实际上是一段代码序列的缩写。在汇编时,宏指令被汇编程序用对应的代码序列替代
17、,这就是宏展开因为是在汇编过程中实现的宏展开,所以常称为宏汇编,宏命令伪指令实例:,*子程序设计;主程序mov al,datacall dpchar;子程序 AL左移4位dpcharprocmovcl,4salal,cl retdpcharendp,*宏调用mov al,datadpchar;宏定义:AL左移4位dpcharmacromovcl,4salal,cl endm,dpcharmacro;宏定义movcl,4salal,cl endm.model small.stack.code.startupmov al,datadpchar;宏调用.exit 0end,宏与子程序的比较,比较,仅
18、是源程序级的简化:宏调用在汇编时进行程序语句的展开,不需要返回;不减小目标程序,执行速度没有改变,还是目标程序级的简化:子程序调用在执行时由CALL指令转向、RET指令返回;形成的目标代码较短,执行速度减慢,宏,子程序,定位伪指令,定位伪指令控制数据的偏移地址ORG 参数ORG伪指令是将当前偏移地址指针指向参数表达的偏移地址:ORG 100h;从100h处安排数据或程序ORG$+10;使偏移地址加10,即跳过10个字节空间MASM中,符号“$”表示当前偏移地址值EVEN;从偶地址开始ALIGN n;从n的整数倍地址开始,三.汇编语言的运算符变量和标号的属性,变量和标号具有逻辑地址和类型属性,汇
19、编程序提供有关的操作符,以便获取这些属性值变量例 sum db 02h mov al,sum标号例 done:mov al,02h Jmp done逻辑地址属性 取值运算符SEG和OFFSET变量和标号对应存储单元的逻辑地址逻辑地址包含:段地址和偏移地址例:mov ax,offset sum类型属性 属性运算符PTR变量名的类型可以是BYTE(字节)、WORD(字)和DWORD(双字)等;标号、段名、子程序名的类型可以是NEAR(近)和FAR(远),分别表示段内或段间调用例:dec word ptr sum,取值运算符SEG和OFFSET,取得名字或标号的段地址和偏移地址,例:Alphadb3
20、0h,33hmovbx,offset alphamoval,bx+1 movcx,bx,;al33h,;cx3330h,org$+10arraydb 45,45h.codemov ax,seg arraymov ds,axmov bx,offset array;等价于 lea bx,arraymov cl,array+4;等效于 mov cl,array4mov ax,es:2000h,地址操作符实例,属性运算符PTR,对名字或标号的类型属性进行设置类型名 PTR 名字/标号类型名可以是BYTE、WORD、DWORD(依次表示字节、字、双字)等,或者是NEAR、FAR(分别表示近、远)定义的类
21、型 例:mov al,byte ptr var;var是一个字节变量 jmp far ptr label;label是一个标号 dec word ptr di inc byte ptr di使用PTR操作符,可以临时改变名字或标号的类型,8088CPU的存储格式-小端存储方式,低地址,LSB,MSB,00002H单元的内容为:00002H=34H00002H“字”单元的内容为:00002H=1234H00002H号“双字”单元的内容为:00002H=78561234H,多字节数据在存储器中占连续的多个存储单元存放:低字节存入低地址,高字节存入高地址表达:用低地址表示多字节数据占据的地址空间同一
22、个存储器地址可以是字节单元地址、字单元地址、双字单元地址等等,设DS=000002H“双字”单元 MOV EAX,0002H00002H“字”单元 MOV AX,0002H00002H单元 MOV AH,0002H,高地址,存储单元,存储器地址,.model small.stack.datav_byteequ this byte;v_byte是字节类型,与变量v_word的地址相同v_worddw 3332h,3735h;v_word是字类型的变量targetdw 5 dup(20h);分配数据空间2510字节crlfdb 0dh,0ah,$flagdb 0n_pointdw offset s
23、_label;取得标号s_label的偏移地址,例3.4:属性及其应用1/5,例3.4:属性及其应用2/5,.code.startupmov al,byte ptr v_word;用PTR改变v_word的类型,否则类型不匹配dec almov v_byte,al;对v_word的头一个字节操作,原为32H、现为31Hn_label:cmp flag,1jz s_label;flag单元为1转移inc flagjmp n_label;进行短转移,例3.4:属性及其应用3/5,s_label:cmp flag,2jz next;flag单元为2转移inc flagjmp n_point;段内的存
24、储器间接寻址,转移到s_label标号处next:mov ax,type v_word;汇编结果为mov ax,2mov cx,lengthof target;汇编结果为mov cx,5,例3.4:属性及其应用4/5,mov si,offset targetw_again:mov si,ax;对字单元操作inc si;SI指针加2inc siloop w_again;循环mov cx,sizeof target;汇编结果为 mov cx,0ahmov al,?mov di,offset targetb_again:mov di,al;对字节单元操作inc di;DI指针加1loop b_aga
25、in;循环,例3.4:属性及其应用5/5,mov dx,offset v_word;显示结果:1357?mov ah,9int 21h.exit 0end,四.汇编语言源程序结构,完整的汇编语言源程序由段组成一个汇编语言源程序可以包含若干个代码段、数据段、附加段或堆栈段,段与段之间的顺序可随意排列需独立运行的程序必须包含一个代码段,并指示程序执行的起始点,一个程序只有一个起始点所有的硬指令语句必须位于某一个代码段内,伪指令语句可根据需要位于任一段内通常,程序还需要一个堆栈段,源程序由语句序列构成,汇编语言翻译器(汇编程序,如MASM)对源程序有严格格式要求,才能将之翻译成目的代码,段寄存器及逻
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 微机 12 汇编
链接地址:https://www.31ppt.com/p-6047438.html