最新微机4-12上第2章已学汇编PPT课件.ppt

上传人:豆**** 文档编号:59521381 上传时间:2022-11-10 格式:PPT 页数:170 大小:2.92MB
返回 下载 相关 举报
最新微机4-12上第2章已学汇编PPT课件.ppt_第1页
第1页 / 共170页
最新微机4-12上第2章已学汇编PPT课件.ppt_第2页
第2页 / 共170页
点击查看更多>>
资源描述

《最新微机4-12上第2章已学汇编PPT课件.ppt》由会员分享,可在线阅读,更多相关《最新微机4-12上第2章已学汇编PPT课件.ppt(170页珍藏版)》请在taowenge.com淘文阁网|工程机械CAD图纸|机械工程制图|CAD装配图下载|SolidWorks_CaTia_CAD_UG_PROE_设计图分享下载上搜索。

1、微机微机4-12上第上第2章已学汇编章已学汇编2.3汇编语言汇编语言汇编语言的特点汇编语言的特点汇汇编编语语言言是是一一种种以以处处理理器器指指令令系系统统为为基基础础的的低低级级程程序序设设计计语言,它采用助记符表达指令操作码语言,它采用助记符表达指令操作码利利用用汇汇编编语语言言编编写写程程序序的的主主要要优优点点是是可可以以直直接接、有有效效地地控控制制计计算算机机硬硬件件,因因而而容容易易创创建建代代码码序序列列短短小小、运运行行快快速速的的可执行程序可执行程序在在有有些些应应用用领领域域,汇汇编编语语言言的的作作用用是是不不容容置置疑疑和和无无可可替替代代的的汇编程序设计的过程是与其

2、他高级语言程序设计大致相同汇编程序设计的过程是与其他高级语言程序设计大致相同汇编语言源程序格式汇编语言源程序格式-操作数操作数操作数操作数常数、数值表达式、寄存器、标号常数、数值表达式、寄存器、标号、变量等、变量等数值表达式数值表达式一般是指由一般是指由运算符运算符连接的各种常数所构成的表达式连接的各种常数所构成的表达式汇汇编编程程序序在在汇汇编编过过程程中中计计算算表表达达式式,最最终终得得到到一一个个确确定定的的数值,所以也是常数数值,所以也是常数常用的常用的运算符运算符是加减乘除(是加减乘除(*/)例:例:movax,3*4+5;等价于;等价于movax,17汇编语言源程序格式汇编语言源

3、程序格式-操作数操作数操作数操作数常数、寄存器、标号常数、寄存器、标号、数值表达式、变量等、数值表达式、变量等常数常数汇编时已确定的数据汇编时已确定的数据如硬指令中立即数如硬指令中立即数二进制数二进制数如如MOVAL,10110101B十进制常数十进制常数如如MOVAL,181十十六六进进制制数数常常数数以以字字母母开开头头的的十十六六进进制制数数前前加加“0”。例例:MOVAL,0B5H字符和字符串常数字符和字符串常数例例:MOVAX,AB;AX4142hMOVAX,1;AX31h用用单单引引号号括括起起来来的的单单个个字字符符或或多多个个字字符符,其其数数值值是是每每个个字字符符对对应应的

4、的ASCII码的值码的值.例如:例如:d=64H,AB=4142H符符号号常常数数用用符符号号名名表表示示一一个个常常数数,可可以以提提高高程程序序的的可可读读性性,同同时时更更具具有通用性有通用性符号定义伪指令格式符号定义伪指令格式等价等价EQU伪指令伪指令符号名符号名 EQU EQU 表达式表达式例:XY EQU 5等号等号=伪指令伪指令符号名符号名=表达式表达式例:XY=5例例:XY EQU5MOVAH,XY;等价于等价于MOVAH,5二二.伪指令伪指令1.符号符号(常量常量)定义伪指令定义伪指令EQU符号常量使用符号名表达一个数值符号常量使用符号名表达一个数值格式格式符号名符号名EQU

5、表达式表达式例例XEQU72.变量定义伪指令(变量定义伪指令(定义数据伪指令定义数据伪指令)变量定义伪指令变量定义伪指令为为变变量量申申请请固固定定长长度度的的存存储储空空间间,同同时时将将相相应应存存储储单单元元初初始始化化(参参数数为为?则则不不初始化)。格式为:初始化)。格式为:变量名变量名 DB/DW/DD/DQ 参数参数1 1,参数,参数2 2,DB(或或BYTE)定义字节定义字节 其后每个参数占其后每个参数占1 1个字节个字节存储单元存储单元DW(或或WORD)定定义义字字 其其后后每每个个参参数数占占2 2个个字字节节(先先低低字字节节后后高高字字节节)存存储单元储单元DD(或或

6、DWORD)定义双字定义双字 其后每个参数占其后每个参数占4 4个字节个字节存储单元存储单元DQ(或或QWORD)定义定义4 4个字个字 其后每个参数占其后每个参数占8 8个字节个字节存储单元存储单元多个存储单元如果初值相同,可以用复制操作符多个存储单元如果初值相同,可以用复制操作符DUP进行定义:进行定义:重复次数重复次数DUP(重复参数重复参数)变变量量实实质质指指内内存存单单元元的的数数据据,变变量量需需要要事事先先定定义义才才能能使使用用.定定义义后后的的变变量量可可用用变量名等引用其中的数据,即变量的数值变量名等引用其中的数据,即变量的数值例:例:alphabyte30h,2DUP(

7、55H),34h,?,?movcx,alpha;cx5530hmovbx,offsetalphamoval,bx+3;al34h 变量定义伪指令最常使用变量定义伪指令最常使用字节变量定义实例字节变量定义实例;数据段;数据段Xdb61h,0fbhdb2dup(64h),?YdbABC应用应用moval,XdecX+1movY,alASCII a=61h A=41h B=42h C=43hASCII a=61h A=41h B=42h C=43h;此处;此处X表示它的第表示它的第1个数据,故个数据,故AL61h;对;对X为始的第为始的第2个数据减个数据减1,故为,故为0fah;Y=al=61h,现

8、在现在Y这个字符串成为这个字符串成为aBC实例实例程序如下程序如下countdb80h,B,?maxintequ04hnumberdwmaxintarraydbmaxintdup(3)movcx,countdecbyteptrarraymovbx,offsetnumbermovah,bx+2moval,bx-2hlt问问:程序执行后程序执行后ax=?cx=?存储单元存储单元33-1=2array0004Hnumber-B=42H80Hcount答案答案:cx=4280hah=2al=42h字变量定义实例字变量定义实例;数据段;数据段countdw8000h,?,ABmaxintequ64hnu

9、mberdwmaxintarraydwmaxintdup(0)ASCII A=41h B=42h ASCII A=41h B=42h ;数据段;数据段字变量和字常量的定义:字变量和字常量的定义:WNUMEQU5678H;定义定义WNUM为常量为常量COUNTDW20H;定定义义COUNT变变量量,假假设设在在数数据据段段的的偏偏移移地地址为址为0010H;代码段代码段字变量和字常量的应用:字变量和字常量的应用:MOVAX,BX+SI+WNUM等价于等价于MOVAX,BX+SI+5678HMOVAX,COUNT等价于等价于MOVAX,0010H;AX0020HMOVAX,SI+COUNT等价于等

10、价于MOVAX,SI+0010HLEABX,COUNT等价于等价于LEABX,0010H;BX0010HMOVBX,OFFSETCOUNT等价于等价于MOVBX,0010H;BX0010H字变量和字常量字变量和字常量实例实例3.宏(宏(Macro)命令伪指令)命令伪指令为为简简化化程程序序编编制制,对对多多次次使使用用的的程程序序,既既可可用用子子程程序序也也可可用宏指令、宏汇编实现用宏指令、宏汇编实现宏定义宏定义宏是具有宏命令名的一段汇编语句序列宏是具有宏命令名的一段汇编语句序列宏命令名宏命令名MACRO形参数形参数1,参数,参数2,;宏定义体(硬指令、伪指令);宏定义体(硬指令、伪指令)E

11、NDM宏调用宏调用宏命令名宏命令名实参数实参数1,参数,参数2,宏宏需需要要先先定定义义,然然后后才才可可在在程程序序中中宏宏调调用用,形形式式上上类类似似其其他他指指令令,常常称称其为其为宏指令宏指令宏宏指指令令实实际际上上是是一一段段代代码码序序列列的的缩缩写写。在在汇汇编编时时,宏宏指指令令被被汇汇编编程程序序用用对应的代码序列替代,这就是对应的代码序列替代,这就是宏展开宏展开因为是在汇编过程中实现的因为是在汇编过程中实现的宏展开宏展开,所以常称为,所以常称为宏汇编宏汇编宏命令伪指令实例:宏命令伪指令实例:*子程序设计子程序设计;主程序;主程序moval,datacalldpchar;子

12、程序;子程序AL左移左移4位位dpchar procmovcl,4salal,clretdpchar endp*宏调用宏调用moval,datadpchar;宏定义:;宏定义:AL左移左移4位位dpchar macromovcl,4salal,clendmdpchar macro;宏定义;宏定义movcl,4salal,cl endm .model small .stack .code .startupmoval,datadpchar ;宏调用;宏调用.exit 0end宏与子程序的比较宏与子程序的比较比较比较仅仅是是源源程程序序级级的的简简化化:宏宏调调用用在在汇汇编编时时进进行行程程序序语

13、语句句的的展展开开,不不需需要要返返回回;不不减减小小目目标标程程序序,执执行行速速度没有改变度没有改变还还是是目目标标程程序序级级的的简简化化:子子程程序序调调用用在在执执行行时时由由CALLCALL指指令令转转向向、RETRET指指令令返返回回;形形成成的的目目标标代代码码较较短短,执行速度减慢执行速度减慢宏宏子程序子程序三三.汇编语言的运算符汇编语言的运算符变量和标号的属性变量和标号的属性变变量量和和标标号号具具有有逻逻辑辑地地址址和和类类型型属属性性,汇汇编编程程序序提提供供有有关关的的操操作符,以便获取这些属性值作符,以便获取这些属性值变量例变量例sumdb02hmoval,sum标

14、号标号例例done:moval,02hJmpdone逻辑地址属性逻辑地址属性取值运算符取值运算符SEG和和OFFSET变量和标号对应存储单元的逻辑地址变量和标号对应存储单元的逻辑地址逻辑地址包含逻辑地址包含:段地址和偏移地址段地址和偏移地址例:例:movax,offsetsum类型属性类型属性属性运算符属性运算符PTR变变量量名名的的类类型型可可以以是是BYTE(字字节节)、WORD(字字)和和DWORD(双双字)等;字)等;标标号号、段段名名、子子程程序序名名的的类类型型可可以以是是NEAR(近近)和和FAR(远远),分分别别表示段内或段间调用表示段内或段间调用例:例:decwordptrs

