《微机原理与应用教学资料》第四章课件_第1页
《微机原理与应用教学资料》第四章课件_第2页
《微机原理与应用教学资料》第四章课件_第3页
《微机原理与应用教学资料》第四章课件_第4页
《微机原理与应用教学资料》第四章课件_第5页
已阅读5页,还剩151页未读 继续免费阅读

下载本文档

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

文档简介

第四章:宏汇编语言程序设计汇编语言程序格式MASM中的表达式伪指令语句DOS系统功能调用程序设计方法程序举例编辑ppt1第四章:宏汇编语言程序设计汇编语言程序格式编辑ppt1§4.1汇编语言程序格式汇编语言机器语言的符号表示,面向机器的语言汇编语言的特点:直接控制目标代码,可对输入输出设备进行控制,实时性好;编程效率高,节省内存,运行速度快。源程序1.asm1.obj1.exe8086常用的汇编程序:宏汇编程序MASM一、指令性语句:生成机器代码,由CPU来执行格式:标号:指令助记符操作数,操作数;注释

字母开头,最长31个字符汇编链接编辑ppt2§4.1汇编语言程序格式汇编语言机器语言的符号二、伪指令语句:只提供汇编信息功能:变量定义、存储区分配、段定义、段分配、指示程序开始、结束格式:名字伪指令助记符操作数,操作数;注释

变量名、段名、过程名、符号名(名字后不允许有“:”)三、数据项汇编语言中的操作数:常数、寄存器、存储器、变量、标号和表达式编辑ppt3二、伪指令语句:编辑ppt31、常数

00110101B026H123D‘howareyou?’2、变量

是内存中的一个数据区。在程序中作为操作数使用。变量名又称符号地址,表示该数据项中第一项所在的地址。

和常数区别:变量值可以改变。

三个属性:①段地址②段内偏移地址③类型属性(BYTE,WORD,DWORD)3、标号

可执行指令语句的地址的符号表示。可作为转移指令的目的操作数。三个属性:①段地址②段内偏移地址③类型属性(NEAR,FAR)

编辑ppt41、常数

00110101B026H123D‘§4.2表达式汇编后的表达式为一个值组成:运算对象+运算符,运算对象与结果都是整数运算对象:常数、变量、标号分为数字表达式和地址表达式两种一、算术运算符:+,-,*,/,MOD,SHL,SHR所有算术运算符都可以对数据进行运算例MOVAX,5+3;(AX)=8MOVAX,(9MOD2);(AX)=1MOVAX,9/2;(AX)=42.对地址运算,只能是+,-编辑ppt5§4.2表达式汇编后的表达式为一个值编辑ppt5例2:ARRAYDB1,2,3,4TRYDB20MOVAX,(TRY-ARRAY);汇编后MOVAX,4例3:FIRSTDB1,2,3MOVAX,FIRST+2二、逻辑运算符:AND,OR,NOT,XOR只能用于数字表达式中例:PORTEQU90HANDDL,PORTAND0FEH;汇编后ANDDL,90H

前AND—指令助记符,在程序执行时运算后AND—运算符,在汇编时计算编辑ppt6例2:ARRAYDB1,2,3,4编辑ppt6三、关系运算符:EQ、NE、GT、LT、GE、LE结果为真:输出0FFH、0FFFFH全1结果为假:全0例:PORTEQU2MOVBX,PORTLT5;MOVBX,0FFFFHMOVCX,((PORTLT5)AND100)OR((PORTGE5)AND200);若PORTLT5PORTLT5=FFFFHFFFFHAND100=100PORTGE5=00000000HAND200=0100OR0=100汇编后MOVCX,100编辑ppt7三、关系运算符:编辑ppt7四、数值返回运算符:OFFSET、SEG、TYPE、LENGTH、SIZE1.OFFSET返回变量或标号的偏移地址值2.SEG返回变量或标号的段基地址值例:MOVSI,OFFSETFIRST例:MOVAX,SEGFIRSTMOVDS,AX

MOVDS,SEGFIRST×3.TYPE变量:返回类型属性①DB1②DW2③DD4(字节数)TYPE标号:返回距离属性①NEAR-1②FAR-2例4-9编辑ppt8四、数值返回运算符:编辑ppt84.LENGTH变量当变量定义使用DUP时,返回变量所包含的单元数

例nDUP():返回n

