l1: cmp al, cl
jle l2
( xchg al,cl ) l2: ret
5.2 数据段如下:
data segment
da1 db 1,2,‘abcd’ count = $-da1
da2 db 9 dup(?)
data ends
补充括号处的指令,使得程序把DA1数据区数据移到DA2数据区。 mov ax,data
mov ds, ax
mov es,( AX ) mov cx,( COUNT )
mov si, ( OFFSET DA1 ) ( MOV DI, OFFSET DA2 ) ( REP MOVSB )
5.3 以下程序对无符号数组ARRAY的6个元素从小到大排序,补充括号处的指令。
data segment
array dw 4,3,12,56,5,8 data ends code segment
assume cs:code,ds:data start: ( mov ax,data ) ( mov ds, data ) mov cx, 5 l1: mov di, cx mov bx, 0 l2: mov ax, array[bx] cmp ax, array[bx+2]
( jl l3 )
xchg ax, array[bx+2] mov array[bx], ax
l3: add bx, 2
( loop l2 ) mov cx, di loop l1
mov ah, 4ch int 21h
code segment
end start
11
5.4 编写程序,实现从键盘输入的小写字母用大写字母显示出来。对输入须合法性检查。
code segment
assume cs:code start: push ds sub ax,ax push ax mov ah,1 int 21h cmp al,61h jb exit cmp al,7ah ja exit
sub al,20h mov dl,al mov ah,2 int 21h
exit:ret code ends
end start
5.5 编写程序,比较两个字符串是否相同,如果相同,则显示两个字符串,如果
不同,则显示发现不同的字符位置。 datasg segment
mess1 db 13,10, 'input string1:$' mess2 db 13,10, 'input string2:$' mess3 db 13,10, 'match!$' mess4 db 13,10, 'no match at $'
st1 label byte max1 db 6 act1 db ? stok1 db 6 dup(?)
st2 label byte max2 db 6 act2 db ?
stok2 db 6 dup(?) datasg ends
codesg segment
assume cs:codesg, ds:datasg,es:datasg main proc far
12
push ds sub ax,ax push ax
mov ax,datasg mov ds,ax mov es,ax lea dx,mess1 mov ah,09
int 21h ;qust1? lea dx,st1 mov ah,0ah
int 21h ;ans1
lea dx,mess2 mov ah,09
int 21h ;qust2?
lea dx,st2 mov ah,0ah
int 21h ;ans2 mov cl,act1 mov dl,act2 cmp cl,dl jnz nomatch lea si,stok1 lea di,stok2 inc cl
repe cmpsb cmp cl,0 jz match nomatch: lea dx,mess4 jmp exit match: lea dx,mess3
exit:
mov ah,09 int 21h
sub di,offset stok2 mov dx,di and dx,0fh add dl,30h mov ah,2 int 21h
13
ret main endp codesg ends
end main
5.6 编写程序,从键盘输入一个个位数N,响铃N次(响铃ASCII码为07H)。 code segment
assume cs:code start: push ds sub ax,ax push ax mov ah,1 int 21h cmp al,31h jb exit cmp al,39h ja exit
sub al,30h mov cl,al mov ch,0 k: mov ah,2
mov dl,7 int 21h loop k
exit:ret code ends
end start
5.7 编写程序,从键盘输入一个字符串到BUFF,再输入一个字符到AL,在字
符串BUFF中查找是否存在该字符,如果找到,显示发现的字符位置。 ;search datasg segment para'data' mess1 db 13,10, 'input string:$' mess2 db 13,10, 'input a char:$' mess3 db 13,10, 'found at $' mess4 db 13,10, 'no found !$'
st1 label byte max1 db 6 act1 db ?
stok1 db 6 dup(?)
datasg ends
14
codesg segment para'code'
assume cs:codesg, ds:datasg,es:datasg main proc far push ds sub ax,ax push ax
mov ax,datasg mov ds,ax mov es,ax lea dx,mess1 mov ah,09
int 21h ;qust1? lea dx,st1 mov ah,0ah
int 21h ;ans1
lea dx,mess2 mov ah,09
int 21h ;qust2?
mov ah,1
int 21h ;ans2 lea di,stok1 repne scasb jz match nomatch:
lea dx,mess4 jmp exit
match: lea dx,mess3
exit:
mov ah,09 int 21h sub di,offset stok1 mov dx,di and dx,0fh add dl,30h mov ah,2 int 21h
ret main endp codesg ends
end main
15