15、um取值运算符取值运算符SEG和和OFFSET取得名字或标号的段地址和偏移地址取得名字或标号的段地址和偏移地址OFFSET名字名字/标号标号返回名字或标号的偏移地址返回名字或标号的偏移地址例:例:movax,offsetalphaSEG名字名字/标号标号返回名字或标号的段地址返回名字或标号的段地址例:例:Alpha db30h,33hmovbx,offsetalphamoval,bx+1movcx,bx;al33h;cx3330h属性运算符属性运算符PTR对名字或标号的类型属性进行设置对名字或标号的类型属性进行设置类型名类型名PTR名字名字/标号标号类类型型名名可可以以是是BYTE、WORD、

16、DWORD(依依次次表表示示字字节节、字字、双双字字)等等,或或者者是是NEAR、FAR(分分别别表表示示近近、远远)定定义义的类型的类型例:例:moval,byteptrvar;var是一个字节变量是一个字节变量jmpfarptrlabel;label是一个标号是一个标号decwordptrdiincbyteptrdi使用使用PTRPTR操作符,可以临时改变名字或标号的类型操作符,可以临时改变名字或标号的类型8088CPU的存储格式的存储格式-小端存储方式小端存储方式D7D0字节字节D15D0字字D31D0双字双字00006H78H00005H56H00004H12H00003H34H000

17、02H00001H00000H低地址低地址LSBMSB00002H00002H单元的内容为:单元的内容为:00002H=34H00002H=34H00002H“00002H“字字”单元的内容为:单元的内容为:00002H=1234H00002H=1234H00002H00002H号号“双字双字”单元的内容为:单元的内容为:00002H=78561234H00002H=78561234H多字节数据在存储器中占连续的多个存储单元多字节数据在存储器中占连续的多个存储单元存放存放:低字节存入低地址,高字节存入高地址:低字节存入低地址,高字节存入高地址表达表达:用低地址表示多字节数据占据的地址空间:用低

18、地址表示多字节数据占据的地址空间同一个存储器地址可以是字节单元地址、字单元同一个存储器地址可以是字节单元地址、字单元地址、双字单元地址等等地址、双字单元地址等等 设设设设DS=0DS=000002H“双字双字”单元单元MOVMOVEAXEAX,0002H,0002H00002H“字字”单元单元MOVMOVAXAX,0002H,0002H00002H单元单元MOVMOVAHAH,0002H,0002H高地址高地址存储单元存储单元存储单元存储单元D7D0存储器地址存储器地址存储器地址存储器地址四四.汇编语言源程序结构汇编语言源程序结构完整的汇编语言源程序由段组成完整的汇编语言源程序由段组成一一个个

