汇编语言程序设计经典课件_第1页
汇编语言程序设计经典课件_第2页
汇编语言程序设计经典课件_第3页
汇编语言程序设计经典课件_第4页
汇编语言程序设计经典课件_第5页
已阅读5页,还剩60页未读 继续免费阅读

下载本文档

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

文档简介

第四章汇编语言程序设计4.1程序格式和表达式程序格式MASM中的语句分为指令性语句和伪指令语句指令性语句与机器指令相对应,汇编程序将它们翻译成目标代码。语句格式为:标号:指令助记符操作数,操作数;注释伪指令语句没有对应的机器指令,可完成数据定义,存储区分配,段定义,段分配,指示程序结束等功能。名字伪指令指示符操作数,操作数;注释汇编语言中常数,变量和标号是三种基本数据项4.1程序格式和表达式MASM中的表达式算术运算符逻辑运算符关系运算符数值返回修改属性其他运算符运算符优先级算术运算符符号名称运算结果+加法和-减法差*乘法积/除法商MOD模除余数SHL左移左移后的二进制数SHR右移右移后的二进制数例:ARRAYDB1,2,3,4,5 TRYDB20 MOVAX,30*5 MOVCX,(TRY–ARRAY)DAEQU300 MOVCX,DA/100逻辑运算符符号名称运算结果AND与运算逻辑与结果OR或运算逻辑或结果XOR异或运算逻辑异或结果NOT非运算逻辑非结果例:MOVAL,NOTOFFHMOVBL,8CHAND73HMOVAH,8CHOR73HMOVCH,8CHXOR73H关系运算符符号名称运算结果为真输出全‘1’,为假输出全‘0’EQ相等NE不等LT小于LE小于等于GT大于GE大于等于例:MOVAX,10HGT16ADDBL,6EQ0110BMOVCX,((PORTLT5)AND100)OR

((PORTGE5)AND200)数值返回符号名称运算结果OFFSET返回偏移地址偏移地址SEG返回段地址段地址TYPE返回元素字节数字节数LENGTH返回变量单元数单元数SIZE返回变量总字节数总字节数例:MOVBX,OFFSETDA1MOVAX,SEGM1MOVDS,AXA1DB20H,30HMOVAH,TYPEA1MOVCX,LENGTHA1MOVBL,SIZEA1修改属属性符号名称运算结果段寄存器名段前缀修改段PTR修改类型属性修改后类型THIS指定类型/距离属性指定后类型HIGH分离高字节高字节LOW分离低字节低字节SHORT短转移说明-128~127字节间转移例:N1DB15H,36HN2DW1122H,3344HLO:MOVAX,WORDPTRN1MOVBL,BYTEPTRN2FIRSTEQUTHISBYTETABLEDW200DUP(?)L1:JMPSHORTL2K1EQU0ABCDHMOVAH,HIGHK1MOVBL,LOWK1其他运运算符符符号名称运算结果()圆括号改变运算符优先级[]方括号下表或间接地址•点运算符连接结构与变量<>尖括号修改变量MASK记录位图位图形WIDTH记录宽度记录/字段位数运算符符优先先级优先级运算符1(),[],<>,•,LENGTN,WIDTH,SIZE,MASK2PTR,OFFEST,SEG,TYPE,THIS,CS:,DS:,ES:,SS:3HIGH,LOW4*,/,MOD,SHL,SHR5+,-6EQ,NE,LT,LE,GT,GE7NOT8AND9OR,XOR10SHORT4.2伪指令令1数据定定义语语句和和存储储指令令2表达式式赋值值语句句3段定义义语句句4过程定定义语语句5程序开开始和和结束束语句句6结构和和宏定定义语语句7外部伪伪指令令及对对准伪伪指令令1数据定定义语语句DB定义字节(8位)DW定义字(16位)DD定义双字(32位)DQ定义四字(64位)DT定义10个字节(80位)DUP产生重复的字符或数字存储段段中数数据存存储指指令PTR

指示存储器指针BYTE

