发个DOS asm在cmd中间显字符[把小写转大写]
程序代码:
;刚才整理了一下硬盘,这个是看王爽的书时的练习,开始我是从暗组那里搞几下想学破解,哈,一学就学这么久,还没破入门。 ;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