19、汇汇编编语语言言源源程程序序可可以以包包含含若若干干个个代代码码段段、数数据据段段、附附加加段段或或堆堆栈栈段段,段段与与段段之之间间的的顺顺序序可可随随意排列意排列需需独独立立运运行行的的程程序序必必须须包包含含一一个个代代码码段段,并并指指示示程序执行的程序执行的起始点起始点,一个程序只有一个起始点,一个程序只有一个起始点所所有有的的硬硬指指令令语语句句必必须须位位于于某某一一个个代代码码段段内内,伪伪指令语句可根据需要位于任一段内指令语句可根据需要位于任一段内通常,程序还需要一个堆栈段通常,程序还需要一个堆栈段 源程序由语句序列构成汇汇编编语语言言翻翻译译器器(汇汇编编程程序序,如如MA

20、SM)对对源源程程序序有有严格格式要求严格格式要求,才能将之翻译成目的代码才能将之翻译成目的代码段寄存器及逻辑段分配段寄存器及逻辑段分配汇编语言源程序格式汇编语言源程序格式源程序分别用两种格式书写源程序分别用两种格式书写v第一种格式从第一种格式从MASM5.0开始支持开始支持简化段定义格式简化段定义格式v第二种格式第二种格式MASM5.0以前就具有以前就具有完整段定义格式完整段定义格式(一般了解一般了解)求较大值求较大值两无符号数两无符号数AX、BX的的较大值放入较大值放入wmax例例:程序功能程序功能简单简单,要求掌握要求掌握求较大值求较大值两无符号数两无符号数AX、BX的较大值放入的较大值

21、放入wmax汇汇编编语语言言程程序序实实例例wmaxdw 0cmpax,bx;比较;比较AX和和BXjncnext;若;若AXBX,转移,转移xchgax,bx;若;若AXBX,交换,交换next:movwmax,ax简化段定义格式简化段定义格式求较大值求较大值两无符号数两无符号数AX、BX的较大值放入的较大值放入wmax.modelsmall.data;定义数据段定义数据段wmaxdw 0.code;定义代码段定义代码段start:movax,data;程序起始点,建立程序起始点,建立DSmovds,axcmpax,bx;比较;比较AX和和BXjncnext;若;若AXBX,转移,转移xch

22、gax,bx;若;若AXBX,交换,交换next:movwmax,ax.exit0;程序正常执行结束程序正常执行结束endstart;汇编结束汇编结束程程程程序序序序数据数据数据数据定义定义定义定义汇汇编编语语言言程程序序实实例例stacksegmentstack;定义堆栈段定义堆栈段dw512dup(?);堆栈段有堆栈段有512字(字(1024字节)空间字节)空间stackends;堆栈段结束堆栈段结束datasegment;定义数据段定义数据段wmaxdw0dataendscodesegmentcode;定义代码段定义代码段assumecs:code,ds:data,ss:stacksta

23、rt:movax,data;建立建立DS段地址段地址movds,axcmpax,bx;比较;比较AX和和BXjncnext;若;若AXBX,转移,转移xchgax,bx;若;若AXBX,交换,交换next:movwmax,axmovax,4c00hint21h;利用功能调用返回利用功能调用返回DOScodeends;代码段结束代码段结束endstart;汇编结束,同时指明程序起始点汇编结束,同时指明程序起始点例:完整段定义格式完整段定义格式完整段定义格式程序例题程序例题stacksegmentstackdw512dup(?)stackendsdatasegment;数据定义(数据待填)数据定义

24、(数据待填)dataendscodesegmentcodeassumecs:code,ds:data,ss:stackstart:movax,datamovds,ax;主程序(指令待填)主程序(指令待填)movax,4c00hint21h;子程序(指令待填)子程序(指令待填)codeendsendstart完整段定义格式完整段定义格式 MASM5.x支持支持源程序格式源程序格式(一般了解一般了解)例题例题或者源程序格式或者源程序格式(重点掌握重点掌握).modelsmall ;定义程序的存储模式定义程序的存储模式.data;定义数据段定义数据段;在数据段定义数据在数据段定义数据.code;定义

