实验六 程序设计
一、实验目的
掌握条件转移指令的使用方法及指令对标志寄存器中各标志位的影响;掌握标志位和转移指令之间的关系;会用条件转移指令和无条件转移指令设计多分支结构程序;掌握设置断点调试程序的方法。
二、示 例
1、编写一子程序,把数据段中1维数组AA_1变量地址中连续8个数(1,3,5,7,2,4,6,8)读
出,把每个数加2后再存入到数据段中BB_1数组开始的标号地址中去,并显示出BB_1数组中每个数来(之间用空格分开) DATA SEGMENT ;数据段的定义
ORG 0100H ;设置AA_1数组的段地址起始为0100H AA_1 DB 1,3,5,7,2,4,6,8 ;初始化AA_1数据段 ORG 0150H ;设置BB_1数组的段地址起始为0150H BB_1 DB 8 dup(?) ;初始化BB_1数据段 COUNT DW 8 ;定义count变量,类型为字 DATA ENDS CSEG SEGMENT
ASSUME CS:CSEG,DS:DATA ;指明段和段寄存器之间的关系 START:MOV AX,DATA ;初始化,将DATA送给DS MOV DS,AX
MOV CX,COUNT ;将8送给CX
LEA SI,AA_1 ;把AA_1数组的开始标号偏移地址移入SI LEA DI,BB_1 ;把BB_1数组的开始标号偏移地址移入DI LP1: MOV AL,[SI] ;将SI的数据移入AL ADD AL,2 ;将AL中的值+2
MOV [DI],AL ;将AL的内容移入DI INC SI ;si自加1 INC DI ;DI自加1
LOOP LP1 ;循环操作,直至AA_1中8个数都加2 LEA SI,BB_1
MOV CX,COUNT ;计数器cx DISP: MOV DL,[SI] ;输出当前SI存储的值
ADD DL,30H ;将DL中的内容+30H(即+48),即转化为其对应的ASCII码值 MOV AH,02 ;重新给AH赋值 INT 21H
MOV DL,' ' ;将DL清空,等待下一次赋新值 MOV AH,2 ;dos功能调用 INT 21H ;DOS功能调用 INC SI ;将SI自加1
LOOP DISP ;循环输出,显示BB_1数组中每一个数
MOV AH,4CH INT 21H CSEG ENDS END START
对上述程序加上注释,并运行观察结果。 运行结果:
更改AA_1数组数据再次测试
验证正确
三、实验题
1已知数组A包含15个互不相等的整数,数组B包含20个互不相等的整数。试编制一程序,把既在A中又在B中出现的整数存放在数组C中。 程序代码:
DATAS SEGMENT
A DW 1,2,3,4,5,6,7,8,9,10,11,12,13,14,15
B DW 0,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24 C5 DW 15 dup(?) ;此处输入数据段代码 DATAS ENDS
CODES SEGMENT
ASSUME CS:CODES,DS:DATAS START:
MOV AX,DATAS
MOV DS,AX ;将DATAS存入DS LEA SI,A ;将A的有效地址送到SI LEA DI,C5 ;将C5的有效地址送到DI MOV CX,15 ;设置循环计数器 L1:
MOV AX,[SI] PUSH CX MOV CX,30 LEA BX,B INLOOP:
MOV DX,[BX] CMP AX,DX
JNZ NO ;判断,不相等就转移—>NO MOV [DI],AX ADD DI,2 NO:
ADD BX,2 LOOP INLOOP
POP CX ADD SI,2
LOOP L1 ;循环重复下一个数的比较 ;此处输入代码段代码 MOV AH,4CH INT 21H CODES ENDS END START
运行结果:
得到两个数组中相同的数有:
6、7、8、9、10、11、12、13、14、15 更改数据测试:
验证正确