题目:设qe(2,3,4,5,6,7,8,9},若自然数n的十进制表示法中某个位上的数为q,或n能被q整除,则称n是q相关的数,否则称n是与q无关的数。例如:自然数20与552是与5相关的数,而31是与5无关的数。请用汇编语言完成以下任务:
1.试编写子程序 isQr(n,q)判定自然数n是否与q相关,若n是与q相关,返回值等于1;否则,返回值等于0。
2.试利用子程序isQr 编写子程序 searchNotQrs(m,q,arr)找出大于自然数m且与q无关的10个整数,并将这10个数存在数组arr中。
3.试编写子程序outPut 将数组 Array输出到显示器。
4.编写一个主程序,调用searchNotQrs求出大于210419的10个与7无关的整数,并将这10个数存放在数组Array中;然后将数组Array中数输出到显示器程序中声明的变量如下:
DWORD 10 dup(?)
Array根据程序设计需要,可以在数据段中声明(定义)新变量。
include Irvine32.inc
.data
array dword 10 dup (?)
q dword 7
p dword 10
n dword ?
pd dword ?
m dword 210419
.code
main proc
call searchnotqrs
call output
exit
main endp
isqr proc
;call writeint
mov n,eax
mov edx,0
look1:
div q
;mov eax,edx
;call writeint
cmp edx,0
je ok
mov eax,n
look2:
mov edx,0
div p
cmp eax,0
je notok
cmp edx,q
je ok
jmp look2
ok:
mov edx,1
mov pd,edx
jmp sc1
notok:
mov edx,0
mov pd,edx
jmp sc1
sc1:
mov eax,pd
;call writeint
ret
isqr endp
searchnotqrs proc
mov ecx,0
mov esi,0
found1:
cmp ecx,10
je sc2
inc m
mov eax,m
;call writeint
call isqr
cmp eax,0
je found2
jmp found1
found2:
inc ecx
mov eax,m
mov [array+esi*4],eax
inc esi
jmp found1
sc2:
ret
searchnotqrs endp
output proc
mov esi,0
sc:
mov eax,[array+esi*4]
inc esi
call writeint
loop sc
ret
output endp
end main