1、上机题目:数据查找 内容:TAB开始的字节单元中存放N个无符号数,dat单元存放一个已知数据X,现从TAB中查找是否存在数据X,如果存在,NO单元存放该数据在TAB中的序号,否则NO单元存放0FFH 。
TAB byte X1,……,XN
dat byte x
no byte ?
要求:熟练掌握循环程序设计方法
include Irvine32.inc
.data
tab dword 1,2,5,9,10
dat dword 2
no dword ?
.code
main proc
mov edx,0
mov ebx,0
mov ecx,lengthof tab
mov eax,dat
again: mov no,edx
cmp eax,[tab+ebx*4]
je ext2
inc edx
add ebx,1
loop again
ext1: mov no,0ffh
ext2: mov eax, no
call writeint
exit
main endp
end main
2. 上机题目:无符号数排序 内容:TAB开始的单元中存放N(N>1)个字节无符号数,请按照从大到小排序后,存入DAT单元中。(注意:TAB数据保持不变)
TAB byte X1,……,XN(数据自己设定)
DAT byte N DUP(?)
要求:熟练掌握循环程序设计方法
以下用的是冒泡排序法类比C++
include Irvine32.inc
.data
tab dword +10,+3,+5,+6,+9
dat dword 5 dup(?)
n dword 5
.code
main proc
mov ecx,5
mov edx,0
mov esi,0
i1: mov eax,[tab+4*esi]
mov [dat+4*esi],eax
inc esi
loop i1
mov ecx,-1
;以上没毛病
i2: inc ecx ;i++
mov edx,-1 ;j=0
mov ebx,offset dat
dec n ;n-i-1
cmp ecx,5 ;i<5
jl j2 ;跳转到j
jmp sc1 ;否则跳到输出准备
j2:
inc edx ;j++
cmp edx,n ;j<n
jl swap ;跳到交换判断
jmp i2 ;否则回到i2
swap:
mov eax,[ebx];eax=dat[j]
cmp eax,[ebx+4];dat[j]>dat[j+1]
jg guodu ;则直接到过度不交换
mov esi,[ebx+4]
mov [ebx+4],eax
mov [ebx],esi
jmp guodu
guodu: add ebx,4
jmp j2
;以下没毛病
sc1: mov esi,0
mov ecx,5
sc: mov eax,[dat+4*esi]
call writeint
inc esi
loop sc
exit
main endp
end main