8086 总汇编语言子程序程序设计

合集下载
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

汇编语言程序设计实验报告

学院:计算机科学与技术专业:计算机科学与技术班级:计科131

二. 生成可执行文件:

1.汇编:

C:\masm> masm lab5;

2.连接:

C:\masm> link lab5;

三. 请写出此程序中的变量ary,count,sum 的EA,并判断此程序的功能:

四. 用debug 调试此程序时,第一条指令的段EA 是多少?此程序数据段偏移地址为0 的字单

元数据为多少?其对应的机器指令是什么?

-L ;加载程序文件lab5.exe

-R ;查看IP 与CS 寄存器的容

-D DS:0 ;查看当前数据段偏移地址为0 的字单元数据

-U ;查看机器指令

实验二:编写一个子程序,实现在屏幕的指定位置,用指定颜色,显示一个用0 结尾的字符串

源程序如下

data segment

str db 'display string',0

data ends

code segment

assume cs:code,ds:data

start:

mov ax,data

mov ds,ax

mov dh,8

mov dl,21

mov cl,3

; 参数:(ax) = 被除数dword型的低16位

; (dx) = 被除数dword型的高16位

; (cx) = 除数

; 返回:(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 为商——最后结果的低16位,dx为余数——为最后结果,应赋给cx

mov cx, dx

pop dx

ret

code ends

end start

实验结果实验一:变量ary,count,sum 的EA分别是00140,00154,00156此程序的功能是数列求和

实验二:

实验三:

这次实验,感觉难度最大的就是做2个子程序的设计,在网上向好友请教了N回!

还犯了一些低级的错误,如将16位的寄存器的容传送到字符型数字串里去,这很明显是不对的,在逆序时寄存器的高16位会直接把正常的数字字符冲掉,还有就是将当我直接将字型单元的容传送字型单元时,编译器会报错,不过提示是它后面的指令错误。

转换后的数字串的末尾如果不是0的话,在调用输出子程序时会出现BUG,于是又在转换子程序里加了条指令,在第一次转换出来后,在数字串的末尾添加一个终止标志0。指

相关文档
最新文档