《微机原理》第四章汇编语言程序设计(过控和机械).ppt

上传人:za****8 文档编号:12673327 上传时间:2020-05-13 格式:PPT 页数:36 大小:300.51KB
返回 下载 相关 举报
《微机原理》第四章汇编语言程序设计(过控和机械).ppt_第1页
第1页 / 共36页
《微机原理》第四章汇编语言程序设计(过控和机械).ppt_第2页
第2页 / 共36页
《微机原理》第四章汇编语言程序设计(过控和机械).ppt_第3页
第3页 / 共36页
点击查看更多>>
资源描述
第四章8086汇编语言程序设计,4.1汇编语言程序结构,4.1.1汇编语言的语句格式,指令语句的一般格式如下:标号:指令助记符(操作码)操作数;注释,伪指令语句格式,伪指令语句格式如下:名字伪指令符操作数;注释,指令语句格式,4.2常数、变量、表达式,常数,数值常数,表各种形式数字常量格式对照表,字符串常量是用单引号引起来的一个或多个字符。字符串常量是以各字符的ASC码表示的。如A用41H表示,A1B2用41H,31H,42H,32H表示。,字符串常数,变量(或标号),变量(或标号)有三个属性:段地址属性、偏移地址属性、类型属性。,表达式,算术运算符(了解),算术运算符包括:(加)、(减)、*(乘)、(除)、MOD(求模)等。,【例】用算术运算符进行数值表达式运算。,MOVAL,25*450;AL=50=32HMOVBL,50/7;NUM2=7MOVDL,50MOD7;DL=1,逻辑运算符包括:AND、OR、XOR、NOT四种运算。【例】用逻辑运算符进行运算。MOVAL,34HAND0FH;04HALMOVBL,05HOR30H;35HBLMOVCX,NOT00FFH;0FF00HCXMOVDX,789AHXOR000FH;7895HDX,逻辑运算符(了解),关系运算符(了解),关系运算符包括:相等(EQ),不等(NE),小于(LT),大于(GT),小于等于(LE)及大于等于(GE)。【例】用关系运算符进行数值表达式运算。MOVDH,10LT5;DH=0MOVCL,0AAHGT7FH;CL=0FFHMOVAX,AEQ41H;0FFFFHAXADDB,LT0101;B,PTR运算符格式:类型PTR地址表达式PTR用来对存储单元(重新)规定类型。,属性运算符,例如:MOVBYTEPTR1000,0;1000清零MOVWORDPTR1000,0;1000、1001清零,SEG运算符格式:SEG变量或标号功能:分离出其后变量或标号所在段的段基址。例如:MOVAX,SEGARRMOVDS,AXOFFSET运算符格式:OFFSET变量或标号功能:分离出其后变量或标号的偏移地址。例如:MOVBX,OFFSETBUF,数值返回运算符,TYPE运算符(了解)格式:TYPE变量或标号,4.1.3伪指令,数据定义伪指令,常用的数据定义伪指令有DB,DW,DD,DQ,DT。格式:变量名数据定义伪指令表达式,,段定义伪指令SEGMENT/ENDS,段名SEGMENT本段程序内容段名ENDS,【例】为数据段分配存储单元。DATASEGMENTADB11H,12H,13HBDW1122H,3344HCDD12345678HDATAENDS,【例】为字符串分配存储单元。DATASEGMENTSTR1DB1234STR2DWAB,CD,ASTR3DDABDATAENDS,NUM1EQU25*450;NUM1=50NUM2EQUNUM1/7;NUM2=7NUM3DBNUM1MOD7;(NUM3)=1VAR1DB1,2,3,4,5VAR2DB12345NUM4EQUVAR2-VAR1;NUM4=5NUM5EQU0FH,【例】,符号定义伪指令,格式:符号名EQ表达式,段分配伪指令ASSUME,格式:ASSUME段寄存器:段名,段寄存器:段名【例】用ASSUME伪指令建立代码段、堆栈段与CS和SS的对应关系。DATA1SEGMENTADB1,2,3DATA1ENDSSTACKSEGMENTSTACKDB200DUP(0)STACKENDSDATA2SEGMENTBDB123ABCDATA2ENDSDATA3SEGMENTCDB?,?,?DATA3ENDSCODESEGMENTASSUMEDS:DATA1,ES:DATA3,CS:CODE,SS:STACK,START:MOVAX,DATA1MOVDS,AX;DATA1DSMOVAX,DATA3MOVES,AX;DATA3ESCODEENDSENDSTART,源程序结束伪指令,格式:END标号,置汇编地址计数器伪指令ORG,格式:ORG数值表达式【例】给汇编地址计数器赋值。DATASEGMENTORG10;置值为10VAR1DW100H,200HORG+5;置的值为14+5,即为19VAR2DB1,2,+1,+2NEQU-VAR2;()=23,N=4DATAENDS,4.2常用的DOS系统功能调用,单字符输入(1号调用)格式:MOVAH,1INT21H功能:从键盘输入字符的ASCII码送入寄存器AL中,并显示。,单字符显示(2号调用)格式:MOVDL,待显示字符的ASCII码MOVAH,2INT21H功能:将DL寄存器中的字符送显示器显示。,结束调用(4CH号调用)格式:MOVAH,4CHINT21H功能:终止当前程序并返回调用程序。,显示字符串(9号调用)格式:LEADX,待显示字符串首偏移地址MOVAH,9INT21H功能:将当前数据区中以结尾的字符串送显示器显示。,DATASEGMENTSTRDB0DH,0AH,Exampleofstringdisplay!$DATAENDSCODESEGMENTASSUMEDS:DATA,CS:CODEBEGIN:MOVAX,DATAMOVDS,AXLEADX,STRMOVAH,9INT21HMOVAH,4CHINT21HCODEENDSENDBEGIN,【例】若要在屏幕上显示字符串“Exampleofstringdisplay!”,则程序如下:,综合举例,【例】已知一数据段中的数据为:DATASEGMENTADW0CHBUFDBAB,0DH,0AHCEQU500HBDW0FFAAHDDDBUFMDB2DUP(1),2DUP(2,B)DATAENDS请画出该数据段数据存储的形式。,汇编语言程序设计一般有以下几个步骤:步骤1:分析问题,确定算法步骤2:绘制流程图步骤3:根据流程图编制程序步骤4:调试程序,4.3顺序程序设计,汇编语言程序设计的一般步骤,起止框,流程图,判断框,处理框,指向线,连接框,顺序程序设计举例,【例】试编写一程序,将两个一位十进制数相加,要求算术式以字符串的形式存放在DATA1为首的单元中,结果存放在DATA2单元中。,CODESEGMENTASSUMEDS:DATA,CS:CODESTART:MOVAX,DATAMOVDS,AX;DATAAXXORAX,AXMOVAL,DATA1ADDAL,DATA1+2AAAORAL,30HMOVDATA2+1,ALORAH,30HMOVDATA2,AHLEADX,DATA1MOVAH,9INT21HMOVAH,4CHINT21HCODEENDS;退出DOS状态ENDSTART,开始,被加数AL,用ADD完成两个数相加,AAA调整,结果送DATA2,显示算术式和显示结果,返回DOS,结束,DATASEGMENTDATA1DB6+8=DATA2DB?,?,$DATAENDS,4.4分支程序设计,无条件转移指令,转移指令,JMP标号(MEM/REG),条件转移指令,根据单个标志位的条件转移指令,无符号数条件转移指令,【例】比较无符号数大小,将较大的数存放AX寄存器。CMPAX,BX;(AX)(BX)JNBNEXT;若AX=BX,转移到NEXTXCHGAX,BX;若AX=BX,转移到NEXTXCHGAX,BX;若AXBX,交换NEXT:,分支程序的设计,【例】试编一程序,求三个无符号字数据中的最大值,并将最大值存入MAX字单元中。三个数分别在三个字变量X、Y、Z中存储。,程序如下:DATASEGMENTXDW00ABHYDW5ZDW200MAXDW?DATAENDS,CODESEGMENTASSUMEDS:DATA,CS:CODESTART:MOVAX,DATAMOVDS,AXMOVAX,XCMPAX,Y;XY?JAL1MOVAX,YL1:CMPAX,Z;XZ?JAEXITMOVAX,ZEXIT:MOVMAX,AXMOVAH,4CHINT21HCODEENDSENDSTART,4.5循环程序设计,重复控制指令,循环指令LOOP语句格式:LOOP短标号功能:(CX)10,则程序转移(循环);否则,顺序执行。说明:使用LOOP指令可代替两条指令:DECCXJNE短标号,相等/为零循环指令LOOPE(自学)语句格式:LOOPE(LOOPZ)短标号功能:(CX)10且ZF=1,则程序转移(循环);否则,顺序执行。,不相等/不为零循环指令LOOPNE(自学)语句格式:LOOPNE(LOOPNZ)短标号功能:(CX)10且ZF=,则程序转移(循环);否则,顺序执行。,CX为零转移指令JCXZ(自学)语句格式:JCXZ短标号功能:(CX)0(CX不减1),则程序转移;否则,顺序执行。,循环程序的结构,循环程序设计,【例】DATA中有10个字节数,找出这些数的最大值。,程序如下:,DsegSEGMENTDATADB0BH,42,26H,89,54DB5,8,34,0FFH,74HMAXDB?DsegENDSCODESEGMENTASSUMEDS:Dseg,CS:CODESTART:MOVAX,DsegMOVDS,AX,MOVBX,OFFSETDATAMOVCX,9MOVAL,DATAA1:CMPAL,BX+1JAEL1MOVAL,BX+1L1:INCBXLOOPA1MOVMAX,ALMOVAH,4CHINT21HCODEENDSENDSTART,调用和返回指令,调用指令CALL标号,段内调用:SP-2,IP入栈,标号偏移地址IP。,段间调用:SP-2,CS的内容入栈,SP-2,IP入栈,标号段地址CS,标号偏移地址IP。,返回指令RET,段内的返回把SP所指的堆栈顶部的一个内容弹回到指令指针IP中,且SP加2。段间返回:CS弹出,再加2。,4.6子程序设计,子程序的定义和调用,定义:过程名PROCNEAR/FARRET过程名ENDP,子程序设计,CSEGSEGMENTCALLSUBT1SUBT1PROCFARRETSUBT1ENDPCSEGENDSXSEGSEGMENTCALLSUBT1XSEGENDS,子程序设计方法(自学),信息的保护与恢复,主程序与子程序参数传递方式,例如:PROGPROCPUSHAXPUSHBXPUSHCX;保护现场PUSHDXPOPDXPOPCXPOPBX;恢复现场POPAXRET;返回断点处PROGENDP,寄存器法约定单元法堆栈法,
展开阅读全文
相关资源
正为您匹配相似的精品文档
相关搜索

最新文档


当前位置:首页 > 图纸专区 > 课件教案


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

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


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