;扫描数组 (ArrayScan.asm)
;扫描数组寻找第一个非零数值
include irvine32.inc
.data
;intArray SWORD 0,0,0,0,1,20,35,-12,66,4,0
;intArray SWORD 1,0,0,0 ;候补测试数据
intArray SWORD 0,0,0,0 ;候补测试数据
;intArray SWORD 0,0,0,1 ;候补测试数据
noneMsg BYTE "A non-zero value was not found!",0
.code
main PROC
mov ebx,OFFSET intArray ;指向数组
mov ecx,LENGTHOF intArray ;循环计数器
L1:
cmp WORD PTR [ebx],0 ;将ebx寄存器内所存储的数值取出将低16位于0比较,这样会使得比较的两个数字内存对齐
jnz found
add ebx,2 ;指向下一个元素,eax寄存器增加两个字节
loop L1 ;重复进行上述操作
jmp notfound ;如果经过上述循环并没有找到非零数值那么直接退出
found:
;如果找到需要找到的元素那么执行这段代码
movsx eax,WORD PTR [ebx] ;将ebx也就是元素序号送入eax并进行符号扩展,PTR指定可以和数据类型连用,确定间接寻址寻址寄存器指向的数据的大小
call WriteInt ;调用WriteInt进行数据显示,注意最后的输出是以有符号整数的形式出现的
jmp quit ;跳转到结束为止
notfound:
mov edx,OFFSET noneMsg ;调用显示信息函数的准备
call WriteString
quit:
call Crlf ;回车并且换行
call WaitMsg ;等待用户输入一个字符
exit ;退出程序
main ENDP
END main
022.线性搜索并且输出数组中的第一个不为零的数字
最新推荐文章于 2022-10-14 17:05:02 发布