📄 serhex.asm
字号:
data segment
s1 db 'Please Input the String:$'
s2 db 0ah, 0dh, 'Input the substring:$'
r1 db 0ah, 0dh, 'No match!', 0ah, 0dh,'$'
r2 db 0ah, 0dh, 'Match at $'
string db 50, 0, 50 dup(?)
subs db 50 ,0, 50 dup(?)
data ends
code segment
assume cs:code, ds:data
start:
mov ax, data
mov ds, ax
getString:
mov ah, 09h
lea dx, s1
int 21h ;显示输入提示
mov ah,0ah
lea dx, string
int 21h ;输入string
mov ah, 09h
lea dx, s2
int 21h ;显示输入提示
mov ah,0ah
lea dx, subs
int 21h ;输入substring
lea si, subs+2
lea di, string+2
mov cl, [si-1]
mov dl, [di-1]
mov bx, 01h
begin:
inc bx
mov al, [si]
cmp al, [di]
jz trust
jnz false
trust:
inc si
inc di
dec cl
dec bx
cmp cl, 00h
jnz begin
jz match
false:
inc di
dec dl
cmp dl, 00h
jnz begin
jz nomatch
match:
lea dx, r2
mov ah, 09h
int 21h
;转成十六进制
mov ax, bx
mov cl, 10h
div cl
mov cl, al ;商存于cl
mov ch, ah ;余数存于ch
h:
cmp cl, 9
js h1
jns h2
h1:
add cl, 30h
mov ah, 02h
mov dl, cl
int 21h
jmp l
h2:
add cl, 37h
mov ah, 02h
mov dl, cl
int 21h
jmp l
l:
cmp ch, 9
js l1
jns l2
l1:
add ch, 30h
mov ah, 02h
mov dl, ch
int 21h
jmp exit
l2:
add ch, 37h
mov ah, 02h
mov dl, ch
int 21h
jmp exit
nomatch:
lea dx, r1
mov ah, 09h
int 21h
jmp exit
exit:
mov ah, 4CH
int 21h
code ends
end start
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -