汇编语言子程序程序设计_第1页
汇编语言子程序程序设计_第2页
汇编语言子程序程序设计_第3页
汇编语言子程序程序设计_第4页
汇编语言子程序程序设计_第5页
已阅读5页,还剩3页未读 继续免费阅读

下载本文档

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

文档简介

1、汇编语言程序设计实验报告学院:计算机科学与技术 专业:计算机科学与技术 班级:计科131姓名学号实验组实验时间指导教师肖敏成绩实验项目名称实验五:8086 汇编语言子程序程序设计实验目的熟悉子程序的设计方法实验原理对汇编源程序进行汇编、链接,在Debug环境下完成调试和运行。实验内容1、熟悉子程序的结构及注意事项2、掌握子程序的设计、调试方法实验环境1. 硬件:微型计算机1台2. 软件:MASM软件实验步骤实验一. 使用子程序设计编程实现求数组ARY 元素之和:编辑下面的源程序到文件lab5.asm 中:CODE SEGMENT ORG 100HASSUME CS:CODE,DS:CODE,S

2、S:CODEMAIN PROC FAR MOV AX,CODE MOV DS,AX MOV TABLE ,OFFSET ARY MOV TABLE+2,OFFSET COUNT MOV TABLE+4,OFFSET SUM MOV BX,OFFSET TABLE CALL PROADD MOV AX,4C00H INT 21HMAIN ENDPPROADD PROC NEAR PUSH AX PUSH CX PUSH SI PUSH DI MOV SI,BX MOV DI,BX+2 MOV CX,DI MOV DI,BX+4 XOR AX,AXNEXT:ADD AX,SI ADD SI,2 L

3、OOP NEXT MOV DI,AX POP DI POP SI POP CX POP AX RETPROADD ENDPARY DW 1,2,3,4,5,6,7,8,9,10COUNT DW 10SUM DW ?TABLE DW 3 DUP(?)CODE ENDS END MAIN使用相应的文本编辑器建立文件LAB5.asm,内容如上所示。二. 生成可执行文件:1.汇编:C:masm> masm lab5;2.连接:C:masm> link lab5;三. 请写出此程序中的变量ary,count,sum 的EA,并判断此程序的功能:四. 用debug 调试此程序时,第一条指令的段

4、内EA 是多少?此程序数据段内偏移地址为0 的字单元数据为多少?其对应的机器指令是什么?L ;加载程序文件lab5.exeR ;查看IP 与CS 寄存器的内容D DS:0 ;查看当前数据段内偏移地址为0 的字单元数据U ;查看机器指令实验二:编写一个子程序,实现在屏幕的指定位置,用指定颜色,显示一个用0 结尾的字符串源程序如下data segmentstr db 'display string',0data endscode segmentassume cs:code,ds:datastart:mov ax,datamov ds,axmov dh,8mov dl,21mov c

5、l,3mov si,offset strcall show_strmov ax,4c00hint 21h;-show_str proc nearpush axpush cxpush dxpush espush sipush dimov ax,0b800hmov es,axdec dhmov al,160mul dhadd dl,dlmov dh,0 ;计算显示在屏幕位置add ax,dxmov di,axmov ah,clx:mov cl,ds:simov ch,0jcxz f mov al,clmov es:di,axinc siinc diinc dijmp xf:pop dipop si

6、pop espop dxpop cxpop axret show_str endp;-code endsend start实验三:编写一个子程序,实现将word 型数据以十进制形式显示出来源程序如下:assume cs:codedata segment db 10 dup(0)data endsstack segment db 16 dup(0)stack endscode segmentstart: mov ax, data mov ds, axmov ax, stack mov ss, ax mov sp, 16 mov

7、 dx, 0c1h mov ax, 76f3h mov si, 0call dwtocmov dh, 8 mov dl, 3 mov cl, 2 call show_str mov ah, 01h int 21h mov ax, 4c00h int 21h; 子程序:dwtoc; 功能:将dword型数据转变成表示十进制的字符串,字符串以0结尾; 参数:(ax) = dword 型数据的低16位;(dx) = dword型数据的高16位;ds:si 指向字符串首地址; 返回:无dwtoc: mo

8、v cx, 0 push cxs_dwtoc: mov cx, 10  除数 call divdw  余数在cx中add cx, 30h push cx   保存余数的ASCII形式  判断是否商为0,如果高低16位都为0,则返回 mov cx, dx jcxz ok_dxz;  高位不为0,则直接跳回,继续执行运算 jmp short s_dwtoc; 商的高位为0 ok_dxz:  mov cx, ax  jcx

9、z ok_axz  jmp short s_dwtoc  商的低位为0 ok_axz:   赋值到 ds:si  mov dx, si  保存si,si为字符串的首地址  loop_dtoc:   pop cx   mov ds:si, cl   jcxz end_dwtoc   inc si   jmp short loop_dtocm

10、ov si, dx  end_dwtoc: mov si, dx retdtoc:  先把一个0放进堆栈,在后面s2从堆栈中取出的时候,可以根据cx为0跳转 mov cx, 0 push cx s1_dtoc:  mov dx, 0  mov cx, 10  div cxmov cx, dx   dx余数  add cx, 30h  push cx    保存在堆栈&

11、#160;mov cx, ax   ax为商,当商为0的时候,各位的值就已经得到了,就可以跳出循环  jcxz ok1_dtoc jmp short s1_dtoc ok1_dtoc:  mov ch, 0  s2_dtoc:     从堆栈中取出   pop cx   jcxz ok2_dtoc   mov ds:si, cl   in

12、c si   jmp short s2_dtocok2_dtoc:   ret show_str:  push ax  push bx  push cx  push dx  push es  push si  计算好字串开始显示的地址Y = 160*(行数-1) + 列数*2-2, B800 : Y   循环将参数里的字串写进显卡内存,并检测到0就返回  &

13、#160; bx = 160*(行数-1)  mov bh, dh  sub bh, 1  mov al, 160  mul bh  mov si, ax  si 为根据行数算出来的偏移值; ax = 列数*2-2  mov bl, dl  mov al, 2  mul bl  sub ax, 2  根据列数算出来的偏移值   add si, ax  行数和

14、列数的和存在SI中了mov ax, 0b800h  mov es, ax  mov bx, si  将si 的值保存在bx中,bx为显存显示偏移值  mov si, 0  题目要求。mov dl, cl  保存字体颜色属性  mov ch, 0 s:  mov  cl, ds:si  mov  es:bx, cl  jcxz okmov es:bx+1, dlinc si  a

15、dd bx, 2  jmp short  s ok:  pop si  pop es  pop dx  pop cx  pop bx  pop axret; 子程序:divdw; 要求:进行不会除法溢出的除法运算,被除数为dword,除数为word,结果为dword; 参数:(ax) = 被除数dword型的低16位;  (dx) = 被除数dword型的高16位;  (cx) = 除数; 返回:

16、(dx) = 结果的高16位;  (ax) = 结果的低16位;  (cx) = 余数divdw: mov bx, ax  缓存ax被除数的低16位 mov ax, dx  ax = H, 被除数的高16位 mov dx, 0 div cx   ax 为商,dx为余数 = rem(H/N) * 65536 push ax   结果的商,也就是最后要放在dx中的mov ax, bx  dx为 rem(H/N) * 65536, 为高16位,ax为低16位,再进行一次除法运算 div cx   ax 为商最后结果的低位,dx为余数为最后结果,应赋给cxmov cx, dx pop dxretcode endsend start实验结果实验一:变量ary,count,sum 的EA分别是00140,00154,00156此程序的功能

温馨提示

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

最新文档

评论

0/150

提交评论