实验六 数据区移动
实验目的
掌握RAM中的数据操作
实验内容
把4100H源RAM区首址内的16字节数据传送到4200H目标RAM区 。
设计思想
程序要求把内存中一数据区(称为源数据块)传送到另一存储区(称为目的数据块)。源数据块和目的数
据块在存储器中可能有三种情况,如下图:
对于两个数据块分离的情况,如图(a),数据的传送从数据块的首址开始,或者从数据块的末址开始均可。但对于有部分重叠的情况,则要加以分析,否则重叠部分会因“搬移”而遭破坏。
可以得出以下结论:当源数据首址>目的块首址时,从数据块首址开始传送数据(见c图); 当源数据块首址<目的块首址时,从数据块末地址开始传送数据(见b图)。
程序框图及程序
14
CODE SEGMENT
ASSUME CS:CODE,DS:CODE,ES:CODE
ORG 3060H
S4: MOV CX,0010H MOV SI,4100H
MOV DI,4200H CMP SI,DI JA A42 ADD SI,CX ADD DI,CX DEC SI DEC DI MOV AL,[SI] MOV [DI],AL LOOP A41 JMP $ MOV AL,[SI] MOV [DI],AL INC SI INC DI LOOP A42
A41:
A42:
JMP $ CODE ENDS END S4 实验步骤
调试运行3060程序,检查4100-410FH中内容是否和4200-420FH中内容完全一致; 将源数据首址改为4100H,目的数据地址改为410AH,再加以验证; 将源数据首址改为410AH,目的数据地址改为4100H,再加以验证。
15
实验七 数据排序实验
实验目的
熟悉8088指令系统,掌握程序设计方法。
实验内容
编写并调试一个排序子程序,其方法为用冒泡法将RAM中几个单字节无符号的正整数,按从大到小的次序重新排列。
程序框图及程序
CODE SEGMENT
ASSUME CS:CODE,DS:CODE,ES:CODE
ORG 3090H S5: MOV CX,000AH A53: MOV BX,4000H PUSH CX
A52: MOV AX,[BX] CMP AL,AH JC A51 A54: INC BX
LOOP A52 POP CX LOOP A53 JMP $
16
A51: XCHG AL,AH MOV [BX],AX
JMP A54 CODE ENDS END S5 编程提示
(1)从第一个数开始,依次把相邻的两个数进行比较,即第(N-2)个数与第(N-1)个数比较,第(N-1)个数与N个数比较等等;若第(N-1)个数不大于第N个数,则两者交换,否则不交换,直到N个数的相邻两个数都比较完为止。此时,N个数中的最小数将被排在N个数的最后。
(2)对剩下的(N-1)个数重复第(1)步,找到(N-1)个数中的最小数。 (3)重复第(2)步,直到N个数全部排序好为止。
实验步骤
在4000H-400AH中输入不等的10个数,运行本实验程序后检查4000H-400AH中内容是否按从大到小排列。在和PC机联机时,用连续单步方式,可很清楚地看出数据排序时数据移动变化情况。
思考
注意两个循环是如何循环的,如果想减少判断次数,比如说几次交换后就不再有数据交换了,如何修改程序来减少程序执行时间;
编一程序把4000H-400AH中内容按从小到大排列; 如果是有符号数怎么改写程序。
17
实验八 串操作
实验目的
熟悉汇编语言编程,掌握串操作指令的使用。
熟悉串操作[程序前后自行补完整]
1.MOVSB/MOVSW程序:
将源地址100字节传送到目的地址
| MOV MOV MOV CLD REP |
上面的程序段相当于下面的循环程序段
SI,1000H DI,2000H CX,100 MOVSB
| MOV MOV MOV K: MOVSB DEC JNZ
SI,1000H DI,2000H
CX,100 CX K
|
2.CMPSB/CMPSW程序 比较4个字节的内容是否相同
| MOV MOV CLD MOV REPZ JZ RET
CX,4 CMPSB DONE DI,1000H SI,2000H
DONE: |
3.SCASB/SCASW程序
假设AL中为接收到的一个字节,1000H开始的4个单元中存放4个字节数据,如果AL中数据与4个
字节中的某一个相等,则在2000H开始的对应单元中加1。
MOV CLD MOV MOV
DI,1000H CX,4 DX,CX
18