ImageVerifierCode 换一换
格式:DOCX , 页数:14 ,大小:81.74KB ,
资源ID:8131373      下载积分:3 金币
快捷下载
登录下载
邮箱/手机:
温馨提示:
快捷下载时,用户名和密码都是您填写的邮箱或者手机号,方便查询和重复下载(系统自动生成)。 如填写123,账号就是123,密码也是123。
特别说明:
请自助下载,系统不会自动发送文件的哦; 如果您已付费,想二次下载,请登录后访问:我的下载记录
支付方式: 支付宝    微信支付   
验证码:   换一换

加入VIP,免费下载
 

温馨提示:由于个人手机设置不同,如果发现不能下载,请复制以下地址【https://www.bdocx.com/down/8131373.html】到电脑端继续下载(重复下载不扣费)。

已注册用户请登录:
账号:
密码:
验证码:   换一换
  忘记密码?
三方登录: 微信登录   QQ登录  

下载须知

1: 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。
2: 试题试卷类文档,如果标题没有明确说明有答案则都视为没有答案,请知晓。
3: 文件的所有权益归上传用户所有。
4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
5. 本站仅提供交流平台,并不能对任何下载内容负责。
6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

版权提示 | 免责声明

本文(汇编语言实验10资料.docx)为本站会员(b****5)主动上传,冰豆网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。 若此文所含内容侵犯了您的版权或隐私,请立即通知冰豆网(发送邮件至service@bdocx.com或直接QQ联系客服),我们立即给予删除!

汇编语言实验10资料.docx

1、汇编语言实验10资料计算机科学系实验报告 (首页)一、 实验目的:掌握子程序的编写和调用二、 实验内容、程序清单及运行结果1显示字符串问题显示字符串是现实工作中经常要用到的功能,应该编写一个通用的子程序来实现这个功能。我们应该提供灵活的调用接口,使调用者可以决定显示的位置(行、列) 、内容和颜色。子程序描述名称:show_str功能:在指定的位置,用指定的颜色,显示一个用 0结束的字符串。参数:(dh)=行号(取值范围024) ,(dl)=列号(取值范围079),(cl)= 颜色,ds:si指向字符串的首地址返回:无就用举例:在屏幕的8行3列,用绿色显示data段中的字符串。assume cs

2、:codedata segme ntdb Welcome to masm!, 0data endscode segme ntstart: mov dh, 8 ; 行号列号颜色mov dl, 3mov cl, 2mov ax, datacall show strmov ax, 4cOOhint 21hshow_str: code endsend start10assume cs:code1112data segnent13db Welcome to masm!*,0仙data ends1516code segment17start:nou dh,818mou dJ ,319mou clt220m

