汇编语言第4章课件

PPT
  • 阅读 36 次
  • 下载 0 次
  • 页数 71 页
  • 大小 523.650 KB
  • 2022-11-24 上传
  • 收藏
  • 违规举报
  • © 版权认领
下载文档30.00 元 加入VIP免费下载
此文档由【小橙橙】提供上传,收益归文档提供者,本网站只提供存储服务。若此文档侵犯了您的版权,欢迎进行违规举报版权认领
汇编语言第4章课件
可在后台配置第一页与第二页中间广告代码
汇编语言第4章课件
可在后台配置第二页与第三页中间广告代码
汇编语言第4章课件
可在后台配置第三页与第四页中间广告代码
汇编语言第4章课件
汇编语言第4章课件
还剩10页未读,继续阅读
【这是免费文档,您可以免费阅读】
/ 71
  • 收藏
  • 违规举报
  • © 版权认领
下载文档30.00 元 加入VIP免费下载
文本内容

【文档说明】汇编语言第4章课件.ppt,共(71)页,523.650 KB,由小橙橙上传

转载请保留链接:https://www.ichengzhen.cn/view-44790.html

以下为本文档部分文字说明:

汇编语言第4章第4章汇编语言程序设计基本技术教学重点•综合应用第2章硬指令和第3章伪指令,第4章从程序结构角度展开程序设计,重点掌握:分支结构程序设计循环结构程序设计汇编语言程序设计的过程通常都包括以下步骤:1.分析问题

,确定算法2.编制程序流程3.正确、合理使用存贮器和寄存器4.编写程序5.调试运行程序程序的基本结构形式有:顺序程序、分支程序、循环程序和子程序。顺序程序的最大特点:程序从运行开始到结尾一直是按顺序逐条执行指令,且每条指令只执行一次。4.1顺序程序设计顺序程序完全按指令书

写的前后顺序执行每一条指令,是最基本、最常见的程序结构例4.1计算例4.2移位例题代码转换例4.1-1.modelsmall.stack.dataXdw5Ydw6Zdw7Wdw?.code.startupmovax,Xaddax,Yaddax,ZmovW,ax.e

xit0enddatasegmentXdw5Ydw6Zdw7Wdw?dataendscodesegmentassumecs:code,ds:datastart:pushds;保存旧的数据段地址subax,axpushax例4.1-2movax,data;将da

ta数据段地址movds,ax;送往ds段寄存器movax,Xaddax,Yaddax,ZmovW,axmovah,4chint21h;返回DOScodeendsendstart例4.2-1/2.dataqvardq1234567887654321h;定义4字变量.code.

startupmoval,byteptrqvar[6]movbyteptrqvar[7],almoval,byteptrqvar[5]movbyteptrqvar[6],almoval,byteptrqvar[4]mo

vbyteptrqvar[5],almoval,byteptrqvar[3]movbyteptrqvar[4],almoval,byteptrqvar[2]movbyteptrqvar[3],al图示例4.2-2/2moval,byteptrqvar[1]movb

yteptrqvar[2],almoval,byteptrqvar[0]movbyteptrqvar[1],almovbyteptrqvar[0],0.exit0end1234567887654321h3456788765432100h移位后图示64位数据左移8位123456788765

432100qvar[0]qvar[1]qvar[2]qvar[3]qvar[4]qvar[5]qvar[6]qvar[7]换码指令执行前:在主存建立一个字节量表格,内含要转换成的目的代码表格首地址

存放于BX,AL存放相对表格首地址的位移量换码指令执行后:将AL寄存器的内容转换为目的代码换码指令XLAT(translate)将BX指定的缓冲区中、AL指定的位移处的一个字节数据取出赋给ALXLATXLAT;al←ds:[bx+al]例:代码转换movbx

,100hmoval,03hxlat换码指令没有显式的操作数,但使用了BX和AL;因为换码指令使用了隐含寻址方式——采用默认操作数XLAT例题代码转换-1/2;查表法,实现一位16进制数转换为ASCII码显示.modelsmall.stack256.dataASCIIdb30