其它:返回15.SIZE=LENGTH*TYPE例:FIRSTDW1,2,3,4MDW100DUP(?)MOVAL,TYPEFIRST;MOVAL,2MOVAL,LENGTHFIRST;MOVAL,1MOVAL,SIZEFIRST;MOVAL,2MOVAL,TYPEM;MOVAL,2MOVAL,LENGTHM;MOVAL,100MOVAL,SIZEFIRST;MOVAL,200编辑ppt94.LENGTH变量编辑ppt9五、修改属性运算符:段操作符、PTR、THIS、HIGH、LOW、SHORT1、段操作符:例:MOVAX,ES:[BX]ES--段超越前缀2、PTR:格式:类型/距离PTR变量/标号变量:BYTE,WORD标号:NEAR,FAR例1:AREA1DB15H,23HAREA2DW1234HMOVAL,AREA1;√AL=15HMOVAX,AREA1;×应为:MOVAX,WORDPTRAREA1MOVBL,BYTEPTRAREA2;BL=34H编辑ppt10五、修改属性运算符:编辑ppt10例2:MOVBYTEPTR[BX],10H;[BX]←10HMOVWORDPTR[BX],10H;[BX]←0010H例3:JMPFARPTRAGAIN;实现段间转移.AGAIN-标号3、THIS

格式:变量/标号EQUTHIS类型/距离功能:将类型/距离属性赋予变量/标号,且该变量/标号的地址与下一个存储单元相同例1:FIRSTEQUTHISBYTETABLEDW200DUP(?);使变量FIRST与TABLE的偏移地址相同,但FIRST为字节类型,TABLE为字类型例2:SPPEQUTHISFARMOVAX,0100H;即SPP:MOVAX,0100H编辑ppt11例2:MOVBYTEPTR[BX],10H;4、SHORTSHORT标号例:JMPSHORTL1;限制跳转的距离在-128~+127之间5、HIGH和LOW字节分离符

HIGH/LOW变量或标号HIGH分离出高位字节LOW分离出低位字节例:K1EQU1234HMOVAH,HIGHK1;MOVAH,12HMOVAL,LOWK1;MOVAL,34HMOVAH,HIGH1234H;×不能+立即数编辑ppt124、SHORT编辑ppt12六、其他运算符

1、()改变优先级次序表4-3例:MOVAL,X1ORX2ANDX3MOVAL,(X1ORX2)ANDX32、[]①用[]表达地址表达式例:MOVCL,[BX]MOVAX,[BX+2]②用[]表示多重变量的下标值例:M1DB10H,20H,30H,40HMOVAL,M1[3];MOVAL,40H编辑ppt13六、其他运算符编辑ppt13§4-3伪指令语句一、数据定义语句DBDW格式:变量名助记符操作数,操作数,……;注释变量名助记符nDUP(操作数,操作数……);注释功能:将操作数存入变量名指定的存储单元中,或者只分配存储空间不存入数据例1:A1DB0DHA2DW?

A3DB00H,01H,03HA5DB9DUP(?)A6DB8DUP(1,2,3);共3x8=24个单元A7DB‘Howareyou?’A8DW‘OK’

A9DW‘OVER’;

×编辑ppt14§4-3伪指令语句一、数据定义语句DBDW编辑p二、表达式赋值语句1、赋值语句EQU格式:符号名EQU操作数功能:给操作数(变量、标号、常数、表达式、指令)定义一个符号名在同一个程序中不允许重复定义例1:ABCEQU75XYZEQUABC+2;XYZEQUABC+2ABCEQU75×

A1EQU[BX]A2EQUADDPURGE语句可以解除赋值,使它在后面可以重新赋值。例2:PURGEABC编辑ppt15二、表达式赋值语句编辑ppt152、等号语句=功能:同EQU,但允许重复定义例1:X1=100X1=X1+100;X1=200X1EQU100X1EQU200;×编辑ppt162、等号语句=编辑ppt16例2:PORTEQU50H

IN_PORTDBPORT+1;IN_PORTDB51H

PORTDB50HIN_PORTDBPORT+1;×PORTDB50HIN_PORTDWPORT+1;将变量PORT+1的偏移地址,赋给字变量IN_PORT变量名符号名表达式编辑ppt17例2:变量名符号名表达式编辑ppt17三、段定义语句

1、段定义语句SEGMENT…ENDS格式:段名SEGMENT

;逻辑内容段名ENDS(上下段名必须相同)功能:将一个逻辑段定义成一个整体段名:逻辑段的标识符,不可省略,确定了逻辑段在存储器中的地址(段基地址)例:MOVAX,DATAMOVDS,AX

编辑ppt18三、段定义语句编辑ppt18堆栈段定义:段名SEGMENTSTACK(不可省略)

