STM32
直播中

surround

12年用户 553经验值
私信 关注
[问答]

如何调用中断将字符串中的小写字母转化为大写字母呢

如何调用中断将字符串中的小写字母转化为大写字母呢?

回帖(1)

李华

2021-11-30 14:38:47
调用中断将字符串中小写字母转化为大写字母

DATAS SEGMENT
    ;此处输入数据段代码  
   msg  db 'welcome to masm','0'
DATAS ENDS


STACKS SEGMENT
    ;此处输入堆栈段代码
STACKS ENDS




CODES SEGMENT
    ASSUME CS:CODES,DS:DATAS,SS:STACKS
START:
    MOV AX,DATAS
    MOV DS,AX
    ;此处输入代码段代码,设置好es:[di]和ds:[si]来进行数据的转移

        ;设置ds:[si],设置源目的地
        mov ax,cs
        mov ds,ax
        mov si,offset change
       
        ;设置es:[di],设置目的地
        mov ax,0
        mov es,ax
        mov di,200h
       
        mov cx,offset last - offset change  ;设置移动的方向
        cld ;设置正向移动
        rep mov***  ;将数据进行移动

        ;下面开始设置7c号中断
       
        mov ax,0
        mov es,ax
        mov word ptr es:[7ch*4],200h
        mov word ptr es:[7ch*4+2],0




        ;设置句子的起始位置,将ds:[si]指向这个句子
        mov ax,DATAS
        mov ds,ax
        mov si,offset msg
        int 7ch
        ;这里已经设置好中断向量了
        ;mov ax,10
        ;int 7ch
    MOV AH,4CH
    INT 21H
    ;书写一个中断,必须加iret
    ;一个中断必须要有iret来返回原有的程序中,这里只需要修改这里的内容即可
    ;ds:[si]指向的是字符串的首地址,将字符串中的小写字母转化为大写字母,最后的字符是0
    ;分析:如何将一个小写字母转化为大写字母,小写字母和大写字母之间的差距就是ASCII差20h,就是32,小写字母更大一些
    change:
            push cx
            push si
                  
   s:  cmp byte ptr [si],0    ;判断这个是不是0
              jz s1    ;如果是0的话就跳出循环
              cmp byte ptr [si],61h ;和a进行比较
              *** s2
       cmp byte ptr [si],7Ah
       ja s2
       and byte ptr [si],11011111b ;进行与操作,减去20h
           
            s2:inc si
               jmp s  ;继续比较操作,转换字母大小
  
               s1:pop di
                  pop cx
                  iret  ;这个是用于返回主程序的
   
    last:nop
    ;需要程序存放到0:200处的内存中,并且将程序的地址存放到7c号中断处
CODES ENDS
    END START
NDS    END START
举报

更多回帖

发帖
×
20
完善资料,
赚取积分