h,31h,32h,33h,34h,35hdb36h,37h,38h,39h;0~9的ASCII码db41h,42h,43h,44h,45h,46h;A~F的ASCII码hexdb0bh;任意设定了一个待转换的一位16进制数例题代码转换-2/2.code.

startupmovbx,offsetASCII;BX指向ASCII码表moval,hex;AL取得一位16进制数,正是ASCII码表中位移andal,0fh;只有低4位是有效的,高4位清0xlat;换码:AL←DS:[BX+AL]movdl,al;入口参数:DL←ALmovah,2;

02号DOS功能调用int21h;显示一个ASCII码字符.exit0end4.2输入输出功能调用向显示器输出字符⒈字符的输出⒉字符串的输出从键盘输入数据⒊字符的输入⒋字符串的输入⒌按键的判断裸机汇编语言

程序第4章4.2.1中断指令中断(Interrupt)是一种改变程序执行顺序的方法中断具有多种中断类型中断的指令有3条:INTi8IRETINTO本节主要掌握类似子程序调用指令的中断调用指令INTi8,进而学习使用DOS功能调用中断的过程主程序

IRET中断服务程序断点中断请求中断请求可以来自处理器外部的中断源,也可以由处理器执行指令引起:例如执行INTi8指令。8086的外部中断8086可以管理256个中断各种中断用一个向量编号来区别主要分成外部中断和内部中断外部中断——来自CPU之外的原因引起的中断,又可以分成可

屏蔽中断:可由CPU的中断允许标志IF控制非屏蔽中断:不受CPU的中断允许标志IF控制8086的内部中断内部中断——CPU内部执行程序引起的中断,又可以分成:除法错中断:执行除法指令,结果溢出产生的0号中断指令中断:执行中断调用指令INTi8产生的i8号中断断点中断:用

于断点调试(INT3)的3号中断溢出中断:执行溢出中断指令,OF=1产生的4号中断单步中断:TF=1在每条指令执行后产生的1号中断中断指令INTINTi8;中断调用指令:产生i8号中断IRET;中断返回指令:实现中断返回INTO;溢出中断指令:;若溢出标志OF=1,产生4号中断;否则顺序执行4

.2.2系统功能调用21H号中断是DOS提供给用户的用于调用系统功能的中断,它有近百个功能供用户选择使用,主要包括设备管理、目录管理和文件管理三个方面的功能ROM-BIOS也以中断服务程序的形式,向程序员提供系统的基本输入输

出程序汇编语言程序设计需要采用系统的各种功能程序充分利用操作系统提供的资源是程序设计的一个重要方面,需要掌握功能调用的步骤通常按照如下4个步骤进行:⑴在AH寄存器中设置系统功能调用号⑵在指定寄存器中设置入口参数⑶执行指令INT21H(或ROM-BIOS的中断向量号),实现中断服务程序的

功能调用⑷根据出口参数,分析功能调用执行情况字符输出的功能调用DOS功能调用INT21H功能号:AH=02H入口参数:DL=字符的ASCII码功能:在显示器当前光标位置显示给定的字符,光标右移一个字符位置。如按Ctrl-Break或Ctrl-C

则退出例:显示问号;在当前显示器光标位置显示一个问号movah,02h;设置功能号:ah←02hmovdl,'?';提供入口参数:dl←'?'int21h;DOS功能调用:显示进行字符输出时,当输出响铃字符(07H)以及退格(08H)、回车(0DH)和

换行(0AH)字符时,该功能调用可以自动识别并能进行相应处理字符串输出的功能调用DOS功能调用INT21H功能号:AH=09H入口参数:DS:DX=欲显示字符串在主存中的首地址字符串应以‘$’(24H)结束功能:在显示器输出指定的字

符串可以输出‘回车’(0DH)和‘换行’(0AH)字符产生回车和换行的作用例:显示字符串stringdb'Hello,Everybody!',0dh,0ah,'$';在数据段定义要显示的字符串...movah,09h;设置功能号:ah←09hmovdx,off

