计算机原理课件第三章汇编PPT资料_第1页
计算机原理课件第三章汇编PPT资料_第2页
计算机原理课件第三章汇编PPT资料_第3页
计算机原理课件第三章汇编PPT资料_第4页
计算机原理课件第三章汇编PPT资料_第5页
已阅读5页,还剩27页未读 继续免费阅读

下载本文档

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

文档简介

计算机原理(yuánlǐ)课件第三章汇编1第一页,共32页。DOS下直接执行(zhíxíng)过程(P172中段)名字PROCFAR;远过程 PUSHDS;压入返回的CS值;即保护PSP(程序段前缀ProgramSegmentPrefix)段地址(dìzhǐ) MOVAX,0PUSHAX;再压入0作偏移地址(dìzhǐ) ;栈顶为返回地址(dìzhǐ) …… RET;远返回,从栈顶CS:IP名字ENDP程序结束返回DOS的IBM推荐(tuījiàn)形式2第二页,共32页。程序模块例DATASEGMENT…DATAENDSSTACKSEGMENTPARASTACKDB100HDUP(?)STACKENDSCODESEGMENTASSUMECS:CODE,DS:DATA,ES:DATA,SS:STACKEXAMPROCFARSTART:PUSH DS ;保护(bǎohù)PSP段地址 MOV AX,0 ;保护(bǎohù)偏移0地址 PUSH AX …RETEXAMENDPENDSTARTDATASEGMENT…DATAENDSMYSTKSEGMENTPARASTACKDB100HDUP(?)MYSTKENDSCODESEGMENTASSUMECS:CODE,DS:DATA,ES:DATA,SS:MYSTKEXAMPROCFARSTART:PUSH DS ;保护(bǎohù)PSP段地址 MOV AX,0 ;保护(bǎohù)偏移0地址 PUSH AX …RETEXAMENDPENDSTART3第三页,共32页。§程序(chéngxù)举例P170【例3.13】数据(shùjù)块传送就是用源数据(shùjù)块去覆盖目标数据(shùjù)块。块1块2应在破坏(pòhuài)前先将这部分数据传送走。但当两数据块有部分重叠时,在传送过程中源数据的这部分就可能被破坏。4第四页,共32页。P170图3.8源数据区与目标(mùbiāo)数据区地址重叠示意图源前先传尾,源后先传头。如何(rúhé)判断源和目标的前后?=前后头尾头尾前后5第五页,共32页。P171图3.9[例3.13]流程图分别(fēnbié)计算出源数据块和目标数据块的起始地址的20位物理地址并由高16位和低4位组成。然后在区分出两数据块的前后(qiánhòu)的基础上再进行传送。←高16位相等(xiāngděng)↑源在前

源在后6第六页,共32页。数据(shùjù)块转送程序段(P171)CodesegmentassumeCS:CodeBlkmovprocfarStart:pushDSmovAX,0pushAX……movAX,SI;求源(DS:SI)始址高16位shrAX,1;逻辑右移(yòuyí)(最高位移进0)shrAX,1shrAX,1shrAX,17第七页,共32页。

movDX,DSaddAX,DX;得高16位movDS,AX;源(物理)始址高16位送DSandSI,0FH;得低4位(高12位置(wèizhi)0)movBX,DI;同样对目标ES:DIshrBX,1shrBX,1shrBX,1shrBX,1movDX,ESaddBX,DX8第八页,共32页。movES,BX;目标(物理)始址高16位送ESandDI,0FH;得低4位(高12位置0)cmpAX,BXjaDown;源地址(dìzhǐ)高jbUp;源地址(dìzhǐ)低cmpSI,DI;还需看低4位jaDown;源地址(dìzhǐ)高jbUp;源地址(dìzhǐ)低jmpExit;完全相等Up:std;指针减量,即从高地址(dìzhǐ)开始往上9第九页,共32页。

movAX,CX;数据块长度(chángdù)(字节数)decAXaddSI,AX;得源末址addDI,AX;得目标末址jmpTransDown:cld;指针加量,即从低地址开始往下Trans:repmovsbExit:retBlkmovendpCodeendsendStart10第十页,共32页。P172【例3.14】将36位BCD码转换为ASCII十进制数要求:压缩(yāsuō)BCD码每字节表示两位十进制数,将高4位和低4位拆开后转换成ASCII码显示。多字节数在存储器中存放的次序是低字节在前、高字节在后。高位开始的0不显示,全0只显示一个0。

11第十一页,共32页。P172图3.10

[例3.14]中BCDBUF起始(qǐshǐ)的内容}显示(xiǎnshì)出字符’5’’6’,即’56’为此(wéicǐ):1)分解成5和62)求出其ASCII码35H和36H送显示

显示出’1234567890…123456’0显示出’123456’12第十二页,共32页。前导(qiándǎo)0判断MOV DH,0;前导0标志OR DH,<一位数字>;当前一位数字出口(chūkǒu):①DH=0说明是前导0不显示且标志保持 ②DH≠0,说明是数值显示且标志清除13第十三页,共32页。P173图3.11[例3.14]流程图14第十四页,共32页。【例3.14】程序(chéngxù)(173页--)DatasegmentBcdbufdb56H,34H,12H,90H,78H,56H,34H,12H

db90H,78H,56H,34H,12H,90H,78H,56H,34H,12HDataendsStacksegmentstackdb100dup(?)StackendsCodesegmentassumeCS:Code,DS:Data,SS:StackTransProcfar15第十五页,共32页。

Start:pushDSmovAX,0pushAXmovAX,DatamovDS,AXmovCX,18;装入字节数leaSI,BcdbufaddSI,17;设置末址(从高地址往低地址)movDH,0Load:pushCXmovAL,[SI];(从后往前(wǎnɡqián))取一个字节decSImovBL,AL;暂存入BL16第十六页,共32页。

