微机原理:第四章 8086汇编语言程序设计_第1页
微机原理:第四章 8086汇编语言程序设计_第2页
微机原理:第四章 8086汇编语言程序设计_第3页
微机原理:第四章 8086汇编语言程序设计_第4页
微机原理:第四章 8086汇编语言程序设计_第5页
已阅读5页,还剩84页未读 继续免费阅读

付费下载

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

第四章8086汇编语言程序设计几个基本概念8086汇编语言的语句8086汇编中的伪指令8086汇编中的运算符汇编语言程序设计汇编语言程序设计实例几个基本概念汇编语言:助记符、符号地址、标号汇编语言源程序汇编汇编程序:汇编语言源程序→机器语言程序分配存储区数制转换、计算表达式检查源程序语法错误

例编写汇编语言源程序,将两个字节二进制数相加.DATA SEGMENT

;定义数据段DATA1DB0F8H ;被加数DATA2DB0C1H ;加数DATA ENDS

;数据段结束CODESEGMENT

;定义代码段

ASSUMECS:CODE,DS:DATASTART: MOV AX,DATA MOV DS,AX ;初始化DS MOV SI,0 ;置SI初值为0 MOV AL,DATA2[SI];取加数

ADD DATA1[SI],AL

;与被加数相加

MOV AH,4CH INT 21H ;返回DOSCODE ENDS

;代码段结束

END START

;源程序结束4.18086汇编语言的语句汇编语言语句:指令性语句、指示性语句1、指令性语句格式[标号:]助记符[操作数1,][操作数2];[注释]例:LER:MOVAL,DATA2[SI];取一个数标号属性 三种:段值、段内偏移量、类型4.18086汇编语言的语句2、指示性语句格式[名字]伪指令[操作数1,][操作数2];[注释]例:DATA1DB0F8H,60H,3BH;被加数存储器操作数属性三种:段值、段内偏移量、类型。4.28086汇编中的伪指令4.2.1符号定义语句1、等值语句 格式:符号名EQU表达式

例: ⑴PORT EQU1234 ⑵BUFF EQUPORT+58 ⑶MEM EQUDS:[BP+20H] ⑷COUNTEQUCX ⑸ABC EQUAAA2、等号语句 格式:符号名=表达式例:NUM=34 MOV CX,NUM…… NUM=34+1与EQU伪指令基本相同,主要区别在于它可以对同一个名字重复定义。4.2.2变量定义语句 格式:

符号名DB/DW/DD[操作数1,][操作数2]…1、定义一组数据例1:BUFF1DW1234H,0ABCDH,8EH

BUFF2DB-1DH,6AH…….

MOV AX,BUFF1

MOV

BX,BUFF1+2 MOV

CL,BUFF2注意:数据的属性内存存储方式存储地址2、定义一串字符例2:STRDB‘Welcome!’3、定义保留存储单元例3:SUMDW?, ?4、复制操作复制操作符DUP例4:

ALL_ZERODB0,0,0,0,0用复制操作可改为:

ALL_ZERODB5DUP(0)5、将已定义的地址存入内存单元例5:LITDDCYC… CYC:MOVAX,BX4.2.3段定义语句1、格式:段名SEGMENT[定位类型][组合类型][‘类别’] ……段名ENDS只需要掌握

段名SEGMENT ……

段名ENDS堆栈段SEGMENTSTACK‘STACK’2、段假设语句 ASSUME段寄存器名:段名[,…]3、

ORG伪指令、地址计数器$ ORG伪指令格式:ORG<表达式>例:ORG2000H

JMP$;当前存储单元偏移地址4、PUBLIC和EXRTRN伪指令格式:PUBLIC名字[,……]表示本模块提供可被其他模块使用的名字

格式:EXRTRN

名字[,……]表示本模块用到其他模块定义的名字(变量或标号)4.2.4过程定义语句

过程名PROCNEAR/FAR …… RET 过程名ENDP

……

CALL 过程名4.2.5结束语句

1、END

表示源代码结束2、END标号

表示源代码结束,指出程序的第一条语句。4.38086汇编中的运算符4.3.1常用运算符1、算术运算符+(加)、-(减)、*(乘)、/(除)、MOD(求余)2、逻辑运算符AND、OR、XOR、NOT3、关系运算符

EQ(相等)、NE(不等、)LT(小于)、GT(大于)、LE(小于等于)、GE(大于等于)。

关系成立,全1 关系不成立,全0例:MOVDL,10HLT16

MOVDL,0例:ANDAX,555GT222

