zoukankan      html  css  js  c++  java
  • [汇编] 大小写转换

      1 data segment       
      2     ;定义字符串缓冲区
      3     ;MAXLEN 表示允许输入的最大字符数量
      4     ;ACTLEN 表示实际输入的数量
      5     ;STR 用于存储输入的字符串
      6     ;以下面为例,允许最大输入5个字符,如果STR后面的长度也定义为5,则实际输入的字符数量仅为4,
      7     ;因为最后一个字符会用于存储0Dh(回车符号)
      8     ;例如:输入"1234",然后回车,此时内存的情况为: 05 00 31 32 33 34 0D
      9     ;因此,为了满足实际的最大数量,通常将MAXLEN定义得比实际的多1个。       
     10     MAXLEN db 6         ;允许最大长度
     11     ACTLEN db 0         ;实际长度
     12     STR dw 6 dup('')    ;存放字符串
     13     ;提示语句
     14     PROMPT1 db 0DH,0AH,"Please input a string:$"
     15     PROMPT2 db 0DH,0AH,"Your string is :$" 
     16     CHOOSE  db 0DH,0AH,"chose 1 or 2:$"     
     17 ends
     18 
     19 code segment
     20 start:
     21     ;设置数据段寄存器
     22     mov ax, data
     23     mov ds, ax 
     24 input:
     25     ;提示输入,提示语句位于ds:dx处 
     26     lea dx, CHOOSE
     27     mov ah, 9
     28     int 21h  
     29     mov ah,01H  ;输入跳转
     30     int 21h
     31     cmp al,31H   
     32     mov dl,0AH 
     33     mov ah,02H
     34     int 21h
     35     mov dl,0DH 
     36     mov ah,02H
     37     int 21h
     38     jz  tosmall
     39     jmp tobig
     40 tosmall: 
     41     call input_str 
     42     mov si,0;指针
     43     mov cl,ACTLEN;循环次数
     44     mov ch,0
     45     call tosmall_print
     46     jmp next 
     47 tobig:
     48     call input_str
     49     mov si,0;指针
     50     mov cl,ACTLEN;循环次数
     51     mov ch,0
     52     call tobig_print
     53     jmp next 
     54 next:    
     55     JMP input
     56     ;返回操作系统 
     57     mov ax, 4c00h
     58     int 21h    
     59 ends  
     60 ;---------------------
     61 tosmall_print proc near 
     62     ;输出结果的提示语句
     63     lea dx,PROMPT2
     64     mov ah, 9
     65     int 21h 
     66 xunhuan1:
     67     mov ax,STR[si]
     68     cmp al,5BH
     69     jnb  nochange 
     70     add ax,20H
     71 nochange:
     72     mov dl,al
     73     mov ah,02H
     74     int 21H
     75     inc     si          ;加1不影响cf
     76     loop xunhuan1
     77     ret
     78 tosmall_print endp
     79 ;---------------------      
     80 tobig_print proc near 
     81     ;输出结果的提示语句
     82     lea dx,PROMPT2
     83     mov ah, 9
     84     int 21h 
     85 xunhuan2:
     86     mov ax,STR[si]
     87     cmp al,5BH
     88     jnb  nochange2 
     89     add ax,20H
     90 nochange2: 
     91     sub ax,20H
     92     mov dl,al
     93     mov ah,02H
     94     int 21H
     95     inc     si          ;加1不影响cf
     96     loop xunhuan2
     97     ret
     98 tobig_print endp
     99 ;---------------------
    100 input_str proc near
    101     ;调用AH=0ah的21H中断程序,获取输入的字符串;
    102     ;(ds:dx)=缓冲区最大字符数 
    103     ;(ds:dx+1)=实际输入字符数
    104     ;ds:dx=缓冲区首址
    105     lea dx,MAXLEN
    106     mov ah,0ah
    107     int 21h
    108     
    109     ;取得实际输入的字符串数目
    110     mov bl,ACTLEN
    111     mov bh,0 
    112     ;将结尾处改为'$'以便调用AH=09H功能,即输出刚输入的字符串
    113     mov STR[bx],'$'
    114     ret    
    115     
    116     lea dx, PROMPT1
    117     mov ah, 9
    118     int 21h
    119     ret
    120 input_str endp
    121 ;------------------------
    122 end start ; set entry point and stop the assembler.
  • 相关阅读:
    贾鹏芳 二胡演奏家
    php 关于下载中文文件实现
    Android 线程。。
    Hadoop命令行接口运行自己编写的类
    ubuntu下jdk环境变量的设置
    navicat导入sql语句文件失败原因-----datetime
    sql server获取当前时间到秒级和毫秒级的语句
    sql关于group by的问题
    java的equal和==的区别
    win8.1 占用80端口问题
  • 原文地址:https://www.cnblogs.com/zjutlitao/p/3731022.html
Copyright © 2011-2022 走看看