25、代码段定义代码段start:movax,data;程序起始点,设置数据段段地址程序起始点,设置数据段段地址DSmovds,ax;主程序(指令待填)主程序(指令待填).exit0;程序结束点,返回程序结束点,返回DOS;子程序(指令待填)子程序(指令待填)endstart;汇编结束汇编结束温馨提示:温馨提示:可以可以无数据段无数据段常用常用简化段定义格式简化段定义格式 MASM6.x支持支持例题例题1.简化段定义格式简化段定义格式(1)源程序格式源程序格式数据段定义伪指令数据段定义伪指令.DATA创建一个数据段创建一个数据段代码段定义伪指令代码段定义伪指令.CODE创建一个代码段创建一个代码段堆

26、栈段由堆栈段由Windows维护,用户不必设置维护,用户不必设置程序开始执行的位置程序开始执行的位置应用一个标号(例如:应用一个标号(例如:START)汇编结束汇编结束END指令的参数指令的参数应用程序执行结束应用程序执行结束语句语句“EXIT0”将控制权交还操作系统将控制权交还操作系统提供给操作系统一个返回代码提供给操作系统一个返回代码通常用通常用0表示执行正确表示执行正确源程序汇编结束源程序汇编结束END语句语句执行结束执行结束汇编结束汇编结束.modelsmall;定义程序的存储模式定义程序的存储模式.data;定义数据段定义数据段.code;定义代码段定义代码段.exit0;程序结束点

27、,返回程序结束点,返回DOSend;汇编结束汇编结束(2)简化段定义格式伪指令简化段定义格式伪指令;主程序主程序mov al,04hmov al,04h;提供参数;提供参数ALALcall htoasccall htoasc;调用子程序;调用子程序 retp1:mov bl,0fh;retp1 retp1:mov bl,0fh;retp1为返回地址为返回地址hlthlt;子程序子程序:将:将ALAL低低4 4位的一位位的一位1616进制数转换成进制数转换成ASCIIASCII码码htoasc:htoasc:and al,0fhand al,0fh;只取;只取alal的低的低4 4位位or al

28、,30hor al,30h;alal高高4 4位变成位变成3 3cmp al,39hcmp al,39h;是;是0 09 9,还是,还是0Ah0Ah0Fh0Fhjc htendjc htendadd al,7add al,7;是;是0Ah0Ah0Fh0Fh,加上,加上7 7htend:htend:retret;子程序返回;子程序返回ASCII码码0=30h0=30h 9=39h 9=39h A=41h B=42h A=41h B=42h ACII码转换子程序调用程序码转换子程序调用程序.modelsmall;定义程序的存储模式定义程序的存储模式.code;定义代码段定义代码段start:mov

29、ax,data;程序起始点,建立程序起始点,建立DSmovds,axmov al,04hmov al,04h;提供参数;提供参数AL AL call call htoaschtoasc;调用子程序;调用子程序retp1:retp1:mov bl,0fh mov bl,0fh;retp1;retp1为返回地址为返回地址hlthlt.exit0;程序正常执行结束程序正常执行结束htoaschtoasc:;子程序子程序将将ALAL低低4 4位位转换转换成成ASCIIASCII码码and al,0fhand al,0fh;只取;只取alal的低的低4 4位位or al,30hor al,30h;ala

30、l高高4 4位变成位变成3 3cmp al,39hcmp al,39h;是;是0 09 9,还是,还是0Ah0Ah0Fh0Fhjc htendjc htendadd al,7add al,7;是;是0Ah0Ah0Fh0Fh,加上,加上7 7htend:htend:retret;子程序返回;子程序返回endstart;汇编结束汇编结束简化段定义格式简化段定义格式-例例1ACII码转换子程序调用程序码转换子程序调用程序无数据段无数据段主主主主程程程程序序序序子子子子程程程程序序序序编程实现将编程实现将sum开始的开始的8个无符号数的和放至个无符号数的和放至bpt开始的两个存储单元中开始的两个存储单

31、元中;数据段数据段sumdb8dup(2)bptdw?;存放最大值存放最大值;代码段代码段movmovcx,8cx,8movmovsi,offsetsumsi,offsetsum;存放存放存放存放无符号数的存储单元首地址赋给无符号数的存储单元首地址赋给sixorxorax,axax,ax;axax及进位及进位及进位及进位CFCF清零清零清零清零done:done:addaddal,sial,siadcadcah,0ah,0incincsisi;指向下一个指向下一个指向下一个指向下一个无符号数的存储单元地址无符号数的存储单元地址loopdoneloopdone;cx-1cx-100转向转向转向转

32、向donedonemovmovbx,offsetbptbx,offsetbpt;cx-1;cx-1=00(8个无符号数已求完和个无符号数已求完和)bxbxbptbpt偏移地址偏移地址偏移地址偏移地址movbx,axmovbx,ax;则将此和放至则将此和放至bpt存储单元存储单元hlthlt循环程序结构循环程序结构loop简化段定义格式简化段定义格式-例例2编程实现将编程实现将sum开始的开始的8个无符号数的和放至个无符号数的和放至bpt开始的两个存储单元中开始的两个存储单元中.modelsmall.data;定义数据段定义数据段sumdb8dup(2)bptdw?;存放最大值存放最大值.cod

33、e;定义代码段定义代码段start:movax,data;程序起始点,建立程序起始点,建立DSmovds,axmovmov cx,8cx,8movmov si,offsetsumsi,offsetsum;存放存放存放存放无符号数的存储单元首地址赋给无符号数的存储单元首地址赋给sixorxorax,axax,ax;ax;ax及进位及进位及进位及进位CFCF清零清零清零清零done:done:addadd al,sial,siadcadcah,0ah,0incincsisi;指向下一个指向下一个指向下一个指向下一个无符号数的存储单元地址无符号数的存储单元地址LoopdoneLoopdone;cx-

34、10;cx-10转向转向转向转向donedonemovmov bx,offsetbptbx,offsetbpt;cx-1=0;cx-1=0(8个无符号数已求完和个无符号数已求完和)bxbxbptbpt偏移地址偏移地址偏移地址偏移地址 movbx,axmovbx,ax;则将此和放至则将此和放至bpt存储单元存储单元hlthlt.exit0;程序正常执行结束程序正常执行结束endstart;汇编结束汇编结束程程程程序序序序数据数据数据数据定义定义定义定义2.4汇编语言程序设计汇编语言程序设计一一.汇编语言程序设计概述汇编语言程序设计概述汇编语言程序设计步骤汇编语言程序设计步骤从从实实际际问问题题抽

35、抽象象出出数数学学模模型型,确确定定数数学学模模型型算算法法(如如乘乘法法用用移移位位指令指令还是乘法指令还是乘法指令)画出画出程序流程图程序流程图编程思路,程序结构和相互之间关系编程思路,程序结构和相互之间关系方框方框:工作框:工作框 例:菱形:判断框菱形:判断框编程、调试编程、调试形成文件形成文件判断程序质量判断程序质量程序执行时间程序执行时间程序所占内存字节数程序所占内存字节数程序语句条数程序语句条数程序可读性程序可读性 结束结束 初始化初始化 循环体循环体 控制条件控制条件Y YN N二二.汇编语言程序设计的基本方法汇编语言程序设计的基本方法DOS功能调用功能调用汇编语言程序结构汇编语

36、言程序结构顺序程序设计顺序程序设计分支程序设计分支程序设计循环程序设计循环程序设计子程序设计子程序设计1.DOS功能调用(书功能调用(书105页)页)DOS操操作作系系统统含含很很多多I/O子子程程序序,这这些些子子程程序序已已编编号号,可可由由汇汇编编语语言言源源程程序序调调用用。系系统统功功能能调调用用是是程序设计的一个重要方面程序设计的一个重要方面两种功能调用两种功能调用高级功能调用高级功能调用(DOS功能调用功能调用)低级功能调用低级功能调用对对BIOS中的功能子程序的调用中的功能子程序的调用重点掌握重点掌握DOS功能调用功能调用:显示一个字符,显示一个字符,02H号功能调用号功能调用

37、显示一个字符串,显示一个字符串,09H号功能调用号功能调用中断中断中中断断(Interrupt)是是又又一一种种改改变变程程序序执执行行顺顺序序的的方方法法,分分为为硬中断硬中断外部设备外部设备中断请求信号中断请求信号INTR、NMI软中断软中断程序指令请求程序指令请求8088CPU支支持持256个个软软中中断断,每每个个中中断断用用一一个个编编号号(中中断断向量号)区别向量号)区别INT nINT n软中断调用指令软中断调用指令,产生产生n n号中断号中断n n为为8 8位立即数,表示中断向量号位立即数,表示中断向量号掌掌握握类类似似子子程程序序调调用用指指令令CALL的的中中断断调调用用指