ANDAX,0FFFFH4、分析操作符1)SEG 例:BUFFDW1234HMOVAX,SEGBUFF2)OFFSET 例:MOVBX,OFFSETBUFFMOVDX,BUFF3)TYPE对于变量有3种:1

字节型;2

字型;4

双字型;对于标号有2种:-1

NEAR(段内)-2

FAR(段间) 例:BUFFDB20H

MOVBX,TYPEBUFF

MOVBX,014)LENGTH已用DUP说明的变量,用LENGTH可得到此变量的个数。否则得到1。5)SIZESIZE=TYPE×LENGTH例:BUFFDW10DUP(?) MOVCX,LENGTHBUF

MOVCX,10

MOVCX,SIZEBUF

MOVCX,205、综合运算符(合成操作符)1)PTR运算符

格式:类型PTR表达式例:INCWORDPTR[BX]wx dw1234hmoval,byteptrwxmovah,byteptrwx+1movax,wx2)THIS操作符 格式:THIS类型(或属性) 例:FIRSTEQUTHISBYTE SECONDDW100DUP(?)4.4汇编语言程序设计什么是好的程序?结构化、易读、易调试、易修改和扩充执行速度快占内存少4.4汇编语言程序设计常用的汇编语言程序框架:

DATA SEGMENT ;定义数据段 VAL1DB12H,8EH ;定义变量 …… DATA ENDS ;数据段结束 CODE SEGMENT ;定义代码段 ASSUMEDS:DATA,CS:CODE ;段属性说明 START:MOVAX,DATA ;初始化DS MOVDS,AX …… MOVAX,4C00H ;返回DOS INT21H CODEENDS ;代码段结束 ENDSTART ;源程序结束特点程序分段语句由指令性和指示性语句组成两种程序框架框架一:

DATA SEGMENT ;定义数据段

VAL1DB12H,8EH ;定义变量 …… DATA ENDS ;数据段结束 CODE SEGMENT ;定义代码段 ASSUMEDS:DATA,CS:CODE ;段属性说明 START:MOVAX,DATA ;初始化DS MOVDS,AX …… ;填写代码

MOVAX,4C00H ;返回DOS INT21H CODEENDS ;代码段结束 ENDSTART ;源程序结束框架二:

DATA SEGMENT ;定义数据段

VAL1DB12H,8EH ;定义变量 ……

DATA ENDS ;数据段结束 CODE SEGMENT ;定义代码段

MAIN PROCFAR ASSUMEDS:DATA,CS:CODE ;段属性说明 START:PUSHDS MOVAX,0 PUSHAX MOVAX,DATA MOVDS,AX

…… ;填写代码

RET

MAIN ENDP CODEENDS ;代码段结束 ENDSTART ;源程序结束4.4.1汇编语言程序设计基本步骤分析问题,建立模型,确定算法绘制流程图确定变量与工作单元,编写程序检查和调试4.4.2汇编语言程序的基本结构1、顺序结构执行1执行2开始结束例4-1

DATA SEGMENT ;定义数据段

BLOCKDW0ABCDH ;定义变量 BUFFDD? DATA ENDS ;数据段结束

CODE SEGMENT ;定义代码段 ASSUMEDS:DATA,CS:CODE ;段属性说明START:MOVAX,DATA ;初始化DS MOVDS,AX

(相关代码)MOVAX,4C00H ;返回DOS INT21HCODEENDS ;代码段结束ENDSTART ;源程序结束

相关代码:

MOVDX,BLOCK

MOVAX,DX ANDAX,0F0FH ANDDX,0F0FH MOVCL,4 SHRDX,CL

LEABX,BUFF MOV[BX],AL MOV[BX+1],DL MOV[BX+2],AHL MOV[BX+3],DH2、分支结构例4-2实现数据段中定义变量的语句:

MEMS DB8 MEMDDB? ……代码段中相关的语句:

MOVAL,MEMS

;AL←MEMS CMPAL,0 JGENEXT;x≥0时转NEXT MOVAL,-1;否则将−1送入AL

JMPDONENEXT:

JE DONE

;为0时转DONE MOVAL,1 ;否则将1送入AL

JMPDONEDONE:MOVMEMD,AL 方案一

MOVAL,MEMS CMPAL,0 MOVAL,-1 JLDONE

MOVAL,1

JG DONEMOVAL,0 DONE:MOVMEMD,AL 方案二3、循环结构

(1)初始化部分:如设置地址指针、计数器、其他循环参数的起始值等。