setstring;提供入口参数:dx←字符串的偏移地址int21h;DOS功能调用:显示字符输入的功能调用DOS功能调用INT21H功能号:AH=01H出口参数:AL=字符的ASCII码功能:获得按键的ASCII代码值调用此

功能时,若无键按下,则会一直等待,直到按键后才读取该键值例:字符输入+判断按键getkey:movah,01h;功能号:ah←01hint21h;功能调用cmpal,’Y’;处理出口参数aljeyeskey;是“Y”c

mpal,’N’jenokey;是“N”jnegetkey...yeskey:...nokey:...字符串输入的功能调用DOS功能调用INT21H功能号:AH=0AH入口参数:DS:DX=缓冲区首地址执

行该功能调用时,用户按键,最后用回车确认本调用可执行全部标准键盘编辑命令;用户按回车键结束输入,如按Ctrl+Break或Ctrl+C则中止关键要定义好缓冲区缓冲区的定义第1字节事先填入最多欲接收的字

符个数(包括回车字符,可以是1~255)第2字节将存放实际输入的字符个数(不包括回车符)第3字节开始将存放输入的字符串实际输入的字符数多于定义数时,多出的字符丢掉,且响铃扩展ASCII码(如功能键等)占

两个字节,第1个为0例:输入字符串bufferdb81;缓冲区长度;第1个字节填入可能输入的最大字符数db?;保留为填入实际输入的字符数db81dup(0);存放输入的字符串...movdx,segbuffer;伪指令se

g取得buffer的段地址movds,dx;设置数据段DSmovdx,offsetbuffermovah,0ahint21h按键判断的功能调用DOS功能调用INT21H功能号:AH=0BH出口参数:AL

=0,当前没有按键;AL=FFH,当前已经按键。功能:仅判断当前是否有按下的键,设置AL后退出例:按任意键继续...;提示“按任意键继续”getkey:movah,0bhint21horal,al;al=0?jzgetkey;al=0,没有按键,继续等待4.3分支程序设计分支程序根据条件

是真或假决定执行与否判断的条件是各种指令,如CMP、TEST等执行后形成的状态标志转移指令Jcc和JMP可以实现分支控制单分支:求绝对值双分支:例4.3多分支:例4.4单分支程序设计条件成立跳转,否则顺序执行分支

语句体注意选择正确的条件转移指令和转移目标地址第4章例题求绝对值;计算AX的绝对值cmpax,0jnsnonneg;分支条件:AX≥0negax;条件不满足,求补nonneg:movresult,ax;条件满足;计算AX的绝对值cmpax,0jlyesneg;分支条件:AX<

0jmpnonnegyesneg:negax;条件不满足,求补nonneg:movresult,ax;条件满足GoodBad双分支程序设计条件成立,跳转执行第2个分支语句体;否则顺序执行第1个分支语句体注意:第

1个分支体后一定要有一个JMP指令跳到第2个分支体后第4章例题显示BX最高位„„shlbx,1;BX最高位移入CFjcone;CF=1,即最高位为1,转移movdl,’0’;CF=0,即最高位为0,DL←’0’jmptwo;一定要跳过另一个分支体one

:movdl,’1’;DL←’1’two:movah,2int21h;显示„„对比双分支程序改为单分支程序例题显示BX最高位shlbx,1;BX最高位移入CFjncone;CF=0,即最高位为0,转移movdl,’1’;CF=1,即最高位为1,DL←’1’jmptwo;一定要跳过另一个

分支体one:movdl,’0’;DL←’0’two:movah,2int21h;显示双分支程序改为单分支程序对比例题显示BX最高位„„movdl,’0’;DL←’0’shlbx,1;BX最高位移入CFjnctwo;CF=0,最高位为0,转移movdl,

’1’;CF=1,最高位为1,DL←’1’two:movah,2int21h;显示„„编写分支程序,需留心分支的开始和结束例4.3判断有无实根-1/2.startupmoval,_bimulalmovbx,ax;BX中为b2mov

