即
n?(2Kk?1?1) = N
2
因此我们用减奇数法可求得近似平方根,即获得平方根的整数部分。若要做S的运算,就可以从S中逐次减去自然数中的奇数1、3、5、7、9??,一直减到余数为零或不够减下一个自然数的奇数为止,所减的自然数奇数的个数即为S的近似平方根。
设被开平方为正整数,存放在6300~6301H内存单元,所获得的平方根存放在6308H内存单元,所剩的余数存放在6309H内存单元,程序流程图如下:
AX ( )-(DX)→AX Y 0? (AX)≥
N
平方根→6308H 余数→ 6309H 减奇数个数计数器+1 形成下一个奇数 被开方数 → AX 0001 →DX 00 →CL 结 束 开平方程序流程图
程序清单
CODE SEGMENT ; Sy6.ASM 十六进制开平方程序
ASSUME CS:CODE ORG 6000H START: JMP START0
YA EQU 6300H ;被开方数地址
36
YB EQU 6308H ;方根地址 YC EQU 6309H ;余数地址 START0: MOV SI,YA
MOV AX,[SI] ;取被开方数 MOV CL,00 ;清平方根 MOV DX,0001 ;奇数初值 Y0: SUB AX,DX ;减奇数
JB Y1 ;不够减转存平方根后结束 MOV BX,AX ;够减存余数
INC CL ;奇数个数计数器+1 INC DX ;形成下一个奇数 INC DX
JMP Y0 ;转继续减奇数 Y1: MOV SI,YC
MOV [SI],BL ;余数送存 MOV SI,YB
MOV [SI],CL ;存平方根 JMP $ ;结束 CODE ENDS
END START 实验步骤:
⑴.输入程序。
⑵.在6300H~6301H内存单元分别存入几个不同的被开平方数(2字节、低位在前高位在后),运行程序,查看方根及余数并记录。
⑶.在充分理解该程序的基础上自行设计出2字节的十进制开方程序,调试通过并纪录源程序及运行结果。 五 实验报告主要内容及要求
1.读懂实验源程序,分析程序中每条指令的功能﹑用途,理解该程序的设计思路和方法。
2. 按实验要求自行完成程序设计、调试及修改,使其成满足设计要求,并按步骤进行程序的装入、运行,并记录运行后的结果。
3. 认真记录整理和分析自己所设计的程序在运行中的各种信息。 六 注意事项
当编写的源程序编译出错时,应根据所提示的错误信息的类型,修改好源程序并存盘后,再按下列步骤重新编译装载源程序文件:
37
1. 单击菜单栏“文件”或工具栏“打开”图标,弹出“打开文件”的对话框,然后选择修改存盘后的源文件,单击“确定”即可装入源文件
2. 点击工具栏上的编译装载图标,重新编译装载源程序;或单击鼠标右键,点击“编译装载(N)”,重新编译装载源程序。
38
实验四 数据排序程序的设计与调试
一 实验目的
1. 掌握排序程序的结构及其设计、调试的基本方法。 2.熟悉各类指令对标志状态位的影响及其检测、运用的方法。 二 实验内容
1. 排序程序的功用及其设计、调试的方法。 2. 实验学时数:2H 三 实验设备与工具
DICE-598K 实验系统 + PC机
四 实验方法和步骤
1. 排序程序
SY8.ASM程序为排序程序(参考教材P180的例5-11),是个二重循环程序。其功能将从2900H内存单元开始存放的N个字节中的数据按升序排列,其中字节数N存放于288FH单元。其参考程序和程序流程图如下。
程序清单
CODE SEGMENT ; SY8.ASM 排序程序 ASSUME CS:CODE
ORG 2800H
START: JMP START0
ZJS EQU 28FFH ; 字节数N存放地址
SHJ EQU 2900H ;数据存放首地址 START0: MOV SI, ZJS
MOV CL,[SI] ;取字节数N → CX MOV CH,0
MOV AX, SHJ
ADD AX,CX ;计算数据存放末地址
MOV SI, AX ; 末地址 → SI MOV BL,0FFH ;换位标志FF →BL CNT0: CMP BL,0FFH ;上次排序 时有换位?
JNE CNT3 ;N,结束
MOV BL, 0 ;Y,清换位标志
DEC CX ; 修正CX,外循环下一轮排序 JZ CNT3 ; CX=0,排序已结束 PUSH SI
39
PUSH CX
CNT1: DEC SI
MOV AL,[SI] ;取最末尾数N DEC SI ;指向N-1地址 CMP AL,[SI] ;判(N)> (N-1)? JA CNT2 ;Y,不换位 XCHG AL,[SI] ;N,换位 MOV [SI+1],AL
MOV BL,0FFH ;FF →换位标志
CNT2: INC SI ;换位后修正SI
LOOP CNT1 ;本轮内循环排序完?N,转CNT1 POP CX ; Y,恢复CX、SI POP SI ;上次排序 时有换位?
JMP CNT0 ;转外循环排序
CNT3: JMP $
CODE ENDS
END START
数据个数→ CX 源区末址+1→SI SI-1→ SI,(SI)→AL 换位标志FF→BL Y (SI)<(SI-1)? N (BL)=FF? N N Y (SI-1)←→(SI),FF→BL 00→BL,CX-1→ CX 结束 CX-1→ CX Y (CX)=0? N N N Y (CX)=0? SI, CX 进栈保护 Y 排序程序流程图
40