📄 乐曲程序.asm
字号:
newline macro
mov ah, 02h
mov dl, 0dh
int 21h
mov ah, 02h
mov dl, 0ah
int 21h
endm
data segment
maxlenk db 8 ;max key_word length
factlenk db ? ;key_word length to enter
key_word db 8 dup(?)
maxlens db 32 ;max sentence length
factlens db ? ;sentence length to enter
sentence db 32 dup(?)
info1 db 'Enter Key_word:$'
info2 db 'Enter sentence:$'
mess0 db 'Match at location:$'
mess1 db 'No match.$'
mess2 db ?,?,'H of the sentence.$'
data ends
stack segment stack
stack ends
code segment
main proc far
assume cs:code, ds:data, es:data, ss:stack
start:
push ds
sub ax, ax
push ax
mov ax, data
mov ds, ax
mov es, ax
mov ah, 09h
lea dx, info1
int 21h
mov ah, 0ah
lea dx, maxlenk
int 21h ; read the keyword
begin:
newline
mov ah, 09h
lea dx, info2
int 21h
mov ah, 0ah
lea dx, maxlens
int 21h ; read the sentence
newline
lea si, key_word
lea bx, sentence
lea di, sentence
mov dl, 00h
cld
again:
mov cl, factlenk
repz cmpsb
jz match
mov al, factlens
sub al,factlenk
js next1
inc al
lea si, key_word
inc bx
mov di, bx
inc dx
cmp dl, al
jl again
next1:
lea dx, mess1
mov ah, 09h
int 21h
jmp begin
match:
lea dx, mess0
mov ah, 09h
int 21h
mov ax, bx
lea bx, sentence
sub ax, bx
mov bx,0001h
add ax,bx
and ax, 00ffh
xchg ax,bx
mov ch, 2
rotate:
mov cl,4h
rol bl,cl
mov al,bl
and al,0fh
add al,30h
cmp al,3ah
jl print
add al,7h
print:
mov ah,02h
mov dl,al
int 21h
dec ch
jnz rotate
mov ah,09h
lea dx,mess2
int 21h
jnl begin
ret
main endp
code ends
end start
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -