| 
 | 
 
马上注册,结交更多好友,享用更多功能^_^
您需要 登录 才可以下载或查看,没有账号?立即注册  
 
x
 
大写变小写 小写变大写 
- assume cs:code
 
  
- data segment
 
  
- db 'WSsb'
 
 - db 'SKks'
 
  
- data ends
 
  
- code segment
 
  
- start: 
 
 -       mov ax,data
 
 -       mov ds,ax
 
 -       mov cx,4
 
 -       mov bx,0
 
 -       
 
 -       p:
 
 -         mov al,[bx]
 
 -        and al,11011111b //不能直接 【bx】 
 
 -        mov [bx],al
 
 -        inc bx
 
 -        
 
 -        loop p
 
 -        mov cx,4
 
  
-        l:  
 
 -        mov al,[bx]
 
 -        or  al,00100000b //第五位变1
 
 -        mov [bx],al
 
 -        inc bx
 
 -        
 
 -        loop l
 
  
-        mov ax,4c00h
 
 -        int 21h
 
  
-        code ends
 
  
-        end start
 
  复制代码 
为啥会 out of memary   
还有 为什么不能直接    对【bx】按位运算呢
 本帖最后由 jackz007 于 2021-3-13 01:09 编辑 
        把第 20 、29 行的注释符由 // 改为 ; 就可以消除 "out of memory" 的问题 
        关于位操作的疑问,答案是肯定的,试试我修改过的代码
 - assume cs:code , ds:data
 
 - ,
 
 - data segment
 
  
- db 'WSsb'
 
 - db 'SKks'
 
  
- data ends
 
  
- code segment
 
  
- start:
 
 -        mov ax,data
 
 -        mov ds,ax
 
 -        xor bx,bx
 
 -        mov cx,4
 
 - p:     and byte ptr[bx],11011111b ; 不能直接 【bx】
 
 -        inc bx
 
 -        loop p
 
 -        mov cx,4
 
 - l:     or  byte ptr[bx],00100000b ; 第五位变1
 
 -        inc bx
 
 -        loop l
 
 -        mov ax,4c00h
 
 -        int 21h
 
 -        code ends
 
 -        end start
 
  复制代码
        这个代码二进制操作的目的如果是字母的大小写转换,那就很有必要在转换前进行字符判断,这道手续不可以省略,否则,会乱套的。  
 
 
 |   
 
 
 
 |