38、指令令INT,进进而掌握而掌握系统功能调用系统功能调用例:例:int21h;产生产生21H号中断号中断中断向量号中断向量号0255高级高级DOS功能调用功能调用高级高级DOS功能调用步骤功能调用步骤AH系统功能系统功能调用号调用号(子程序号)(子程序号)指定寄存器中指定寄存器中设置入口参数设置入口参数用中断指令用中断指令INT21h执行功能调用执行功能调用根据出口参数分析功能调用执行情况根据出口参数分析功能调用执行情况01H号号DOS功能调用功能调用键盘输入键盘输入接收从键盘输入的一个字符并在显示器上显示该字符。接收从键盘输入的一个字符并在显示器上显示该字符。功能调用号:功能调用号:AH01H

39、入口参数:无入口参数:无功能调用:功能调用:INT21H出口参数:出口参数:AL=输入字符输入字符例:显示键盘输入的一个字符并送例:显示键盘输入的一个字符并送in-buff存储单元存储单元;在数据段定义要显示的字符在数据段定义要显示的字符in-buffdb?;在代码段编写程序在代码段编写程序movah,01h;设置功能调用号;设置功能调用号int21h;功能调用;功能调用movin-buff,al;缓存键盘输入字符;缓存键盘输入字符02H号号DOS功能调用功能调用显示一个字符显示一个字符功能调用号:功能调用号:AH02H入口参数:入口参数:DL欲显示字符的欲显示字符的ASCII码码功能调用:功

