
;刚才整理了一下硬盘,这个是看王爽的书时的练习,开始我是从暗组那里搞几下想学破解,哈,一学就学这么久,还没破入门。
;by onepc 153785587
;先字符串的小写字母转为大写。。。注:只是先把字符串转为大写。然后再把这个字符串显示
assume cs:code
data segment
db "Welcome to darkst! the zero study carck. onepc's first dos asm", 0
data ends
code segment
start: mov ax, data
mov ds, ax
mov si, 0
call conver
call show_str ;把指向mov ax,4c00h的IP压入栈中 [push ip]-------ss:sp指向栈顶
mov ax, 4c00h
int 21h
conver:mov al,[si]
cmp al,0
je ok ;这里若是al等于0那么就跳到ok ret这里把栈里的数据变为ip的值,就是说恢复call之前的ip指向的地址
cmp al,61h ;
jnb dayu ;这里不小于就跳 就是说比61大的就跳
mov [si],al ;若是不比61大那么就把值没改变又送回去
inc si
jmp short conver
dayu:cmp al,7ah
jna yes ;再与小写z比较若是在 61-7a的范围内那么就表示小写
mov [si],al ;这里不在这个范围内那么也直接传回去
jmp conver
yes:and al,11011111b ;这里把小写转大写
mov [si],al ;转之后的再传回去
jmp conver
show_str:mov si, 0
mov ax,0b800h
mov es,ax
mov di,(11*160+5*2) ;这里是在12行的16列里显示字符
wstring:mov al,[si]
cmp al,0 ;比较不影响结果,al-0 这里若是结果为0 则把标志寄存器zf位置1
je ok ;这里的意思就是说若是zf=1 表示相等,那么就跳转
mov es:[di+0],al
mov es:[di+1],2
inc si
add di,2
jmp short wstring
ok:ret
code ends
end start
;by onepc 153785587
;先字符串的小写字母转为大写。。。注:只是先把字符串转为大写。然后再把这个字符串显示
assume cs:code
data segment
db "Welcome to darkst! the zero study carck. onepc's first dos asm", 0
data ends
code segment
start: mov ax, data
mov ds, ax
mov si, 0
call conver
call show_str ;把指向mov ax,4c00h的IP压入栈中 [push ip]-------ss:sp指向栈顶
mov ax, 4c00h
int 21h
conver:mov al,[si]
cmp al,0
je ok ;这里若是al等于0那么就跳到ok ret这里把栈里的数据变为ip的值,就是说恢复call之前的ip指向的地址
cmp al,61h ;
jnb dayu ;这里不小于就跳 就是说比61大的就跳
mov [si],al ;若是不比61大那么就把值没改变又送回去
inc si
jmp short conver
dayu:cmp al,7ah
jna yes ;再与小写z比较若是在 61-7a的范围内那么就表示小写
mov [si],al ;这里不在这个范围内那么也直接传回去
jmp conver
yes:and al,11011111b ;这里把小写转大写
mov [si],al ;转之后的再传回去
jmp conver
show_str:mov si, 0
mov ax,0b800h
mov es,ax
mov di,(11*160+5*2) ;这里是在12行的16列里显示字符
wstring:mov al,[si]
cmp al,0 ;比较不影响结果,al-0 这里若是结果为0 则把标志寄存器zf位置1
je ok ;这里的意思就是说若是zf=1 表示相等,那么就跳转
mov es:[di+0],al
mov es:[di+1],2
inc si
add di,2
jmp short wstring
ok:ret
code ends
end start