al,_aimul_cmovcx,4imulcx;AX中为4ac(设DX中无有效数据)例4.3判断有无实根-2/2cmpbx,ax;比较二者大小jgeyes;条件满足?movtag,0;第一分支体:条件不满

足,tag←0jmpdone;跳过第二个分支体yes:movtag,1;第二分支体:条件满足,tag←1done:.exit0多分支程序设计多个条件对应各自的分支语句体,哪个条件成立就转入相应分支体执行。多分支可以化解为双分支或单分支结构的组合,例如:orah

,ah;等效于cmpah,0jzfunction0;ah=0,转向function0decah;等效于cmpah,1jzfunction1;ah=1,转向function1decah;等效于cmpah,2jzfunction2;ah=2,转向function2第

4章图示多分支结构AH=0fuction0YNAH=1fuction1YNAH=2fuction2YN种类条件转移指令判断条件条件组合关系OFSFZFPFCF简单条件转移指令JOJNOJSJNSJZ/JEJNZ/JNEJP/JPEJNP/

JPOJCJNCJA/JNBEJAE/JNBJB/JNAEJBE/JNAJG/JNLEJGE/JNLJL/JNGEJLE/JNG无符号数条件转移指令带符号数条件转移指令101010101000010111aa

bb0101aabbANDORANDOR(a=b)ANDZF=0(a=b)ORZF=1(a<>b)ANDZF=0(a<>b)ORZF=1地址表形成多分支需要在数据段事先安排一个按顺序排列的转移地址表输入的数字作为转移地址表内的

偏移量。16位偏移地址占用2个字节单元,所以偏移量需要乘2关键是要理解间接寻址方式JMP指令地址表分支1地址分支2地址...Tabledwdisp1,disp2,disp3,disp4,....datamsgdb'Inputnumber(1~8):',0dh,0ah,'$'msg1db'C

hapter1:...',0dh,0ah,'$'msg2db'Chapter2:...',0dh,0ah,'$'...msg8db'Chapter8:...',0dh,0ah,'$'tabledwdisp1,disp

2,disp3,disp4dwdisp5,disp6,disp7,disp8;定义各个标号的偏移地址例4.4数据段-1/3此处等同于offsetdisp1.code.startupstart1:movdx,offsetmsgmovah,9;显示“Inputnumber(1~8):”int21hmo

vah,1;等待按键输入int21hcmpal,'1';数字<1?jbstart1cmpal,'8';数字>8?jastart1andax,000fh;将ASCII码转换成数字例4.4代码段-2/3decax;偏移量从0开始shlax,1;等效于addax,ax即变为偶数movbx,axjm

ptable[bx];(段内)间接转移:IP←[table+bx]start2:movah,9;显示字符串int21h.exit0disp1:movdx,offsetmsg1;处理程序1jmpstart2...end例4.4代码段-3/3可以改为callta

ble[bx]对应修改为retAH=9时,INT21H的功能是显示字符串,要求必须以‘$’字符作为定界符,来计算串的长度。显示字符串时,如果希望光标能自动换行,则可在字符串结束前加上回车(0dH)和换行(0aH)的ASCII码。作业:实验教程P6113P6234例:有数组x(x

1,x2,……,x10)和y(y1,y2,……,y10),编程计算z(z1,z2,……,z10)z1=x1+y1z2=x2+y2z3=x3-y3z4=x4-y4z5=x5-y5z6=x6+y6z7=x7-y7z8=x8-y8z9=x

9+y9z10=x10+y10.dataxdwx1,x2,x3,x4,x5,x6,x7,x8,x9,x10ydwy1,y2,y3,y4,y5,y6,y7,y8,y9,y10zdwz1,z2,z3,z4,z5,z6,z7,z8,z9,z10logic_ruledw00dch;逻辑尺:0000,

0000,1101,1100;1减法0加法……movbx,0;设置数组内偏移量movcx,10;设置计数器movdx,logic_rulenext:movax,x[bx]shrdx,1;判断逻辑尺最低位jcsubtract;为‘1’,进行减法addax,