指示字节的长度的操作数,如同BYTEPTR

WORD

指示字操作数的作用,如WORDPTRDWORD

指示双字长度的操作数,如DWORDPTRNEAR

定义近指针FAR

定义远指针

格式1:变量量名助助记记符操操作数数,操作数数…格式2:变量量名助助记记符nDUP(操作作数,操作数数….)N必须是是正整整数,,表示示括号号内操操作数数的重重复次次数例如::DA1DB10H,23H;变量DA1装入10H,23HDA2DW‘‘OK’’;字符串串‘OK’’的ASCII码装入入DA2开始的的存储储单单元中中DA3DB?;变量DA3为不确确定字字节,,保留留1字节空空间DA4DB5DUP(0);重复5个0存入DA4开始的的存储储单元元中2表达式式赋值值语句句1)赋值值语句句EQU格式::符符号名名EQU表达式式;一个符符号名名只能能定义义一次次例:COUNTEQU100;常数赋赋给符符号名名COUNTDATAEQUCOUNT+2;表达式式赋给给符号号名DATAA1EQU[BX+SI];B1EQUORRSETA1;C1EQUADD;加法法指指令令赋赋给给符符号号名名C12)等等号号语语句句==与EQU功能能相相同同,,可可以以重重复复定定义义,,例例如如::COUNT=100COUNT=COUNT+103段定定义义语语句句段定义语句SEGMENTENDS定义段段名segment定义类型组合类型‘分类名’段名ends;指示段或者结构结束功能:将一个逻辑段定义成一个整体ASSUME规定段所属的段寄存器assumecs:段名,ds:段名,ss:段名,ES:段名功能:定义4个逻辑段,指明段和段寄存器的关系3段定定义义语语句句定义义类类型型是是对对该该段段起起始始位位置置的的定定义义。。参参数数有有::PARA,BYTE,WORD,PAGE组合合类类型型提提出出各各个个逻逻辑辑段段之之间间的的组组合合方方式式,,参参数数包包括括::NONE,PUBLIC,COMMON,AT表达达式式,STACK,MEMORY分类类名名的的主主要要作作用用式式汇汇编编程程序序连连接接时时将将所所有有同同名名的的逻逻辑辑段段组组成成一一个个段段组组。。例::DATASEGMENTDIDW1234HP1DD?DATAENDSSTACKSEGMENTSTACK‘‘STACK’’DW100DUP(?)STACKENDSCODESEGMENTASSUMECS:CODE,DS:DATA,SS:STACK……….CODEENDS4过程程定定义义语语句句格式式::过过程程名名PROC属性性;过程程内内容容RETN过程程名名ENDP功能能::定定义义一一个个过过程程,,主主程程序序可可以以用用CALL指令令调调用用。。过程程名名的的三三种种属属性性::段属属性性::该该过过程程所所在在段段的的基基址址偏移移地地址址属属性性::该该过过程程第第一一字字节节与与段段首首之之间间距距离离字字节节距离离属属性性::NEAR或FAR。例::MCODESEGMENTMAIN••SPDPROCFAR•••••RETSPDENDP•••••CALLSPD•••••MCODEENDS5程序序开开始始和和结结束束语语句句NAME格式:NAME程序名功能:为源程序目标模块赋名字ORG格式:ORG表达式功能:给汇编程序设置位置指针,指定下面语句的起始偏移地址。表达式:给定的偏移地址值,结果是正整数END格式:END标号名功能:标记汇编源程序结束标号名:该程序第一条可执行语句的标号名6结构构和和宏宏定定义义语语句句结构构的的定定义义格式式:结构构名名STRUC(用用DB,DW,DD等语语句句定定义义数数据据变变量量))结构构名名ENDS功能能:把各各种种不不同同类类型型的的数数据据放放在在同同一一数数据据结结构构中中结构构付付本本预预置置必须须先先预预置置结结构构付付本本,,汇汇编编程程序序给给每每个个结结构构付付本本分分配配存存储储空空间间。。格式式1:结构构付付本本名名结结构构名名<元素素值值,,元元素素值值…>格式式2:结构构付付本本名名结结构构名名NDUP(<元素素值值,,元元素素值值…>)例::TABSTRUCT1DB‘‘ABCD’’T2DW?T3DW2DUP(0)TABENDS•••••TWOTAB<‘‘STOP’’>•••••MOVTWO••T2,AX6结构构和和宏宏定定义义语语句句宏定定义义语语句句MACRO定义义宏宏的的名名字字、、参参数数和和开开始始格式式:宏名名macroENDM指示示宏宏序序列列结结束束7外部部伪伪指指令令及及对对准准伪伪指指令令外部部伪伪指指令令PUBLIC名称称,,名名称称,,….;注释释EXTRN名称称,,类类型型,,名名称称,,类类型型,,….;注释释对准准伪伪指指令令格式式:EVEN功能能:使下下一一语语句句的的地地址址调调整整为为偶偶地地址址LABEL格式式:名称称LABEL类型型属属性性功能能:为LABEL下一一行行语语句句中中的的变变量量或或标标号号取取别别名名例::DATASEGMENTA1DW4DUP(?)DATAENDSCODE1SEGMENT•••••PUBLICA1CODE1ENDSPCODESEGMENTEXTRNA1:WORDMIAN:••••••••••••MOVAX,OFFSETA1PCDOEENDSENDMAIN例::DATASEGMENTX1DB0DHEVENX2DW100DUP(?)DATAENDSDATBLABELBYTEDATWDW3031H,3233HMOVAL,DATB[0]MOVBX,DATW[1]4.3DOS系统统功功能能调调用用1.DOS键盘盘功功能能调调用用2.DOS显示示功功能能调调用用3.DOS打印印功功能能调调用用4.日期期与与时时间间设设置置5.异步步通通讯讯6.返回回操操作作系系统统DOS常用用的的软软中中断断命命令令软中断指令