段名ENDS说明:①定位类型、组合类型、分类名一般情况下可省略②Data,Stack,ES段中,只能有伪指令③Code段中,可有指令和与指令相关的伪指令编辑ppt19堆栈段定义:编辑ppt192、段分配语句:ASSUME格式:ASSUMECS:段名,DS:段名,SS:段名,ES:段名功能:将存储器中的某几个逻辑段分别定义成代码段、数据段、堆栈段、附加段(指定某程序运行时,哪几个逻辑段有效。CS、DS段是必须的,SS、ES段看情况)注意:assume指令只指定某个段分配给哪个段寄存器,并将代码段的段基址自动装入CS中,而不能把其它段基址自动装入相应的段寄存器中,所以,在代码段的开始,要有一段初始化程序完成这一工作编辑ppt202、段分配语句:ASSUME编辑ppt20四、过程定义语句

段内调用段间格式:过程名PROC属性(距离属性(NEARFAR))

┇;过程内容

RETN过程名ENDP说明:RETN带参数返回,其中N为正偶数,表示从过程返回后,堆栈指针SP加上N过程内部至少有一条RET指令,也可以有多个,表示此过程具有多个返回出口。过程调用允许嵌套调用,递归调用嵌套调用:一个被调用的过程中又调用另一个过程递归调用:一个被调用的过程又调用自己

编辑ppt21四、过程定义语句五、程序开始、结束语句

1、ORG:设置位置指针,指定下面语句的起始偏移地址例:DATASEGMENT

ORG100HA1DB10H,20H,30H

;A1的偏移地址为0100H

ORG200HA2DW3031H,3233H

;A2的偏移地址为0200HDATAENDS

编辑ppt22五、程序开始、结束语句编辑ppt222、END格式:END标号名放在程序的末尾,CPU遇到END语句停止汇编,每段程序只能有一个END标号名是该程序中第一条可执行语句的标号名,可以缺省,若一个程序中,包含多个模块,则为主程序模块中的标号名称编辑ppt232、END编辑ppt23六、使用地址计数器的值‘$’来保存当前正在汇编的指令的偏移地址例:ABCDW1,2,$+4;若ABC的偏移地址为1000H,相当于ABCDW1,2,1004H编辑ppt24六、使用地址计数器的值‘$’来保存当前正在汇编的指令的偏移地完整的汇编语言编写的格式DATASEGMENTDA1DB‘thisisasampleprogram’DATAENDSSTACKSEGMENTSTACKST1DB100DUP(?)TOPEQULENGTHST1STACKENDSCODESEGMENTASSUMECS:CODE,

DS:DATA,

SS:STACKMAINPROCFARSTART:PUSHDS;返回DOS用SUBAX,AXPUSHAX编辑ppt25完整的汇编语言编写的格式编辑ppt25MOVAX,DATA;初始化DSMOVDS,AXMOVAX,STACK;初始化SSMOVSS,AXMOVSP,TOP;设栈底………RETMAINENDPCODEENDSENDSTART参见例4-29,友情提示:编程中用到的;,:等符号要用半角形式输入编辑ppt26MOVAX,DATA;初始化D好的程序特点:程序结构模块化,易读,易调试和维护执行速度快占用内存小编程基本步骤:分析问题绘制程序流程图分配存储空间及工作单元编程调试实际运行§4.4程序设计方法编辑ppt27好的程序特点:§4.4程序设计方法编辑ppt271、顺序程序设计

例:设计一个顺序程序实现两个双字数的加法,结果放在加数单元中被加数:变量first,四单元加数:变量second,四单元和:变量second寄存器间接寻址:SI,DI累加器AX

送被加数、加数地址低位字加高位字加送低位和送高位和编辑ppt281、顺序程序设计送被加数、加数地址低位字加高位字加送低位和送FIRSTDD12345678HSECONDDD22334455HMOVSI,

OFFSETFIRSTMOVDI,OFFSETSECONDMOVAX,[SI]ADDAX,[DI]MOV[DI],AXMOVAX,[SI+2]ADCAX,[DI+2]MOV[DI+2],AX编辑ppt29FIRSTDD12345678H编辑pp2、分支程序设计

①多分支例:x+1x≥1y=x+21>x≥0x+3x<0假设x放在AX里

CMPAX,1JGEP1CMPAX,0JGEP2ADDAX,3

JMPP3P1:ADDAX,1

JMPP3P2:ADDAX,2P3:MOV[2000H],AXAX≥1?NAX≥0?NAX+1AX+3AX+2YYAX→[2000H]编辑ppt302、分支程序设计AX≥1?NAX≥0?NAX+1AX+3A②跳转表实现多分支根据表内地址分支表地址=跳转表首地址+偏移地址例4-67有8个加工子程序,入口偏移地址分别为P1,P2,…,P8,编程实现检测键盘输入数字1~8,使系统分别转向8个加工子程序。用跳转表实现。….…P2高8位P2低8位P1高8位P1低8位BASEBASE+2开始取编号求偏移量求表地址分支到相应的分支程序编辑ppt31②跳转表实现多分支….…P2高8位P2低8位P1高8位P1BASEDWP1,P2,P3,P4,P5,P6,P7,P8KEYDB?MOVAH,1INT21H;从键盘输入字符,字符ASCII→ALANDAL,0FHDECALADDAL,AL;AL乘2MOVAH,0MOVBX,OFFSETBASEADDBX,AXJMPWORD