movCL,4rolAL,CL;经向左循环,把高4位移至低4位andAL,0fH;取高4位orDH,AL;判断是否为前导0jzLast;是,则不显示addAL,30H;否则,转换为ASCII码movDL,AL;输出(shūchū)显示movAH,02 ;功能号int21H ;dos功能调用Last:popCX;剩余循环次数cmpCX,1;判断是否为最后字节jnzBcdl;否movDH,0fH;是(且准备处理低4位),则设置标志Bcdl:movAL,BL;取回暂存的字节andAL,0fH;取低4位17第十七页,共32页。如何(rúhé)判断源和目标的前后?14】程序(chéngxù)(173页--)JNEX2EXAMPROCFARendStartjbUp;源地址(dìzhǐ)低再用乘数的每一字来重复以上过程(外循环)pushAX第二十一页,共32页。jzGoon;前导0,且不为最后(zuìhòu)字节JNC

NOCARRY

PUSH

DI

DOCARRY:

INC

DI

INC

DI

ADC

WORDPTR[DI],0

JC

DOCARRY

POP

DI

NOCARRY:

popDX;恢复原16位乘数(chénɡshù)StacksegmentstackaddBX,DXjmpExit;完全相等pushAXRET

orDH,ALjzGoon;前导0,且不为最后(zuìhòu)字节addAL,30H;转换为SCII码movDL,AL;输出显示movAH,02int21HGoon:loopLoad;如CX-1>0则继续retTransendpCodeendsendStart18第十八页,共32页。程序(chéngxù)思考1.若每次从缓冲区中取一个字,效率更高,如何保证显示(xiǎnshì)的顺序正确?

2.若是16进制数显示(xiǎnshì),程序如何修改?19第十九页,共32页。P175【例3.15】多位无符号(fúhào)二进制数的乘法分解成16位乘法(chéngfǎ)的多次循环。此题是2重循环嵌套: 一字(16位)乘以被乘数的每一字(内循环) 再用乘数的每一字来重复以上过程(外循环)循环嵌套时注意(zhùyì)寄存器的保护。此题中的CX。20第二十页,共32页。P176图3.14[例3.15]的指针(zhǐzhēn)分配21第二十一页,共32页。P175图3.15计算(jìsuàn)积之和过程示意图每乘一字(yīzì),则积长一字(yīzì)22第二十二页,共32页。P176图3.15

[例3.15]流程图和的进位(循环(xúnhuán))处理23第二十三页,共32页。【例3.15】程序(chéngxù)(177页--)Countequ3;乘数(chénɡshù)(被乘数(chénɡshù))的字数DatasegmentMcanddw00ffH,11ffH,0011HMcatordw000aH,1000H,0040HProtdw6dup(?)Stacksegmentstackdb100dup(?)StackendsCodesegmentassumeCS:Code,DS:Data,ES:Data,SS:Stack24第二十四页,共32页。

MbmulprocfarStart:pushDSmovAX,0pushAXmovAX,DatamovDS,AXmovES,AXleaSI,Mcand;置被乘数地址指针(zhǐzhēn)leaBX,Mcator;置乘数地址指针(zhǐzhēn)leaDI,Prot;置乘积地址指针(zhǐzhēn)pushDImovAX,025第二十五页,共32页。

movCX,2*Countcldrepstosw;全部乘积单元清零(见93页)popDI ;上面的stosw改动(gǎidòng)了DImovCX,CountExter:pushCX;外循环计数入栈movDX,[BX];取一个16位乘数incBXincBX;指向下一个乘数pushDI;乘积地址入栈pushSI;被乘数地址入栈movCX,Count26第二十六页,共32页。

Inter:pushCX;内循环计数入栈 pushDX;一个(yīɡè)16位乘数入栈lodsw;取一个(yīɡè)被乘数放进AX;且SI+2mulDX;(AX)*(DX);乘积在DX:AX(见73页)add[DI],AX;加低位积incDIincDIadc[DI],DX;加高位积popDX;恢复原16位乘数popCX;恢复内循环计数loopInter;循环次数减1JNC

NOCARRY

PUSH

DI

DOCARRY:

INC

DI

INC

DI

ADC

WORDPTR[DI],0

JC

DOCARRY

POP

DI

NOCARRY:

popDX;恢复原16位乘数(chénɡshù)===========================27第二十七页,共32页。popSI;恢复被乘数指针popDI;恢复乘积地址(dìzhǐ)指针incDIincDI;DI+2,每乘一字,则积长一字popCX;恢复外循环计数loopExter;外循环减1retMbmulendpendStart28第二十八页,共32页。P181【例3.17】CRT上的电子钟P181图3.17[例3.17]流程图P183末行起用(qǐyòng)到2重循环的软件定时,在主频时执行这段程序大约1秒时间。DELYPROC……MOVAX,3X1:MOVCX,0FFFFHX2:DECCXJNEX2DECAXJNEX1……RETDELYENDP29第二十九页,共32页。1.多处用到显示的BIOS调用INT10H2.用到许多宏CURSORMACRO…;设置光标(ɡuānɡbiāo)位置WINMACRO…;设置窗口位置及颜色ASCBCDMACRO…;ASCII→BCDINCBCDMACRO…;BCD数加1BCDASCMACRO…;BCD→ASCIISTRDSPYMACRO…;显示字符串30第三十页,共32页。【例3.17】程序(chéngxù)(181页--)。。。。。。。。。Clockprocfar;183页中起

温馨提示

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

评论

0/150

提交评论