|
这是人民邮电出版社出版的《CASL汇编语言基础知识与试题精解》一书中讲解循环结构的一个例题,在书的52页!原题目如下:
#############################
在一数目确定的数据序列中找出最大数与最小数。假设数据的个数为256个,全部为无符号整数,无序存放在存储区域DATA中,要求将最大数存放在GR1中,将最小数存放在GR2中。
给出的程序如下:
START
LEA GR3, 255
LEA GR1, #0
LEA GR2, #FFFF
BEG CPL GR1, DATA, GR3
JMI FNDG
CPL GR2, DATA, GR3
JZE STOP
JPZ FNDL
FNDG LD GR1, DATA, GR3
JMP STOP
FNDL LD GR2, DATA, GR3
STOP LEA GR3, -1, GR3
JPZ BEG
DATA DS 256
END
#############################
我认为上面的程序有很大的漏洞,主要是指在FNDG行的前一行,应该加一个无条件跳转至BEG行,因为如果不加的话,假设所取值(GR3+DATA)为介于GR1和GR2之间,那么程序流程会发生错乱,比如现在(GR1)=25;(GR2)=3,((GR3)+DATA)=7,那么程序会一直FNDG上一行,由于没有跳转指令回到BEG行,所以将执行FNDG行,最后改变GR1中的值,而这一改变是错误的!
所以我认为正确的程序应该是:
#############################
在一数目确定的数据序列中找出最大数与最小数。假设数据的个数为256个,全部为无符号整数,无序存放在存储区域DATA中,要求将最大数存放在GR1中,将最小数存放在GR2中。
给出的程序如下:
START
LEA GR3, 255
LEA GR1, #0
LEA GR2, #FFFF
BEG CPL GR1, DATA, GR3
JMI FNDG
CPL GR2, DATA, GR3
JZE STOP
JPZ FNDL
JMP BEG '《====
FNDG LD GR1, DATA, GR3
JMP STOP
FNDL LD GR2, DATA, GR3
STOP LEA GR3, -1, GR3
JPZ BEG
DATA DS 256
END
#############################
不知道分析得是否正确,请高手加以指点!谢谢
|
|