(2)工作部分:循环所要完成的具体操作。它可以是一个顺序程序、一个分支程序或另一个循环程序。

(3)修改部分:如修改地址指针、其他循环参数等。(4)循环结束判断部分(5)结束处理部分:如存储结果等。可以没有这部分。循环控制方法

1)循环次数已知,用计数控制循环。2)用条件控制循环无法确定循环次数时,可用某种条件来确定是否结束循环。程序要是寻找控制条件以及对控制条件的检测。

例4-3:

编程统计BUFF为首地址的缓冲区中负数的个数。BUFFDB67H,9EH,-6AH,0ABH,6DHMEMDB? XOR DL,DL ;DL←0 LEA BX,BUFF ;BX←缓冲区首址 MOV CX,5 ;CX←缓冲区长度NEXT:MOVAL,[BX] ;取一个数据到AL

ADDAL,0

;使数据影响状态标志位

JNS AA1 ;不为负,转AA1INC DL ;为负DL+1AA1:INC BX ;移动指针

LOOP NEXT ;循环控制

MOVMEM,DL ;保存统计结果例4-5:在BLOCK存储区有一字符串,统计“%”之前的字符个数

BLOCK DB‘FHJLIO689%yyuo’ COUNTEQU$-BLOCKMEMDB0

MOV SI,OFFSETBLOCK MOV CX,COUNTLOOP1:MOVAL,[SI]CMPAL,‘%’JEDONEINCMEMINCSILOOPLOOP1DONE:MOV AH,4CH……4、子程序Callproc1retproc1实现方法主程序有调用指令call子程序有返回指令ret特点Call指令与ret缺一不可现场保护入口出口参数设置例4-6: 编写AX*10AX子程序子程序编写1、子程序组成使用说明a、子程序功能b、使用寄存器情况c、入口出口参数程序体入口出口参数传递现场保护功能程序段2、现场保护和入口出口参数传递现场保护方案一:在子程序中保护方案二:在主程序中保护参数传递寄存器传递变量传递堆栈传递

;这是一个乘10子程序 ;使用寄存器AX ;入口:AX,出口:AX mul10 proc pushbx ;保护现场 pushf

addax,ax ;2ax movbx,ax ;2axbx addax,ax ;4ax addax,ax ;8ax addax,bx ;10ax popf ;恢复现场 popbx ret mul10 endp功能程序段主程序相关语句

MOVAX,XX

CALLMUL10

MOVYY,AX4.6汇编语言程序设计与上机调试4.6.1程序设计实例例4-7:100字型数据加一例4-8:100个压缩BCD码求和例4-9:两个20个字节的无符号数组对应元素相加。例4-10:交换AL的高四位与低四位例4-11:将AX中的内容反向存入BX例4-12:将以“$”为结束符的字符串中的小写字母变为大写字母例4-13:16进制到10进制的转换例4-14:10进制到16进制的转换例4-15:数字0~9明码转换为密码例4-16:7段代码转换位码段码数码管的段码和位码举例:例1:显示字符“1”。(共阴极数码管)位码接低电平。段码按照hgfedcba的顺序,

为“00000110”。例2:显示字符“A”。(共阳极数码管)位码接高电平。段码按照hgfedcba的顺序,为“10001000”。LED字型显示代码表

2.显示原理显示

段符号十六进制代码dpgfedcba共阴极共阳极0123456789AbCdEFHP0000000000000000000011111011110111111000111011111011111010001010111111111011011011011110001101111111110100101111100111100100111011011111101011013FH06H5BH4FH66H6DH7DH07H7FH6FH77H7CH39H5EH79H71H76HF3HC0HF9HA4HB0H99H92H82HF8H80H90H88H83HC6HA1H86H8EH89H8CH查找显示代码程序段DISTBDB3FH,06H,5BH,4FH,66H,6DH,7DH,07HDB7FH,6FH,77H,7CH,39H,5EH,79H,71HDISBUFDB2,0,1,7。。。。。LEABX,DISTBLEASI,DISBUFMOVCX,4MOVAL,[SI]XLAT输出显示代码(段码)输出位码移位、循环例4-17:将数据段偏移地址STG1、长度COUNT的字型数据块传送到偏移地址STG2的存储区。

DS、ES相同用REPMOVSW例4-18:将BLOCK存储区的60个带符号字节型数据按正、负分别存储在BUFF1、BUFF2.例4-19:在一组带符号字型数据中找出最大值。LEA SI,BLOCK ;(SI)←数据块首址MOVCX,COUNT ;(CX)←数据块长度MOVAX,[SI] ;取一个到AXDEC CX ;(CX)←(CX)−1AA1:ADDSI,2 ;地址+2