y[bx];为‘0’,进行加法jmpshortresult;存结果subtract:subax,y[bx]result:movz[bx],axaddbx,2;设置数组内下一字单元loopnext……4.4循环程序设计循环结构一般是根据某一条件判断为真或假来确定是否重复执行循环体循环

指令和转移指令可以实现循环控制多重循环:例4.6循环指令LOOP:例4.5DO-WHILE结构DO-UNTIL结构控制条件初始化循环体YN控制条件初始化循环体YNDO-UNTIL循环结构结束初始化循环的初始状态循环体循环的工作部分及修

改部分计数控制循环条件控制循环修改部分控制条件YN循环指令(loop)循环指令默认利用CX计数器,方便实现计数循环的程序结构label操作数采用相对寻址方式LOOPlabel;CX←CX-1,;CX≠0,循环到标

号label处LOOPZ/LOOPElabel;CX←CX-1,;CX≠0且ZF=1,循环到标号label处LOOPNZlabel;CX←CX-1,;CX≠0且ZF=0,循环到标号label处.modelsmall.stack.datasumdw?.code.st

artupxorax,ax;被加数AX清0movcx,100again:addax,cx;从100,99,...,2,1倒序累加loopagainmovsum,ax;将累加和送入指定单元.exit0end例4.5求和计数控制循环循环次数固定“冒泡法”是一种排序算法,不是最优的算法

,但它易于理解和实现冒泡法从第一个元素开始,依次对相邻的两个元素进行比较,使前一个元素不大于后一个元素;将所有元素比较完之后,最大的元素排到了最后;然后,除掉最后一个元素之外的元素依上述方法再进行比较,得到次大的元素排在后面;如此重复,直至完成

就实现元素从小到大的排序这需要一个双重循环程序结构图示例4.6冒泡法冒泡法的排序过程序号数比较遍数123413228531641558321615885161583285158163285815163285第4章datasegmentarraydb32d,85d,16d,15d,8d

dataendsprognamsegmentassumecs:prognam,ds:datastart:movax,data;将data数据段地址movds,ax;送往ds段寄存器movcx,5;CX←数组元素个数deccx;设置外循环次数例4.8o

utlp:movdx,cx;DX←内循环次数movbx,offsetarrayinlp:moval,[bx];取前一个元素cmpal,[bx+1];与后一个元素比较jnanext;前一个不大于后一个元素,则不进行交换xchg

al,[bx+1];否则,进行交换mov[bx],alnext:incbx;下一对元素decdxjnzinlp;内循环尾,由dx控制loopoutlp;外循环尾,由cx控制prognamendsendstartdatasegmentarr

aydb32d,85d,16d,15d,8ddataendsprognamsegmentassumecs:prognam,ds:datastart:movax,data;将data数据段地址movds,ax;送往ds段寄存

器movcx,5;CX←数组元素个数deccx;设置外循环次数例4.8aoutlp:movdi,cx;内循环次数保存到DImovbx,0;bx寄存器清零inlp:moval,array[bx];取前一个元素cmpal,array[bx

+1];与后一个元素比较jnanext;前一个不大于后一个元素,则不进行交换xchgal,array[bx+1];否则,进行交换movarray[bx],alnext:incbx;下一对元素loopinlp;内循环,以CX中的数为循环次数movcx,di;从DI中恢复

内循环次数loopoutlp;外循环,每次CX=CX–1prognamendsendstartXLAT指令第4章教学要求•1.掌握基本程序结构――顺序结构、分支结构、循环结构汇编语言程序设计•2.熟悉常见程序设计问题:多精度运算、查表

(查代码、特定值等)ASCII、BCD及十六进制数据间的代码转换数据范围判断(0~9、A~Z、a~z)字母大小写转换;字符串传送、比较等操作放松一下

小橙橙
小橙橙
文档分享,欢迎浏览!
  • 文档 25747
  • 被下载 7
  • 被收藏 0
相关资源
广告代码123
若发现您的权益受到侵害,请立即联系客服,我们会尽快为您处理。侵权客服QQ:395972555 (支持时间:9:00-21:00) 公众号
Powered by 太赞文库
×
确认删除?