汇编语言子程序程序设计

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

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

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

MOV AX,4C00H

INT 21H

MAIN ENDP

PROADD 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,AX

NEXT:ADD AX,[SI]

ADD SI,2

LOOP NEXT

MOV [DI],AX

POP DI

POP SI

POP CX

POP AX

RET

PROADD ENDP

ARY DW 1,2,3,4,5,6,7,8,9,10

COUNT DW 10

SUM 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 调试此程序时,第一条指令的段内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

mov si,offset str

call show_str

mov ax,4c00h

int 21h

;----------------------------

show_str proc near

push ax

push cx

push dx

push es

push si

mov es:[bx], cl

jcxz ok

mov es:[bx+1], dl

inc si

add bx, 2

jmp short s

ok:

pop si

pop es

pop dx

pop cx

pop bx

pop ax

ret

; 子程序:divdw

; 要求:进行不会除法溢出的除法运算,被除数为dword,除数为word,结果为dword ; 参数:(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。

见签名:年月日

相关文档
最新文档