注册 登录
编程论坛 汇编论坛

发个DOS asm在cmd中间显字符[把小写转大写]

onepc 发布于 2009-10-10 13:33, 1441 次点击
程序代码:
;刚才整理了一下硬盘,这个是看王爽的书时的练习,开始我是从暗组那里搞几下想学破解,哈,一学就学这么久,还没破入门。
;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   
0 回复
1