定义:
BUFF DB ‘ABCD$EFGHIJK$’
STR1 DB 12 DUP(?)
LEN DB ?
要求:
用串指令结合子过程的概念,编写程序完成以下操作:
(1)设计完成功能1 对字符串STR1全部置‘*’符。
(2)拷贝功能,参数包括方向:
如,从左到右把BUFF中的字符串传送到STR1。
从右到左把BUFF中的字符串传送到STR1。
(3)字符串比较功能:
比较BUFF与STR1两个字符串是否相等,如相等则DX=1,
否则DX=0。
(4)匹配算法:
查找BUFF中有无字符$,此外,把字符$出现的次数计入BX寄存器
实验代码:
data segment
BUFF db 'ABCD$EFGHIJK$'
STR1 db 12 DUP(?)
LEN db ?
data ends
code segment
assume ds:data,cs:code
main proc far
start:
mov ax,data
mov ds,ax
Call fun1
mov ax,1;从左到右复制
Call fun2
mov ax,2;从右到左复制
Call fun2
Call fun3
Call fun4
mov ax,4c00h
int 21h
main endp
;---------------
fun1 proc near
mov cx,12
mov bx,0
mov dl,'*'
s1:mov STR1[bx],dl
inc bx
loop s1
ret
fun1 endp
;--------------
fun2 proc near
cmp ax,1
jz label1;如果ax=1则跳到label1
jmp label2;否则跳到label2
label1: mov bx,0
mov cx,12
s21: mov dl, BUFF[bx]
mov STR1[bx],dl
inc bx
loop s21
jmp exit4
label2: mov bx,0
mov si,11
mov cx,12
s22: mov dl, BUFF[bx]
mov STR1[si],dl
inc bx
dec si
loop s22
jmp exit4
exit4 :ret
fun2 endp
;---------------
fun3 proc near
mov si,0
mov dx,1
mov cx,12
s3:mov bl,BUFF[si]
mov al,STR1[si]
cmp bl,al
inc si
jne c;不相等
loop s3
jmp exit
c:
mov dx,0
jmp exit
exit:
ret
fun3 endp
;---------------
fun4 proc near
mov bx,0
mov cx,12
mov si,0
mov al,'$'
s4:mov dl,BUFF[bx]
cmp dl,al
inc bx
jz ad
loop s4
ad:
inc si
ret
fun4 endp
;---------------
code ends
end start
运行结果:
(1)子程序运行结果截图:
(2)子程序运行结果截图:
从左到右copy
从右到左copy
(4)(5)子程序运行结果截图:
(结果在DX,BX中)