PTR[BX]编辑ppt32BASEDWP1,P2,P3,P4,P5,P6,例:p3子程序地址在cs:7800H开始,则BASE中第3个数据为7800H,地址DS:0004H,当键盘输入字符3→

AL=33H→AL=03H→AL=2→AL=2X2=4→AH=0→BX=0→BX=0+4=4→[BX]=[0004H]=7800H.程序转移至CS:7800H编辑ppt33例:p3子程序地址在cs:7800H开始,则BASE中第3个3、循环程序设计

循环次数不固定循环初始状态

循环体NY修改参数出口循环控制条件循环次数固定循环初始状态

循环体Y修改参数N循环控制条件编辑ppt343、循环程序设计循环次数不固定循环初始状态循环体NY修例1:题目同上,利用循环程序设计

MOVSI,OFFSETFIRSTMOVDI,OFFSETSECONDCLCCLDMOVCX,02HLI:LODSW;[DS:SI]→AX,SI+2→SIADCAX,[DI]STOSW;AX→[ES:DI],DI+2→DILOOPLI;先执行,后判断编辑ppt35例1:题目同上,利用循环程序设计编辑ppt35

例2:AX寄存器中有16位二进制数,编程统计其中1的个数,结果放到BL中方法一:MOVBL,0;计数值清0L1:ANDAX,AX;先判断,后执行JZSTOP;若AX=0,则不进入循环

SHLAX,1JNCL2INCBLL2:JMPL1STOP:……

编辑ppt36例2:AX寄存器中有16位二进制数,编程统计其中1的个数,方法二:MOVBL,0;计数值清0MOVCX,16L1:SHLAX,1JNCL2INCBLL2:LOOPL1

方法三:MOVBL,0MOVCX,16L1:ROLAX,1ADCBL,0LOOPL1编辑ppt37方法二:编辑ppt37多重循环

3点注意:多重循环的初始控制条件内循环可嵌套在外循环中,内可跳到外,外不得进入内循环不要回到初始条件,造成死循环编辑ppt38多重循环编辑ppt38

357819357189351789315789135789例4-72冒泡排序。使一个数组中的数据从小到大排列。分析:第一遍内循环N-1次,最大数像气泡一样升至数组尾第二遍内循环只要N-2次,找到次大数,依次类推外循环共需N-1遍

初始538791一3

58791二3587

91

三357

891四357891五357819第一遍内循环N-1次外循环N-1遍编辑ppt39例4-72冒泡排序。使一个数组中的数据从小到大排列。第一修改地址(BX+2)数i≤数i+1?两数位置交换回到检测起点i=0(BX)CX-1内循环CX=0?初始化:数组起始地址→BX外循环次数→DX内循环次数→CX置检测起点i=0(BX)Dx-1外循环DX=0?NNL2L1N编辑ppt40修改地址(BX+2)数i≤数i+1?两数位置交换回到检测起点DATASEGMENTBUFDWN,15,37,8600,0A768H,3412H,1256H,DW76HDATAENDSCODESEGMENTASSUMECS:CODE,DS:DATASTART:MOVAX,DATAMOVDS,AX

MOVBX,0;i=0MOVCX,BUF[BX];

N→CXDECCX;N-1,内循环次数L1:MOVDX,CX;外循环次数L2:ADDBX,2编辑ppt41DATASEGMENT编辑ppt41

MOVAX,

BUF[BX]CMPAX,BUF[BX+2]JBECONTIXCHGAX,BUF[BX+2]MOVBUF[BX],AXCONTI:LOOPL2

MOVCX,DXMOVBX,0;回到i=0,重新开始比较LOOPL1;CX-1:①内循环次数N-1,N-2;②外循环次数-1MOVAX,4C00HINT21HRETCODEENDSENDSTART

编辑ppt42MOVAX,BUF[BX]四、子程序结构子程序说明名称、功能存储单元和寄存器入口和出口有否调用其它子程序主程序调用子程序注意:堆栈保护现场参数传递寄存器存储器堆栈编辑ppt43四、子程序结构编辑ppt43例4-30:过程调用,实现内存中N个BCD码数据相加(完整程序)

DATASEGMENT

FIRSTDB22H,33H,44H,55H;加数1

SECONDDB55H,66H,77H,88H;加数2

SUMDB20DUP(?);定义存放结果单元

DATAENDSSTACKSEGMENTSTACK