3、ou ax ,data21nou ds22mou si 1923call showstr2即25mou ax ,4c 09h26int 21h272Sshau str:mou al_16029mul dh30sub axr16031mou bx3233(nou al ,231*mul dl35sub ax,2(nou di ,ax3738mou ax,ObSOOh39nov cs,ax4041s: mou cl:si42nov chP043jcxz okhh45nov es:bx+di,ci46inc dih7mou cht249mov es:bx*diTch49inc di50inc si5

4、1jnp short 55253ok :ret强code ends55end startpUG?7Z:0G00B668MOUDH.G86772:0602B2Q3MDUDL.030772:0004BIGSMDUCLfQ207?2 :00G6B870O7MOUG7?2 :0Q098ED8MOUD3.AXG?2:OGGBBEGOOGNOUSLGQ0G0?Ue leumt:toCALL00160772:0011BB0GHCMOUAX1C0tl0772 :00HCDZ1IMTZ10772:0016B0A0MOUAL.AO0772:0018F6E6nJLDHG?7Z:001AZDA0O0SUB0?7Z:0

5、O1D8BD8MDUBX.AXG77Z:0eiFB002ruu-g 0772:0011AX=B800 BX=0460CXGQGO DX-08G3 SP=Q0QGBP=G00O SI=6010 D1-0GE4S=Q?70 ES=B8G0SS=G76F CS-0772 IP=0G11MU UP El PL MZ AC PO NC077Z :0011B8Q04CMOUAX.4CO0餾 DOSBox D.74, Cpu peed: 1000 cycles. Frames kip 0r Program; DEBUG2 解决除法溢出的问题问题前面讲过,div指令可以做除法。当进行 8位除法的时候,用al存

6、储结果的商,ah存储结果 的余数:进行16位除法的时候,用ax存储结果的商,dx存储结果的余数。可是,现在有一个问题,如果结果的商大于 ah或ax所能存储的最大值,那么将如何?比如,下面的程序段:mov bh,1mov ax,1000div bh进行的是8位除法,结果的商为1000,而1000在ah中放不下,又比如,下面的程序段:mov ax,1000hmov dx,1mov bx,1div bx进行的是16位除法,结果的商为11000H,而11000H在ax中存放不下。我们在用div指令做除法的时候,很可能发生上面的情况:结果的商过大,超出了寄存器所能存储的范围。当CP执行div等除法指令的

7、时候。 如果发生这样的情况, 将引发CPU勺一个内部错误。这个错误被称为:除法溢出。我们可以通过特殊的程序来处理这个错误, 这里我们不讨论这个错误的处理,这是后面的课程中要涉及的内容。下面我们仅仅来看一下除法溢出发生时的一些现象除法溢出图中展示了在windowsXP中使用DEBU执行相关程序段的结果,div指令引发了 CPU勺除法溢 出,系统对其进行了相关的处理。好了,我们已经清楚了问题的所在:用 div 指令做除法的时候可能产生除法溢出。由于 有这样的问题, 在进行除法运算的时候要注意除数和被除数的值, 比如1000000/10 就不能用 div 指令来计算。那么怎么办呢?我们用下面的子程序

8、 divdw解决。子程序描述名称: divdw功能:进行不会产生溢出的除法运算, 被除数为dword型,除数为word型,结果为dword型。参数: (ax)=dword 型数据的低 16位(dx)=dword 型数据的高 16位(cx)= 除数返回: (dx)= 结果的高 16位, (ax)= 结果的低 16位(cx)= 余数应用举例:计算 1000000/10(F4240H/0AH)mov ax,4240hmov dx,000fhmov cx,0ahcall divdw提示给出一个公式:X:被除数,范围:O,FFFF FFFFN:除数,范围:0,FFFFH: X高 16位,范围:0,FFF

9、FL: X氐 16位,范围:0,FFFFint() :描述性运算符,取商,比如: int(38/10)=3rem() :描述性运算符,取余数,比如: rem(38/10)=8公式: X/N=int(H/N)*65536+rem(H/N)*65536+L/N这个公式将可能产生溢出的除法运算: X/N,转变为多个不会产生溢出的除法运算。公式中,等号右边的所有除法运算都可以用 div指令来做,肯定不会导致除法溢出。01assume cs:code0203stdck segment04db 16 dup(O)05stack ends0607code segment胸start:nou ax,stack

10、09nov 5510mou sp111213nou dxh仙nou ex v Oah15call divdu1617mou ax v4c0Oih18int 21b1920diudu:push ax21mou姑心22mou dx.023diu cm2Hnou sivdx2526pop 3N27diu ex28mou ck,dx2Qmou dx Tsi30code ends31end start|DOS E:OXDOSBom 0.74, Cpu speed: 3000 cycles, Frameskip 0r Program: DEBUGAX=QOG1BX0O00CX=Q0GADX=0OG5SP=

11、GGQCBP=0000SI=0091DI=Q0O9DS=Q?60ES=0?60SS=G7?0CS=e771IF=06E3MU UP ElFL NZ MAPO MC0?71:0QZ3 58ftPOP AXAX=4240DX=0066SF=0G0EBPOGOO31=0091DI=0009DS=G760ES=G?60SS=Q770CS=0?71IP=00Z4MU UF ElFL MS NAP0 MC6771:0024 F7F1DIU CXAX=86A0BX=GQ00CX=00OADX-00G0SF=eeBP-0000SI=0091DI=0000DS=OT60ES=G?60SS=G770CS=0771

12、IP=0G(Z6NU UP ElPL NZ NAPO NC0771:GGE6 BBCA MUU CX.DX3.数值显示问题编程,将data段中的数据以十进制的形式显示出来。data segme ntdw 123,12666,1,8,3,38data ends这些数据在内存中都是二进制信息,标记了数值的大小。要把它们显示到屏幕上,成为我们能够读懂的信息,需要进行信息的转化。比如,数值 12666,在机器中存储为二进制信息:0011000101111010B(317AH),计算机可以理解它。而我们要在显示器上读到可以理解的数值 12666,我们看到的应该是一串字符: “12666”。由于 显卡遵循

13、的是ASCII编码,为了让我们能在显示器上看到这串字符,它在机器中应以 ASCII码的形式存储为:31H、32H 36H、36H 36H(字符“ 0” “9”对应的ASCII码为30H39H。通过上面的分析可以看到,在概念世界中,有一个抽象的数据 12666,它表示了一个数值的大小。在现实世界中它可以有多种表示形式,可以在电子机器中以高低电平(二进制)的形式存储,也可以在纸上、黑板上、屏幕上以人类的语言“ 12666”来书写。现在,我们面临的问题就是,要将同一抽象的数据,从一种表示形式转化为另一种表示形式。可见,要将数据用十进制形式显示到屏幕上,要进行两步工作:(1) 将用二进制信息存储的数据

14、转变为十进制形式的字符串:( 2) 显示十进制形式的字符串。 第二步我们在本次实验的第一个子程序中已经实现,在这里只要调用一下 show_str 即可。我们来讨论第一步,因为将二进制信息转变为十进制形式的字符串也是经常要用到的功能,我 们应该为它编写一个通用的子程序。子程序描述名称: dtoc功能:将word型数据转变为表示十进制数的字符串,字符串以 0为结尾符。参数: (ax)=word 型数据ds:si 指向字符串的首地址返回:无应用举例:编程,将数据 12666以十进制的形式在屏幕的 8行3列,用绿色显示出来。 在显示时我们调用本次实验中的第一个子程序 show-str 。assume

15、cs:code,ds:data,ss:stackdata segmentdb 10 dup(0)data endsstack segmentdw 128 dup(0)stack endscode segmentstart:mov ax,stackmov ss,axmov sp,128mov ax,12666mov bx,datamov ds,bxmov si,0call dtocmov dh,8mov dl,3mov cl,2call show_strmov ax,4c00hint 21h0为结尾符; 名称: dtoc; 功能:将 word 型数据转变为表示十进制数的字符串,字符串以; 参数:

16、 (ax)=word 型数据; ds:si 指向字符串的首地址; 返回:无dtoc:push axpush bxpush cxpush sipush dimov di,simov bx,10mov cx,0s:push cxmov cx,ax jcxz enddtoc pop cx mov dx,0 div bx mov ds:di,dl add byte ptr ds:di,30h inc di inc cx jmp short s enddtoc:pop cx mov di,0 dec di mov ax,cx mov bl,2 div bl mov cl,al s1:mov al,ds:

17、di mov bl,ds:si mov ds:di,bl mov ds:si,al inc si dec diloop s1pop di pop si pop cx pop bxpop axret; 名称: show_str; 功能:在指定的位置,用指定的颜色,显示一个用 0结束的字符串; 参数: (dh)= 行号 ( 取值范围 024),(dl)= 列号 ( 取值范围 079),; (cl)= 颜色 ,ds:si 指向字符串的首地址; 返回:无 show_str:push dxpush sipush dipush cxpush axmov ax,0b800hmov es,axmov ax,1

18、60mul dhmov dh,0add ax,dxadd ax,dxsub ax,2mov di,axmov ah,cloutput:mov ch,ds:simov cl,0jcxz okmov byte ptr es:di,chmov byte ptr es:di+1,ahinc siinc diinc dijmp short outputok:pop axpop expop dipop sipop dxretcode endsend start三、实验结论、实验体会要屏幕的8行3列,用绿色显示data段中的字符串。,实际上就是要将 ds:si的数据搬到B8000H - BFFFFH中,段地址我将其设为 es = B8000, 偏移地址bx = dh.di = dl ,循环时,di递增。

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1