40、能调用:INT21H出口参数:无出口参数:无例:显示例:显示data中的一个字符中的一个字符;在数据段定义要显示的字符在数据段定义要显示的字符datadba;在代码段编写程序在代码段编写程序movah,02h;设置功能调用号;设置功能调用号movdl,a;设置入口参数;设置入口参数int21h;功能调用;功能调用09H号号DOS功能调用功能调用显示一个字符串显示一个字符串功能调用号:功能调用号:AH09H入口参数:入口参数:DS:DX欲显示字符串在内存中的首地址欲显示字符串在内存中的首地址(字符串以字符串以ASCII码形式保存,以码形式保存,以“$”结尾,结尾,$并不显示)并不显示)功能调用:

41、功能调用:INT21H出口参数:无出口参数:无例:例:显示字符串显示字符串“Pressanykeytocontiune”;在数据段定义要显示的字符串在数据段定义要显示的字符串msgkeydbPressanykeytocontiune,$;在代码段编写程序在代码段编写程序mov ah,9;设置功能调用号;设置功能调用号;设置入口参数设置入口参数DX字符串的偏移地址字符串的偏移地址mov dx,offsetmsgkeyint21h;功能调用;功能调用2.顺序程序设计顺序程序设计没没有有分分支支、循循环环等等转转移移指指令令的的程程序序,会会按按指指令令书书写的前后顺利依次执行,这就是顺序程序写的前

42、后顺利依次执行,这就是顺序程序顺序结构是最基本的程序结构顺序结构是最基本的程序结构完全采用顺序结构编写的程序并不多见完全采用顺序结构编写的程序并不多见书书100页例题页例题2.1顺序程序设计实例顺序程序设计实例3.分支程序设计分支程序设计分支程序根据条件是真或假决定执行与否分支程序根据条件是真或假决定执行与否判判断断的的条条件件是是各各种种指指令令如如CMP、TEST等等执执行行后后形成的形成的状态标志状态标志转移指令转移指令Jcc和和JMP可以实现分支控制可以实现分支控制条件成立跳转,否则顺序执行分支语句体条件成立跳转,否则顺序执行分支语句体注意选择正确的条件转移指令和转移目标地址注意选择正

43、确的条件转移指令和转移目标地址JccJcc条件满足?条件满足?条件满足?条件满足?分支语句体分支语句体分支语句体分支语句体Y YN N书书100页页例题例题2.2、例题例题2.3课后读此程序课后读此程序例:例:显示显示BX的最高位的最高位方法一:分支程序设计方法一:分支程序设计movdl,0;DL30H0shlbx,1;BX最高位移入最高位移入CF标志标志jnctwo;CF0,即最高位为,即最高位为0,转移,转移movdl,1;CF1,即最高位为,即最高位为1:DL31H1two:movah,2int21h;显示;显示编写分支程序,需留心分支的开始和结束编写分支程序,需留心分支的开始和结束例:

44、显示例:显示BX的最高位的最高位方法二:顺序程序设计(无分支)方法二:顺序程序设计(无分支)movdl,0shlbx,1;BX最高位移入最高位移入CF标志标志adcdl,30h;CF0,DL030h030H0;CF1,DL030h131H1two:movah,2int21h;显示;显示4.循环程序设计循环程序设计循循环环程程序序结结构构是是满满足足一一定定条条件件的的情情况况下下,重重复复执执行某部分程序行某部分程序循环结构的程序通常有循环结构的程序通常有3个部分:个部分:结束结束 初始化初始化 循环体循环体 修改部分修改部分控制条件控制条件Y YN N循环初始部分循环初始部分 为开始循环准备