功能

入口参数出口参数INT20H程序正常退出无无INT21H系统功能调用AH=功能号,相应入口号相应出口号INT22H结束退出INT23HCtrl-Break处理INT24H出错退出INT25H读磁盘AL=驱动器号CX=读入扇区数DX=起始逻辑扇区号DS:BX=内存缓冲区地址CF=0成功CF=1出错INT26H写磁盘同上,CX=写入扇区数同上INT27H驻留退出DS:DX=程序长度1.DOS键盘盘功功能能调调用用AH功能入口参数出口参数1从键盘输入一个字符,并在屏幕上显示,检查Ctrl-Break键AL=字符8键盘输入一个字符,无回显6直接键盘输入/输出字符,不检查Ctrl-Break键DL=0FFHAL=字符7直接键盘输入/输出字符,无回显,不检查Ctrl-Break键AL=字符0AH输入字符串到内存缓冲区DS:DX=缓冲区首址0BH检查键盘输入状态AL=FFH有键入,=0无键入0CH清键盘缓冲区,调用键盘输入功能AL=键盘功能号2.DOS显示示功功能能调调用用AH功能入口参数说明2显示一个字符,检查Ctrl-Break键DL=字符光标跟踪字符移动6显示一个字符,不检查Ctrl-Break键DL=字符光标跟踪字符移动9显示字符串DS:DX=串地址串以‘$’结束,光标跟随移动3.DOS打印印功功能能调调用用字符码功能字符码功能08H空格0FH设置紧缩方式09H水平TAB(横表)0EH设置扩展方式0AH换行12H取消紧缩方式0BH垂直TAB(纵表)14H取消扩展方式0CH换页1BH30H设置每英寸8行0DH回车1BH32H设置每英寸16行1BH45H设置加重打印方式1BH46H取消加重打印方式4.日期期与与时时间间设设置置功能号功能入口参数出口参数2BH设置日期CX:年号;DH:月号DL:日号AL=0成功AL=0FFH无效2AH取消日期CX:年号;DH:月号DL:日号2DH设置时间CH:小时;CL:分DH:秒;DL:百分之一秒AL=0成功AL=0FFH无效2CH取消时间CH:小时;CL:分DH:秒;DL:百分之一秒5.异步步通通讯讯MOVAH,4CHINT21H6.返回回操操作作系系统统功能号功能入口参数出口参数3异步通讯口输入AL=输入8位数据4异步通讯口输入DL=输出8位数据4.4汇编编程程序序格格式式1高档档微微机机新新增增伪伪指指令令2完整整的的段段定定义义3模型型方方式式格格式式1高档档微微机机增增加加的的伪伪指指令令.286选择80286指令系统.286P选择80286保护模式指令系统.386选择80386指令系统.386P选择80386保护模式指令系统.486选择80486指令系统.486P选择80486保护模式的指令系统.586选择Pentium指令系统.586P选择Pentium保护模式指令系统.287选择80287数字协处理器.387选择80387数字协处理器1高档档微微机机增增加加的的伪伪指指令令.EXIT用来使程序设计模型退回到DOS.MODEL选择编程模型.STARTUP在编程模型中指示程序的开始ALIGN2按字或双字分界的段中数据的开始USES自动保存过程使用的寄存器USE16386以上处理器使用16位指令模式和数据长度USE32386以上处理器使用32位指令模式和数据长度.STACK堆栈段定义.CODE代码段定义.DATA数据段定义2完整整的的程程序序格格式式((推推荐荐使使用用))stacksegmentstack’’stack’’;定义义堆堆栈栈段段dw512dup(?);堆栈栈段段有有512字空空间间stackends;堆栈栈段段结结束束Datasegment;定义义数数据据段段...;在数数据据段段定定义义数数据据dataendsCodesegment;定义义代代码码段段assumecs:code,ds:data,ss:stackstart:movax,stack;建立立SS段地地址址movss,axmovax,data;建立立DS段地地址址movds,ax...;在代代码码段段填填入入指指令令序序列列movax,4c00hint21h;利用用功功能能调调用用返返回回DOSCodeends;代码码段段结结束束endstart;汇编结束束,同时时指明程程序起始始点实模式程程序举例例Stacksegmentstack;定义堆栈段段dw512dup(?);堆栈段有512字空间stackends;堆栈段结束束Datasegment;定义数据段段Stringdb’’Hello,Everybody!’’,0dh,0ah,’$’’dataendscodesegment;定义代码段段assumecs:code,ds:data,ss:stackstart:movax,stack;建立SS段地址movss,axmovax,data;建立DS段地址movds,axmovdx,offsetstringmovah,9int21hmovax,4c00hint21h;利用功能调调用返回DOSCodeends;代码段结束束endstart;汇编结束,,同时指明明程序起始始点结果:屏幕幕上显示Hello,Everybody!3模型方式格格式.modelsmall;定义程序的的存储模式式.386;80386伪指令;.386指令不要,,就是实模模式下的简简化程序格格式.stack;定义堆栈段段(缺省1K).data;定义数据段段...;定义数据.code;定义代码段段.startup;程序起始点点,建立DS、SS内容...;程序代码.exit0;程序结束点点,返回DOS…;子程序end;汇编结束保护模式下下程序举例例.modelsmall;定义程序的的存储模式式.386;80386伪指令.stack;定义堆栈段段.data;定义数据段段numdb4dup(0)db0dh,0ah,'$'.code;定义代码段段.startup;程序起始点点,建立DS、SS内容movebx,1020304haddebx,30303030hmovdwordptrnum,ebxmovdx,offsetnum;指定字符串串的偏移地地址movah,9int21h;利用功能调调用显示信信息.exit0;程序结束点点,返回DOSend;汇编结束结果:屏幕幕上显示4321.STACK大小;堆栈段开开始.DATA;数据段开开始.CODE段名;代码段开开始简化段定义义伪指令指指明一个逻逻辑段的开开始,同时时自动结束束前面的一一个段。采用简化段段定义伪指指令前,需需有.model存储模式语语句。使用简化段段定义,各各段名称和和其他用户户所需的信信息可以使使用MASM预定义符号号,例如:@data表示由.data等定义的数数据段的段段名。堆栈段伪指指令.STACK大小堆栈段伪指指令.STACK创建一个堆堆栈段,段段名是:stack。它的参数指指定堆栈段段所占存储储区的字节节数,默认认是1KB(=1024=400h字节)。数据段伪指指令.DATA数据段伪指指令.data创建一个数数据段,段段名是:_DATA。它用于定定义具有初初值的变量量,当然也也允许定义义无初值的的变量。无初值变量量可以安排排在另一个个段中,它它用.data?伪指令创建建,数据段段名是:_BSS。.const伪指令用于于建立只读读的常量数数据段(段段名:CONST)。代码段伪指指令.CODE段名代码段伪指指令.code创建一个代代码段,它它的参数指指定该代码码段的段名名。如果没有给给出段名,,则采用默默认段名::在TINY、SMALL、COMPACT和FLAT模式下,默默认的代码码段名是::_TEXT;在MEDIUM、LARGE和HUGE模式下,默默认的代码码段名是::模块名_TEXT。程序开始伪伪指令.STARTUP按照CPU类型、存储储模式、操操作系统和和堆栈类型型,产生程程序开始执执行的代码码;同时还还指定程序序开始执行行的起始点点。在DOS下,还将设设置DS值,调整SS和SP值。程序终止伪伪指令.EXIT返回参数产生终止程程序执行返返回操作系系统的指令令代码。它的可选参参数是一个个返回的数数码,通常常用0表示没有错错误。例如如.exit0对应的代码码是:movax,4c00hint21hDOS功能调用的的4ch子功能(返返回DOS):入口参数::AH=4ch,AL=返回数码码汇编结束伪伪指令END标号指示汇编程程序MASM到此结束汇汇编过程。。源程序的最最后必须有有一条END语句。可选的标号号用于指定定程序开始始执行点,,连接程序序将据此设设置CS:IP值。注意,采用用了.startup伪指令就不不需要再用用“end标号”指明明开始执行行点,但““end”伪指令还要要有。存储模型汇编语言的的存储模型型有:TINY,SMALL,MEDIUN,COMPACT,LARGE,HUGE,FLATTINY模式产生COM程序,其他他模式产生生EXE程序,FLAT模式只能用用于32位程序。TINY微型模式微型模式是是MASM6.0才引入的,,用于创建COM类型程序。用微型模式式编写汇编编语言程序序时,所有有的段地址址寄存器都都被设置为为同一个值值。这意味着代代码段、数数据段、堆堆栈段都在在同一个段内,不大于64KB;访问操作作数或指令令都只需要要使用16位偏移地址址。SMALL小型模式一般的程序序都可用这种种模式。在小型模式式下,一个个程序有一个代码码段和一个个数据段,每段不大大于64KB。这里的数据据段是指数数据段、堆堆栈段和附附加段的总总和,它们们共用同一一个段基址址,总长度度不可超过过64KB;因此小模模式下程序序的最大长长度为128KB。访问操作数数或指令都都只需要使使用16位偏移地址址;这意味味着诸如指指令转移、、程序调用用以及数据据访问等都都是近属性(NEAR),即小型模模式下的调调用类型和和数据指针针缺省分别别为近调用用和近指针针。COMPACT紧凑模式适合于数据据量大但代代码量小的的程序。紧凑模式下下,代码段被限制在一个不大于64KB的段内;而而数据段则可可以有多个个,超过64KB。这种模式下下的调用类类型缺省仍仍为近调用用;而数据据指针缺省省为远(FAR)指针,这这是因为必必须用段地地址来区别别多个数据据段。MEDIUM中型模式中型模式是是与紧凑模模式互补的的模式,适合于数据据量小但代代码量大的的程序。中型模式的的代码段可以以超过64KB,有多个;但数据段只能能有一个不大于64KB的段。这种模式下下的

温馨提示

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

评论

0/150

提交评论