STADB20DUP(?);设置堆栈长度为20个字节

TOPEQULENGTHSTASTACKENDS编辑ppt44例4-30:过程调用,实现内存中N个BCD码数据相加(完整程CODESEGMENTASSUMECS:CODE,DS:DATA,SS:STACK,ES:DATAMAINPROCFARSTART:

MOVAX,STACK;将堆栈段段地址→SSMOVSS,AX

MOVAX,TOP;将堆栈指针指向栈底MOVSP,AXPUSHDS

;使得程序执行完了,能返回DOSXORAX,AXPUSHAXMOVAX,DATA

MOVDS,AX;MOVDS,DATA×,初始化MOVES,AX;将数据段段地址→DS、ES

MOVSI,OFFSETFIRSTMOVBX,OFFSETSECOND

MOVDI,OFFSETSUM

编辑ppt45CODESEGMENT编辑ppt45MOVCX,04CLDCLCADBCD:CALLAAMLOOPADBCDRET;返回DOSMAINENDPAAMPROCNEAR

LODSB;[DS:SI]→ALSI+1→SI

ADCAL,[BX]

DAASTOSB;AL→[ES:DI]DI+1→DIINCBXRETAAMENDPCODEENDSENDSTART

编辑ppt46MOVCX,04编辑;子程序入口参数:SI,BX出口参数:DI参数传递:存储器编辑ppt47;子程序入口参数:SI,BX编辑ppt47§4.5DOS系统功能调用DiskOperationSystem磁盘操作系统

一、DOS常用的软中断命令DOS具有对I/O设备管理及磁盘与文件管理功能,一部分固化在系统的ROM中一部分在系统启动时调入内存,通过软件中断来调用中断指令:INTn表4-6DOS常用的软中断命令入口、出口参数编辑ppt48§4.5DOS系统功能调用DiskOperation二、DOS系统功能调用

INT21H附录FAH=功能号每个子程序对应一个功能号(相应的入口号),格式如下:①功能号→AH②入口参数→指定寄存器③INT21H④根据出口参数分析功能调用执行情况1.DOS键盘功能调用表4-7①键入单字符AH=1、8、6、7

例:从键盘输入字符并显示MOVAH,1INT21H;检查,若为Break键,自动调用INT23H编辑ppt49二、DOS系统功能调用INT21H编辑ppt49②键入字符串

功能号:AH=0AH入口参数:DS:DX=缓冲区首址例4-52:开辟一个缓冲区,从键盘输入一个字符串,将输入的字符数→CL寄存器,并将指针指向字符串的第一个字符。

BUFFDB100;定义存放100字节的缓冲区

DB?;系统填入实际输入字符字节数

DB100DUP(?);存放输入字符的ASCII码

MOVDX,OFFSETBUFFMOVAH,0AHINT21HMOVBX,DXMOVCL,[BX+1];取输入字符数→CLADDDX,2;将指针指向第一个字符编辑ppt50②键入字符串编辑ppt502、DOS显示功能调用表4-8①单字符操作例:MOVDL,‘$’

MOVAH,2INT21H;调用结果,屏幕上在光标处显示‘$’②字符串操作

AH=9的INT21H,注意串必须以‘$’结束例4-55:在屏幕上显示‘HOWDOYOUDO?’字符串,且回车、换行。

DATASEGMENT

MESDB‘HOWDOYOUDO?’,0DH,0AH,‘$’

;0DH(回车),0AH(换行)

DATAENDS

编辑ppt512、DOS显示功能调用编辑ppt51CODESEGMENTASSUMECS:CODE,DS:DATAMAIN:PUSHDSXORAX,AXPUSHAXMOVAX,DATAMOVDS,AXMOVAH,9MOVDX,OFFSETMESINT21HRETCODEENDSENDSTART字符码功能08H0AH0CH0DH退格换行换页回车编辑ppt52CODESEGMENT字符码功能08H退格编辑ppt52

3、返回操作系统

4CH功能调用:能够结束当前正在执行的程序,返回DOS系统

MOVAH,4CHINT21H编辑ppt53编辑ppt53§4.6上机实验参见课本及实验指导书实验一:两个多位十进制数相减的实验实验二:排序实验要求:从首地址偏移地址为1000H的内存区域开始存放10个无符号字节数,设计程序将这些数从大到小排序,并将排序前后次序分别显示在屏幕上。参见课本P181及实验指导书实验十三

MOVBX,0 MOVCX,N-1;L1:MOVDX,CXL2:MOVAX,BUF[BX]CMPAX,BUF[BX+1] JAECONTI XCHGAX,BUF[BX+1] MOVBUF[BX],AXADDBX,1CONTI:LOOPL2 MOVCX,DX MOVBX,0LOOPL1

调用显示子程序,参见P177

编辑ppt54§4.6上机实验编辑ppt54§4.7程序举例一、查表例4-64二、代码转换类16位二进制→ASCⅡ码(例4-69)无符号二进制→组合BCD码(例4-78)

ASCII码→有符号二进制(例4-79)

ASCⅡ码显示三、算术运算类加减乘除(二进制,BCD码)编辑ppt55§4.7程序举例一、查表例4例4-64内存中TABLE开始存放0~9的平方值,通过人机对话,当任给定一个数X(0~9),查表得X的平方值,放在AL中。TABLEDB0,1,4,9,16,25,36,49,64,81BUFDB‘Pleaseinputonenumber(0~9):’,0DH,0AH,‘$’MOVDX,OFFSETBUFMOVAH,9INT21H;显示字符串MOVAH,1INT21H;输入字符ANDAL,0FH;ASCII→BINMOVBX,OFFSETTABLE;查表XLATHLT编辑ppt56例4-64内存中TABLE开始存放0~9的平方值,通过例4-69将BX中的16进制数转换为ASCII码,存放到BUF开始的内存单元中去,并在屏幕显示数值转换表:入口参数:BX出口参数:BUF开始的内存单元中,SI指示。16进制数ASCII131H232H333H434H…939H…A41HB42H…编辑ppt57例4-69将BX中的16进制数转换为ASCII码,存放LEASI,BUFMOVCH,4;循环4次NEXT:MOVCL,4ROLBX,CL;最高位移到右边

MOVAL,BL;一位十六进制数转换成ASCII码ANDAL,0FHADDAL,30H

CMPAL,3AHJLSTOREADDAL,7STORE:MOV[SI],ALMOVAH,2MOVDL,ALINT21H;显示325F25F3F30333INCSIDECCHJNZNEXTHLT编辑ppt58LEASI,BUF325F25F例4-78:将AX中的无符号16位二进制数转换为4位压缩型BCD码算法一:千位数:无符号16位二进制数/1000的商,得余数1百位数:余数1/100的商,得余数2十位数:余数2/10的商,得余数3个位数:余数3算法二:把要转换的数分别减去相应的最高次幂,直至不够减,此时减的次数即是相应的位编辑ppt59例4-78:将AX中的无符号16位二进制数转换为4位压缩型B7865700010007865-余数186510080065-余数2865601065-余数3程序中,7865D=1EB9H1000D=3E8H865D=361H1EB9H/3E8H=7H….361H361H/64H=8H…41H41H/0AH=6H…5H编辑ppt60786510007865-余数186510080065复习除法:

16位/8位→商AL,余AH(AX)(源操作数)

32位/16位→商AX,余DX(DX,AX)(源操作数)若计算16位/16位,8位/8位,需将被除数扩展程序:入口参数:AX=16位二进制数出口参数:AX=4位压缩型BCD码(CF=0时)

占用资源:CX,DX千位百位

千位百位十位

千位百位十位个位

千位每次所得商,依次移入DXDX①DX②DX③DX④左移4位编辑ppt61复习除法:千位百位千位百位十位千位百位十位个

B2TOBCDPROCFARCMPAX,9999;AX>9999,则置CF=1,JBETRAN;不转换 STC JMPEXITTRAN:PUSHCX;保护现场 PUSHDX XORDX,DX;∵32位/16位,需DXMOVCX,1000;求千位数

DIVCX;商在AX,余数1在DX XCHGAX,DX;余数1在AX,千位数(商)在DX最低4位,DX=0007H编辑ppt62B2TOBCDPROCFAR编辑ppt62 MOVCL,4;DX左移4位,低位添 SHLDX,CL;四个0,DX=0070H MOVCL,100;求百位数

DIVCL;商在AL,余数2在AH ADDDL,AL;百位数入DX,DX=0078H

MOVCL,4;

DX左移4位,DX=0780H SHLDX,CL XCHGAH,AL;余数2在ALANDAX,00FFH;AH=0 MOVCL,10;求十位数DIVCL

;商在AL,余数3在AH

编辑ppt63 MOVCL,4;DX左移4位

ADDDL,AL;DL=86H MOVCL,4 SHLDX,CL

;DX=7860H ADDDL,AH

;DX=7865H MOVAX,DX

;转换后的数入AX POPDX POPCXEXIT:RETB2TOBCDENDP作业:将AH中存放的无符号8位二进制数转换为3位压缩型BCD码编辑ppt64 ADDDL,AL;DL=86H编辑pp例4-79将十进制数的ASCII码转换成有符号二进制数,结果存入AX①字符串转换:数字字符(30H~39H)对应一位十进制数(0~9)例:十进制数a0a1a2转换成十六进制数:十六进制数=a0x100+a1x10+a2=(a0x10+a1)x10+a2②符号字符串检测字符串的正负,若为正,按①的算法转换即可若为负,将标识符MINU置1,转换结束还需将AX中的数取补编辑ppt65例4-79将十进制数的ASCII码转换成有符号二进制数,③字符串是否合法?(3点要求)⒈字符串字符个数<6,∵AX为16位,216=65536(5位十进制数加1个符号位)⒉字符在0~9之间⒊转换完的结果要能存入AX中,必须结果-32768~+32767④调用的子程序:CHE乘10子程序编辑ppt66编辑ppt66查符号X10CHE置标志位DX清零是负数?修改地址字符串首地址给SI

Y读下一位数修改地址累加到DX字符串转换完?是负数?取补Y编辑ppt67查符号X10CHE置标志位DX清零是负数?修改地址字符串入口:DX—字符串地址偏移量,CX—字符个数出口:CF=0,AX=二进制数;CF=1,则字符串非法,AX=0使用的寄存器:BX,SIAS2BINPROCFARPUSHCXPUSHDXPUSHSIMOVSI,DX

CMPCX,6JAERRCLD

MOVAL,[SI];查符号CMPAL,’-’JNECHKMOVMINU,1JMPDECSCHK:CMPAL,’+’JNECLRDDECS:DECCXINCSI编辑ppt68入口:DX—字符串地址偏移量,CX—字符个数编辑pptCLRD:SUBDX,DXNEXT:CALLCHE;调用乘10子程序

JCERRLODSB

CMPAL,’0’JBERRCMPAL,’9’JAERRANDAX,000FHADDDX,AX

JCERRLOOPNEXTMOVAX,DX

CMPMINU,1;负数求补JNEEXITNEGAXJMPEXITERR:STC;字符串为非法,将CF置1,AX=0MOVAX,0编辑ppt69CLRD:SUBDX,DX编辑pptEXIT:POPSIPOPDXPOPCXRETAS2BINENDPCHEPROCNEAR;乘10子程序PUSHBXMOVBX,DXSHLDX,1SHLDX,1ADDDX,BXSHLDX,1POPBXRETCHEENDP编辑ppt70EXIT:POPSI编辑ppt70例:两个多字节无符号数乘法子程序(参考例4-29,P142)

高16位低16位×高16位低16位DX0AX0被乘数低16位X低16位DX1AX1被乘数高16位X低16位DX2AX2被乘数低16位X高16位+DX3AX3

被乘数高16位X高16位[BX+6][BX+4][BX+2][BX]

编辑ppt71例:两个多字节无符号数乘法子程序编辑ppt71DATASEGMENTFIRSTDW3213H,4746HSECONDDW2278H,6452HSUMDW4DUP(?)DATAENDSSTACKSEGMENTSTACKSTADB100DUP(?);定义一个100字节的堆栈,TOPLABELWORD;TOP为栈底的名,类型为字STACKENDS编辑ppt72DATASEGMENT编辑ppt72CODESEGMENTASSUMECS:CODE,DS:DATA,SS:STACKMAINPROCFARSTART:MOVAX,STACKMOVSS,AX

MOVSP,OFFSETTOPPUSHDSXORAX,AXPUSHAXMOVAX,DATAMOVDS,AX

编辑ppt73CODESEGMENT编辑ppt7MOVSI,OFFSETFIRSTMOVDI,OFFSETSECONDMOVBX,OFFSETSUMCALLDWMULT;调用乘法子程序RETMAINENDP

CODEENDS(若题意要求用段间调用来实现)DCODESEGMENTASSUMECS:DCODE,DS:DATA,SS:STACKDWMULTPROCFAR

PUSHAXPUSHDX编辑ppt74MOVSI,OFFSETFIRST编MOVAX,[SI];低16位X低16位MULWORDPTR[DI]MOV[BX],AXMOV[BX+2],DX

MOVAX,[SI+2]MULWORDPTR[DI];高16位X乘数低16位MOV[BX+4],DXCLCADD[BX+2],AXADC[BX+4],0CLC编辑ppt75MOVAX,[SI]MOVAX,[SI];低16位X乘数高16位MULWORDPTR[DI+2]ADD[BX+2],AXADC[BX+4],DXMOVWORDPTR[BX+6],0ADCWORDPTR[BX+6],0CLCMOVAX,[SI+2];高16位X乘数高16位MULWORDPTR[DI+2]ADD[BX+4],AXADC[BX+6],DX编辑ppt76编辑ppt76

POPDXPOPAXRETDWWULTENDPDCODEENDSENDSTART

高16位低16位×16位DX0AX0低16位X16位+DX1AX1

高16位X16位[BX+4][BX+2][BX]

;子程序入口:SI、DI指示的内存单元,出口:BX指示的内存单元,使用寄存器:AX、DX编辑ppt77POPDX;子程序入口:SI、DI指示的内谢谢大家!作业:4-2,3,5,6,11,13,15,16编辑ppt78谢谢大家!作业:4-2,3,5,6,11,13,15,16编第四章:宏汇编语言程序设计汇编语言程序格式MASM中的表达式伪指令语句DOS系统功能调用程序设计方法程序举例编辑ppt79第四章:宏汇编语言程序设计汇编语言程序格式编辑ppt1§4.1汇编语言程序格式汇编语言机器语言的符号表示,面向机器的语言汇编语言的特点:直接控制目标代码,可对输入输出设备进行控制,实时性好;编程效率高,节省内存,运行速度快。源程序1.asm1.obj1.exe8086常用的汇编程序:宏汇编程序MASM一、指令性语句:生成机器代码,由CPU来执行格式:标号:指令助记符操作数,操作数;注释

字母开头,最长31个字符汇编链接编辑ppt80§4.1汇编语言程序格式汇编语言机器语言的符号二、伪指令语句:只提供汇编信息功能:变量定义、存储区分配、段定义、段分配、指示程序开始、结束格式:名字伪指令助记符操作数,操作数;注释

变量名、段名、过程名、符号名(名字后不允许有“:”)三、数据项汇编语言中的操作数:常数、寄存器、存储器、变量、标号和表达式编辑ppt81二、伪指令语句:编辑ppt31、常数

00110101B026H123D‘howareyou?’2、变量

是内存中的一个数据区。在程序中作为操作数使用。变量名又称符号地址,表示该数据项中第一项所在的地址。

和常数区别:变量值可以改变。

三个属性:①段地址②段内偏移地址③类型属性(BYTE,WORD,DWORD)3、标号

可执行指令语句的地址的符号表示。可作为转移指令的目的操作数。三个属性:①段地址②段内偏移地址③类型属性(NEAR,FAR)

编辑ppt821、常数

00110101B026H123D‘§4.2表达式汇编后的表达式为一个值组成:运算对象+运算符,运算对象与结果都是整数运算对象:常数、变量、标号分为数字表达式和地址表达式两种一、算术运算符:+,-,*,/,MOD,SHL,SHR所有算术运算符都可以对数据进行运算例MOVAX,5+3;(AX)=8MOVAX,(9MOD2);(AX)=1MOVAX,9/2;(AX)=42.对地址运算,只能是+,-编辑ppt83§4.2表达式汇编后的表达式为一个值编辑ppt5例2:ARRAYDB1,2,3,4TRYDB20MOVAX,(TRY-ARRAY);汇编后MOVAX,4例3:FIRSTDB1,2,3MOVAX,FIRST+2二、逻辑运算符:AND,OR,NOT,XOR只能用于数字表达式中例:PORTEQU90HANDDL,PORTAND0FEH;汇编后ANDDL,90H

前AND—指令助记符,在程序执行时运算后AND—运算符,在汇编时计算编辑ppt84例2:ARRAYDB1,2,3,4编辑ppt6三、关系运算符:EQ、NE、GT、LT、GE、LE结果为真:输出0FFH、0FFFFH全1结果为假:全0例:PORTEQU2MOVBX,PORTLT5;MOVBX,0FFFFHMOVCX,((PORTLT5)AND100)OR((PORTGE5)AND200);若PORTLT5PORTLT5=FFFFHFFFFHAND100=100PORTGE5=00000000HAND200=0100OR0=100汇编后MOVCX,100编辑ppt85三、关系运算符:编辑ppt7四、数值返回运算符:OFFSET、SEG、TYPE、LENGTH、SIZE1.OFFSET返回变量或标号的偏移地址值2.SEG返回变量或标号的段基地址值例:MOVSI,OFFSETFIRST例:MOVAX,SEGFIRSTMOVDS,AX

MOVDS,SEGFIRST×3.TYPE变量:返回类型属性①DB1②DW2③DD4(字节数)TYPE标号:返回距离属性①NEAR-1②FAR-2例4-9编辑ppt86四、数值返回运算符:编辑ppt84.LENGTH变量当变量定义使用DUP时,返回变量所包含的单元数

例nDUP():返回n

其它:返回15.SIZE=LENGTH*TYPE例:FIRSTDW1,2,3,4MDW100DUP(?)MOVAL,TYPEFIRST;MOVAL,2MOVAL,LENGTHFIRST;MOVAL,1MOVAL,SIZEFIRST;MOVAL,2MOVAL,TYPEM;MOVAL,2MOVAL,LENGT

温馨提示

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

评论

0/150

提交评论