CMP AX,[SI] ;与下个数比较JGE AA2;大于下个数,则转AA2

MOVAX,[SI];否则,存下个数AA2: LOOP AA1 ;CX减1,若不等于零,转AA1

存AX中的最大数4.6.2

DOS功能调用与子程序设计微机系统为汇编用户提供了两个程序接口:

DOS系统功能调用

ROM中的BIOS。二者由一系列的服务子程序构成,通过软中断指令INTn调用和中断返回指令IRET返回。便于程序设计人员使用系统的硬件,尤其是I/O的使用与管理。

系统功能调用系统功能子程序可分为四个主要方面:

(1)磁盘的读/写及控制管理。

(2)内存管理。

(3)基本输入/输出管理(键盘、打印机、显示器)。

(4)其他管理(如时间、日期等)。

系统已将所有子程序按顺序编号,称为调用号。使用时一般需要经过以下三个步骤:

(1)子程序的入口参数送相应的寄存器。

(2)子程序编号送AH。

(3)发出中断请求:INT21H(系统功能调用指令)。

键盘和显示器的DOS调用

调用号功能入口参数出口参数1键入并显示一个字符

键入字符的ASCII码在AL中2显示器显示一个字符DL中置输出字符的ASCII码

5打印机打印一个字符DL中置输出字符的ASCII码

8键盘输入一个字符

键入字符的ASCII码在AL中9显示器显示一个字符串DS:DX置字符串首址,字符串以'$'结束

10(0AH)键入并显示字符串DS:DX置字符串首址,第1单元置允许键入的字符数(含一个回车符)键入的实际字符数在第2单元中,键入的字符从第3单元开始存放11(0BH)检测有无键入

有键入AL=FFH,无键入AL=0

1. 1号(键盘输入单字符) 输入参数:无

输出参数:AL=ASCII码

扫描键盘,等待键入。有键按下,将相应字符的ASCII码值读入,若是Ctrl–Break,则退出程序执行;否则将键值送入AL寄存器,同时将这个字符显示在屏幕上。2. 2号(屏幕显示单字符)输入参数:DL=ASCII码

输出参数:无显示器显示其ASCII码值放入DL中的字符。

例4-21:键盘输入两个一位十进制数,求和并在屏幕显示。

START:MOV AH,1

INT 21HMOVBL,AL INT 21H ADDAL,BLAAAMOVDL,AL ADDDL,30HMOV AH,2

INT 21H

3. 9号(屏幕显示字符串) 输入参数:DS:DX=字符串缓冲区首地址

输出参数:无显示器显示一个字符串。字符串以“$”作为结束标志。DATA SEGMENT BUFFDB‘HOWDOYOUDO?’,0DH,0AH,’$’DATA ENDSCODE SEGMENT ……MOV AX,DATA MOV DS,AX MOV DX,OFFSETBUFF MOV AH,9 INT 21H …… CODE ENDS4. 10号(键盘输入字符串)输入参数:DS:DX=输入缓冲区首地址

输出参数:DS:DX=输入缓冲区首地址要事先定义一个缓冲区,第一个字节指出缓冲区能容纳的字符个数;第二个字节保留,用于填写实际输入的字符个数;第三个字节开始存放从键盘上接收的字符串。 BUF DB50 ;数据区长度

DB? ;保留,实际输入的字符个数

DB50DUP(?) ;定义50个字节存储空间…… MOV AX,DATA MOV DS,AXMOV DX,OFFSETBUF MOV AH,10 INT 21H ……

6.4CH(过程终止)MOVAX,4C00H INT 21H结束当前程序,返回调用它的程序常用系统功能调用应用举例例

利用DOS系统功能调用实现人机对话。在屏幕上显示一行提示信息,然后接收用户从键盘输入的信息并将其存入内存数据区。DATA SEGMENTPARS DB100 ;定义输入缓冲区

DB? DB100DUP(?)MESG DB'WHATISYOURNAME?' ;要显示的信息

DB'$' ;提示信息结束标志DATAENDSSTACK SEGMENTPARASTACK'STACK' DB100DUP(?)STACK ENDSCODE SEGMENT ASSUMECS:CODE,DS:DATA,SS:STACKBEGIN: MOV AX,DATA MOV DS,AXDISP: MOV DX,OFFSET

温馨提示

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

评论

0/150

提交评论