45、必要的条件,如循环次数、循环体需要的数值等 循环体部分循环体部分 重复执行的程序部分,包括对循环条件等的修改程序段 循环控制部分循环控制部分 判断循环条件是否成立,决定是否继续循环。循环条件为:(1)循环次数(计数控制循环计数控制循环)(2)特定条件(条件控制循环条件控制循环)计数控制循环计数控制循环计数控制循环计数控制循环利用利用循环次数循环次数作为控制条件作为控制条件易于采用易于采用循环指令循环指令LOOP和和JCXZ实现实现初始化:将循环次数或最大循环次数置入初始化:将循环次数或最大循环次数置入CX循环体循环体循循环环控控制制:用用LOOP指指令令对对CX减减1、并并判判断断是是否为否为

46、0书书102页例题页例题2.4循环程序设计实例循环程序设计实例例:用二进制例:用二进制显示显示BX内容内容movcx,16;CX8(循环次数)(循环次数)again:shlbx,1;左移进;左移进CF,从高位开始显示从高位开始显示movdl,0;MOV指令不改变指令不改变CFadcdl,30h;DL030HCF;CF若是若是0,则,则DL0;CF若是若是1,则,则DL1movah,2int21h;显示;显示loopagain;CX减减1,如果,如果CX未减至未减至0,则循环,则循环计数控制循环计数控制循环先循环后判断先循环后判断显示显示BX的最高位的最高位sumdw?xorax,ax;被加数被

47、加数AX清清0movcx,100again:addax,cx;从从100,99,.,2,1倒序累加倒序累加loopagainmovsum,ax;将累加和送入指定单元将累加和送入指定单元例例 求和求和 SUM=1+2+3+99+100 SUM=1+2+3+99+100计数控制循环计数控制循环循环次数固定循环次数固定初始化初始化:循环次数需累加的字节个数:循环次数需累加的字节个数循环体循环体:逐个累加:逐个累加循环控制循环控制:加完所有数据:加完所有数据?SUM=SUM-1-2-3SUM=SUM-1-2-3?SUM=2+3+4SUM=2+3+4计数控制循环例题:计数控制循环例题:初始化返回第返回第

48、2 2章章计数控制循环例题:求数组元素的最大值计数控制循环例题:求数组元素的最大值;数据段主体部分数据段主体部分bufferdb-1,0,2,3,8,9,10,88h,-3,45h;这是一个有符号字节元素组成的数组;这是一个有符号字节元素组成的数组countequ$-buffer;符号符号“$”表示当前偏移地址值表示当前偏移地址值maxdb?;存放最大值存放最大值;代码段主体部分代码段主体部分初始化初始化:循环次数元素个数:循环次数元素个数-1循环体循环体:逐个比较求最大:逐个比较求最大循环控制循环控制:比较完所有数据:比较完所有数据movcx,count;取得元素个数;取得元素个数deccx

49、;减;减1后是循环次数后是循环次数leabx,buffermoval,bx;取出第一个元素给;取出第一个元素给AL,AL用于暂存最大值用于暂存最大值incbxagain:cmpal,bx;与下一个数据比较;与下一个数据比较jnlnext;转移转移moval,bx;AL取得更大的数据取得更大的数据next:incbxloopagain;计数循环;计数循环movmax,al;保存最大值;保存最大值初始化循环体例题改进:求数组元素的最大值和最小值,数组元素的第一例题改进:求数组元素的最大值和最小值,数组元素的第一个数据表示元素个数个数据表示元素个数;数据段主体部分数据段主体部分arraydw10;假

50、设一个数组,其中第一个数据;假设一个数组,其中第一个数据10表示元素个数表示元素个数dw-3,0,20,900,587,-632,777,234,-34,-56;这是一个有符号字量元素组成的数组;这是一个有符号字量元素组成的数组maxaydw?;存放最大值;存放最大值minaydw?;存放最小值;存放最小值初始化:循环次数元素个数初始化:循环次数元素个数1循环体:逐个比较求最大、小值循环体:逐个比较求最大、小值循环控制:比较完所有数据循环控制:比较完所有数据例题改进例题改进代码段代码段;代码段主体部分;代码段主体部分leasi,arraymovcx,si;取得元素个数;取得元素个数deccx;

展开阅读全文
相关资源
相关搜索

当前位置:首页 > 教育专区 > 教案示例

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

工信部备案号:黑ICP备15003705号© 2020-2023 www.taowenge.com 淘文阁